openvibers/openvibe.contracts Commits

0.255.0: network.consent@1 — data and AI by consent (L24) (#263)

OP OpenVibers committed 13 days ago · 884a84c859 · 74 files, +13413 −88

Nothing a person makes is off-limits to AI or data use by design; each use is off until that person turns it on.
The owner, 2026-10-31: "we're never gonna sell data without permission, or train on data without permission, but
… people opt in … someone can use SDK or API to do that."

- network.consent@1: one person's choice for one purpose (ai.train, data.public, face.recognize, ai.looks,
  app.data), narrowed by kinds of content, an app and options (a licence, face features). It records the wording
  seen (text_version), where it was made, and granted_at, revoked_at and expires_at. A choice is turned off by
  revoking it, never by deleting it. The id prefix is cns_.
- network.consent-choice@1 and network.me-consent-result@1: "Your data choices" (GET and PUT /api/v1/me/consent,
  capability network.consent.manage).
- network.consent-check-request@1 and network.consent-check-result@1: a service asks before each use, up to 500
  people a call (POST /internal/consent/check, capability network.consent.read, first-party). An unknown person
  answers false, like one who never chose; Network unreachable means off.
- network.consent.changed: drops cached answers; it names the change, never the content.
- No purpose sells data: that needs its own contract and a yes for each deal.

test/network-consent.test.js holds the rules the schemas cannot say: one list of purposes and kinds across the
family, cns_ ids, no selling purpose, the fixtures, and the capabilities. generated/ is regenerated.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 301e7cd5..c4d60d2e 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -1,5 +1,21 @@
# Changelog
++## 0.255.0 — 2026-10-31
++
++- **Data and AI by consent** (L24, the consent plan `OpenVibe_Consent_Plan_2026-10-31.md`): nothing a person makes is
++ off-limits to AI or data use by design; each use is off until that person turns it on.
++ - **`network.consent@1`:** one person's choice for one purpose (`ai.train`, `data.public`, `face.recognize`,
++ `ai.looks`, `app.data`), narrowed by kinds of content, an app and options (a licence, face features). It records
++ the wording seen (`text_version`), where it was made, and `granted_at`, `revoked_at` and `expires_at`. A choice is
++ turned off by revoking it, never by deleting it. The id prefix is `cns_`.
++ - **`network.consent-choice@1` and `network.me-consent-result@1`:** "Your data choices" (`GET` and `PUT
++ /api/v1/me/consent`, capability `network.consent.manage`).
++ - **`network.consent-check-request@1` and `network.consent-check-result@1`:** a service asks before each use, for up
++ to 500 people (`POST /internal/consent/check`, capability `network.consent.read`, first-party). An unknown person is
++ false, like one who never chose. Network unreachable means off.
++ - **`network.consent.changed`:** drops cached answers. It names the change, never the content.
++ - **No purpose sells data.** That needs its own contract and a yes for each deal.
++
## 0.254.0 — 2026-10-30
- **`actor.wait@1`** (plan A2, Watch mode; the design note `research-2026-10-30/agent-a2-watch.md`): one wait — the
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex cd08aa9b..a32d01af 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -7716,6 +7716,60 @@
"compatibility": "backward",
"status": "active"
},
++ {
++ "id": "network.consent",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "network/consent.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "network.consent-choice",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "network/consent-choice.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "network.me-consent-result",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "network/me-consent-result.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "network.consent-check-request",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "network/consent-check-request.v1.json",
++ "visibility": "first-party",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "network.consent-check-result",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "network/consent-check-result.v1.json",
++ "visibility": "first-party",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "network.consent.changed",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "events/payloads/network.consent.changed.v1.json",
++ "visibility": "first-party",
++ "compatibility": "backward",
++ "status": "active"
++ },
{
"id": "today.event.scheduled",
"version": "1.0.0",
ddiff --git a/contracts/events/payloads/network.consent.changed.v1.json b/contracts/events/payloads/network.consent.changed.v1.json
nnew file mode 100644
iindex 00000000..4c02a898
---- /dev/null
++++ b/contracts/events/payloads/network.consent.changed.v1.json
@@@ -0,0 +1,44 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/network.consent.changed.v1.json",
++ "title": "NetworkConsentChangedPayload",
++ "description": "network.consent.changed v1 (OpenVibe.Network, L24): a person turned a purpose on or off, an app's grant was revoked, or a choice expired. A service that caches consent answers drops that subject's answers for the purpose at once; one that is running a use for the subject (a dataset build, a recognition, an AI text) checks again before it goes on. The payload names the change and never the content it covers.",
++ "type": "object",
++ "required": ["consent_id", "subject", "purpose", "client", "on", "kinds", "text_version", "changed_at"],
++ "additionalProperties": false,
++ "properties": {
++ "consent_id": {
++ "type": "string",
++ "pattern": "^cns_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "subject": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "purpose": {
++ "enum": ["ai.train", "data.public", "face.recognize", "ai.looks", "app.data"]
++ },
++ "client": {
++ "type": ["string", "null"],
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$"
++ },
++ "on": {
++ "type": "boolean",
++ "description": "Whether the purpose is allowed after the change."
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": { "enum": ["streams", "vods", "clips", "voice", "chat", "posts", "pictures", "code"] }
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$"
++ },
++ "changed_at": {
++ "type": "string",
++ "format": "date-time"
++ }
++ }
++}
ddiff --git a/contracts/network/consent-check-request.v1.json b/contracts/network/consent-check-request.v1.json
nnew file mode 100644
iindex 00000000..b3925923
---- /dev/null
++++ b/contracts/network/consent-check-request.v1.json
@@@ -0,0 +1,36 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/consent-check-request.v1.json",
++ "title": "NetworkConsentCheckRequest",
++ "description": "network.consent-check-request@1 (L24): may this purpose be used for these people? POST /internal/consent/check on OpenVibe.Network with a service token holding network.consent.read. One purpose per call, up to 500 subjects (a dataset build or a chat log checks its authors in batches).",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["purpose", "subjects"],
++ "properties": {
++ "purpose": {
++ "enum": ["ai.train", "data.public", "face.recognize", "ai.looks", "app.data"],
++ "description": "The purpose to check (network.consent@1)."
++ },
++ "kind": {
++ "enum": ["streams", "vods", "clips", "voice", "chat", "posts", "pictures", "code"],
++ "description": "The kind of content the use is about. A choice limited to other kinds answers false."
++ },
++ "client": {
++ "type": "string",
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$",
++ "description": "app.data only: the app asking. Required for app.data."
++ },
++ "feature": {
++ "enum": ["verify", "find", "cast", "library"],
++ "description": "face.recognize only: the recognition about to run."
++ },
++ "subjects": {
++ "type": "array",
++ "minItems": 1,
++ "maxItems": 500,
++ "uniqueItems": true,
++ "items": { "type": "string", "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "description": "The people the use would be about."
++ }
++ }
++}
ddiff --git a/contracts/network/consent-check-result.v1.json b/contracts/network/consent-check-result.v1.json
nnew file mode 100644
iindex 00000000..e25be4a8
---- /dev/null
++++ b/contracts/network/consent-check-result.v1.json
@@@ -0,0 +1,42 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/consent-check-result.v1.json",
++ "title": "NetworkConsentCheckResult",
++ "description": "network.consent-check-result@1 (L24): the answer to network.consent-check-request@1. Every subject asked about is in allowed: true only for an active choice that covers the purpose, the kind, the app and the feature asked about. An unknown or deleted subject is false, the same as a person who never chose (the answer never says whether an account exists). A service caches an answer for at most 60 s and drops it on network.consent.changed; when Network cannot answer, every subject is false.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["purpose", "allowed", "checked_at"],
++ "properties": {
++ "purpose": {
++ "enum": ["ai.train", "data.public", "face.recognize", "ai.looks", "app.data"]
++ },
++ "kind": {
++ "enum": ["streams", "vods", "clips", "voice", "chat", "posts", "pictures", "code"]
++ },
++ "client": {
++ "type": "string",
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$"
++ },
++ "feature": {
++ "enum": ["verify", "find", "cast", "library"]
++ },
++ "allowed": {
++ "type": "object",
++ "maxProperties": 500,
++ "propertyNames": { "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "additionalProperties": { "type": "boolean" },
++ "description": "Each subject asked about, and whether the use is allowed for them."
++ },
++ "licence": {
++ "type": "object",
++ "maxProperties": 500,
++ "propertyNames": { "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "additionalProperties": { "enum": ["cc-by-4.0", "cc0-1.0"] },
++ "description": "data.public only: the licence each allowed subject chose."
++ },
++ "checked_at": {
++ "type": "string",
++ "format": "date-time"
++ }
++ }
++}
ddiff --git a/contracts/network/consent-choice.v1.json b/contracts/network/consent-choice.v1.json
nnew file mode 100644
iindex 00000000..54a3be77
---- /dev/null
++++ b/contracts/network/consent-choice.v1.json
@@@ -0,0 +1,40 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/consent-choice.v1.json",
++ "title": "NetworkConsentChoice",
++ "description": "network.consent-choice@1 (L24): the body of PUT /api/v1/me/consent/:purpose on OpenVibe.Network — the signed-in person turns a purpose on or off. Turning on records the wording they saw (text_version, which must be the current one) and, for the adults-only purposes, that they confirmed they are 18 or older. Turning off revokes the active choice. An app's choice (app.data) is made on its consent screen, not here.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["on"],
++ "properties": {
++ "on": { "type": "boolean" },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": { "enum": ["streams", "vods", "clips", "voice", "chat", "posts", "pictures", "code"] }
++ },
++ "options": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "licence": { "enum": ["cc-by-4.0", "cc0-1.0"] },
++ "features": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": { "enum": ["verify", "find", "cast", "library"] }
++ }
++ }
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$",
++ "description": "The wording the page showed. Required to turn on; a stale one is refused (consent.stale_text) so the page shows the new words first."
++ },
++ "adult": {
++ "type": "boolean",
++ "description": "The person confirmed they are 18 or older. Required (true) to turn on face.recognize, ai.looks, ai.train or data.public."
++ }
++ }
++}
ddiff --git a/contracts/network/consent.v1.json b/contracts/network/consent.v1.json
nnew file mode 100644
iindex 00000000..e0f4f0b1
---- /dev/null
++++ b/contracts/network/consent.v1.json
@@@ -0,0 +1,90 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/consent.v1.json",
++ "title": "NetworkConsent",
++ "description": "network.consent@1 (L24, data and AI by consent, 2026-10-31): one person's choice for one purpose. Nothing a person makes is off-limits to AI or data use by design; each use is off until that person turns it on, here. The record is the proof of what was allowed, by whom, under which wording and when: a choice is turned off by setting revoked_at, never by deleting the row. Stored by OpenVibe.Network (consents, with every change in consent_events), read by a person at GET /api/v1/me/consent and by services through POST /internal/consent/check (capability network.consent.read). A service that cannot reach Network treats every purpose as off.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["id", "subject", "purpose", "on", "kinds", "client", "options", "text_version", "source", "granted_at", "revoked_at", "expires_at"],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^cns_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "The choice's own id (cns_<ULID>). A choice changed later (other kinds, another licence) is a new record; the old one is revoked."
++ },
++ "subject": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "Whose choice it is. Only that person (or an account merge or deletion) changes it."
++ },
++ "purpose": {
++ "enum": ["ai.train", "data.public", "face.recognize", "ai.looks", "app.data"],
++ "description": "What turning it on allows. ai.train: OpenVibe trains or fine-tunes models on the person's content. data.public: the person's content goes into OpenVibe's open dataset under the licence in options. face.recognize: the person's face is recognised (the features in options; OpenVibe.Vision keeps the encrypted templates). ai.looks: AI text about the person may describe how they look (it lifts the no-looks rule for that person only, never for anyone else in frame). app.data: one named app (client) may use the person's content for the purposes in options."
++ },
++ "on": {
++ "type": "boolean",
++ "description": "Whether the purpose is allowed now: true while the record is active (revoked_at null and expires_at not passed). A service never decides from this field alone; it asks the check."
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": { "enum": ["streams", "vods", "clips", "voice", "chat", "posts", "pictures", "code"] },
++ "description": "Which of the person's content it covers. Empty means every kind the purpose applies to. face.recognize and ai.looks take no kinds (they are about the person, not a piece of content)."
++ },
++ "client": {
++ "type": ["string", "null"],
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$",
++ "description": "The app the choice is for: null means OpenVibe itself; otherwise the OAuth client id of an app the person granted (required for app.data, and only there)."
++ },
++ "options": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "licence": {
++ "enum": ["cc-by-4.0", "cc0-1.0"],
++ "description": "data.public only: the licence the person's content is published under."
++ },
++ "features": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": { "enum": ["verify", "find", "cast", "library"] },
++ "description": "face.recognize only: which recognition the person allows (OpenVibe.Vision's features). Empty means none yet."
++ },
++ "purposes": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": { "enum": ["ai.train", "data.public", "face.recognize", "ai.looks"] },
++ "description": "app.data only: what the app may do with the person's content, as the consent screen showed it."
++ }
++ },
++ "description": "What the purpose needs beyond on and kinds. An empty object for ai.train and ai.looks."
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$",
++ "description": "The exact wording the person saw when choosing (YYYY-MM-DD.n). A new wording never turns an existing choice on; it may only ask again."
++ },
++ "source": {
++ "enum": ["account", "oauth", "api", "import:vision"],
++ "description": "Where the choice was made: the account page, an app's consent screen, the person's own API call, or OpenVibe.Vision's older face consents moved into Network."
++ },
++ "granted_at": {
++ "type": "string",
++ "format": "date-time",
++ "description": "When the person turned it on."
++ },
++ "revoked_at": {
++ "type": ["string", "null"],
++ "format": "date-time",
++ "description": "When it was turned off (by the person, by revoking the app, by a merge or by deleting the account), or null while it holds. Use stops on the next check; a model already trained keeps what it learned, and the next dataset release leaves the person's content out."
++ },
++ "expires_at": {
++ "type": ["string", "null"],
++ "format": "date-time",
++ "description": "When the choice ends by itself (a time-limited grant, or the end of a face purpose), or null for no end."
++ }
++ }
++}
ddiff --git a/contracts/network/me-consent-result.v1.json b/contracts/network/me-consent-result.v1.json
nnew file mode 100644
iindex 00000000..c6c2019b
---- /dev/null
++++ b/contracts/network/me-consent-result.v1.json
@@@ -0,0 +1,61 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/me-consent-result.v1.json",
++ "title": "NetworkMeConsentResult",
++ "description": "network.me-consent-result@1 (L24): \"Your data choices\" for the signed-in person. GET /api/v1/me/consent (and the answer to PUT /api/v1/me/consent/:purpose and DELETE /api/v1/me/consent/:purpose/:client) on OpenVibe.Network. Every purpose is listed with the words the account page shows, whether the person has turned it on, and the history of their changes. Off is the default for every purpose.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["purposes", "consents", "history"],
++ "properties": {
++ "purposes": {
++ "type": "array",
++ "maxItems": 16,
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["id", "title", "allows", "off", "cannot_undo", "adults_only", "kinds", "text_version"],
++ "properties": {
++ "id": { "enum": ["ai.train", "data.public", "face.recognize", "ai.looks", "app.data"] },
++ "title": { "type": "string", "minLength": 1, "maxLength": 80 },
++ "allows": { "type": "string", "minLength": 1, "maxLength": 300, "description": "What turning it on allows, in one plain line." },
++ "off": { "type": "string", "minLength": 1, "maxLength": 300, "description": "What turning it off does." },
++ "cannot_undo": { "type": "string", "maxLength": 300, "description": "What turning it off cannot undo (empty when nothing)." },
++ "adults_only": { "type": "boolean", "description": "Turning it on asks the person to confirm they are 18 or older." },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": { "enum": ["streams", "vods", "clips", "voice", "chat", "posts", "pictures", "code"] },
++ "description": "The kinds of content the person may narrow it to (empty: the purpose takes none)."
++ },
++ "text_version": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$" }
++ }
++ }
++ },
++ "consents": {
++ "type": "array",
++ "maxItems": 200,
++ "items": { "$ref": "consent.v1.json" },
++ "description": "The person's active choices (network.consent@1), one per purpose and app."
++ },
++ "history": {
++ "type": "array",
++ "maxItems": 200,
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["consent_id", "purpose", "action", "at", "by", "text_version"],
++ "properties": {
++ "consent_id": { "type": "string", "pattern": "^cns_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "purpose": { "enum": ["ai.train", "data.public", "face.recognize", "ai.looks", "app.data"] },
++ "client": { "type": ["string", "null"], "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$" },
++ "action": { "enum": ["granted", "revoked", "expired"] },
++ "at": { "type": "string", "format": "date-time" },
++ "by": { "enum": ["person", "app_revoked", "merge", "deletion", "import"], "description": "Who made the change: the person, the app being revoked, an account merge, an account deletion, or the move of an older record." },
++ "text_version": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$" }
++ }
++ },
++ "description": "The newest changes first."
++ }
++ }
++}
ddiff --git a/fixtures/network.consent-check-request/invalid/no-subjects.json b/fixtures/network.consent-check-request/invalid/no-subjects.json
nnew file mode 100644
iindex 00000000..95630cd3
---- /dev/null
++++ b/fixtures/network.consent-check-request/invalid/no-subjects.json
@@@ -0,0 +1,4 @@
++{
++ "purpose": "ai.train",
++ "subjects": []
++}
ddiff --git a/fixtures/network.consent-check-request/valid/batch.json b/fixtures/network.consent-check-request/valid/batch.json
nnew file mode 100644
iindex 00000000..b9291438
---- /dev/null
++++ b/fixtures/network.consent-check-request/valid/batch.json
@@@ -0,0 +1,8 @@
++{
++ "purpose": "ai.train",
++ "kind": "chat",
++ "subjects": [
++ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z5"
++ ]
++}
ddiff --git a/fixtures/network.consent-check-result/invalid/bad-subject-key.json b/fixtures/network.consent-check-result/invalid/bad-subject-key.json
nnew file mode 100644
iindex 00000000..e6b9b360
---- /dev/null
++++ b/fixtures/network.consent-check-result/invalid/bad-subject-key.json
@@@ -0,0 +1,7 @@
++{
++ "purpose": "ai.train",
++ "allowed": {
++ "moosely": true
++ },
++ "checked_at": "2026-10-31T05:00:01.000Z"
++}
ddiff --git a/fixtures/network.consent-check-result/valid/answer.json b/fixtures/network.consent-check-result/valid/answer.json
nnew file mode 100644
iindex 00000000..303eab40
---- /dev/null
++++ b/fixtures/network.consent-check-result/valid/answer.json
@@@ -0,0 +1,12 @@
++{
++ "purpose": "data.public",
++ "kind": "pictures",
++ "allowed": {
++ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4": true,
++ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z5": false
++ },
++ "licence": {
++ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4": "cc-by-4.0"
++ },
++ "checked_at": "2026-10-31T05:00:01.000Z"
++}
ddiff --git a/fixtures/network.consent-choice/invalid/extra-key.json b/fixtures/network.consent-choice/invalid/extra-key.json
nnew file mode 100644
iindex 00000000..f7e6cb1d
---- /dev/null
++++ b/fixtures/network.consent-choice/invalid/extra-key.json
@@@ -0,0 +1,5 @@
++{
++ "on": true,
++ "text_version": "2026-10-31.1",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4"
++}
ddiff --git a/fixtures/network.consent-choice/valid/turn-off.json b/fixtures/network.consent-choice/valid/turn-off.json
nnew file mode 100644
iindex 00000000..a456d30d
---- /dev/null
++++ b/fixtures/network.consent-choice/valid/turn-off.json
@@@ -0,0 +1,3 @@
++{
++ "on": false
++}
ddiff --git a/fixtures/network.consent-choice/valid/turn-on.json b/fixtures/network.consent-choice/valid/turn-on.json
nnew file mode 100644
iindex 00000000..6e3d050a
---- /dev/null
++++ b/fixtures/network.consent-choice/valid/turn-on.json
@@@ -0,0 +1,8 @@
++{
++ "on": true,
++ "kinds": [
++ "chat"
++ ],
++ "text_version": "2026-10-31.1",
++ "adult": true
++}
ddiff --git a/fixtures/network.consent.changed/invalid/carries-content.json b/fixtures/network.consent.changed/invalid/carries-content.json
nnew file mode 100644
iindex 00000000..79442c6b
---- /dev/null
++++ b/fixtures/network.consent.changed/invalid/carries-content.json
@@@ -0,0 +1,13 @@
++{
++ "consent_id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KA",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "purpose": "ai.train",
++ "client": null,
++ "on": true,
++ "kinds": [
++ "chat"
++ ],
++ "text_version": "2026-10-31.1",
++ "changed_at": "2026-10-31T05:00:00.000Z",
++ "content": "hello"
++}
ddiff --git a/fixtures/network.consent.changed/valid/turned-on.json b/fixtures/network.consent.changed/valid/turned-on.json
nnew file mode 100644
iindex 00000000..f5e6bbe0
---- /dev/null
++++ b/fixtures/network.consent.changed/valid/turned-on.json
@@@ -0,0 +1,12 @@
++{
++ "consent_id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KA",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "purpose": "ai.train",
++ "client": null,
++ "on": true,
++ "kinds": [
++ "streams"
++ ],
++ "text_version": "2026-10-31.1",
++ "changed_at": "2026-10-31T05:00:00.000Z"
++}
ddiff --git a/fixtures/network.consent/invalid/bad-id.json b/fixtures/network.consent/invalid/bad-id.json
nnew file mode 100644
iindex 00000000..581437e4
---- /dev/null
++++ b/fixtures/network.consent/invalid/bad-id.json
@@@ -0,0 +1,17 @@
++{
++ "id": "cns_123",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "purpose": "ai.train",
++ "on": true,
++ "kinds": [
++ "streams",
++ "vods"
++ ],
++ "client": null,
++ "options": {},
++ "text_version": "2026-10-31.1",
++ "source": "account",
++ "granted_at": "2026-10-31T05:00:00.000Z",
++ "revoked_at": null,
++ "expires_at": null
++}
ddiff --git a/fixtures/network.consent/invalid/unknown-purpose.json b/fixtures/network.consent/invalid/unknown-purpose.json
nnew file mode 100644
iindex 00000000..abc1d107
---- /dev/null
++++ b/fixtures/network.consent/invalid/unknown-purpose.json
@@@ -0,0 +1,17 @@
++{
++ "id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KA",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "purpose": "data.sell",
++ "on": true,
++ "kinds": [
++ "streams",
++ "vods"
++ ],
++ "client": null,
++ "options": {},
++ "text_version": "2026-10-31.1",
++ "source": "account",
++ "granted_at": "2026-10-31T05:00:00.000Z",
++ "revoked_at": null,
++ "expires_at": null
++}
ddiff --git a/fixtures/network.consent/valid/ai-train-streams.json b/fixtures/network.consent/valid/ai-train-streams.json
nnew file mode 100644
iindex 00000000..fd34ac3c
---- /dev/null
++++ b/fixtures/network.consent/valid/ai-train-streams.json
@@@ -0,0 +1,17 @@
++{
++ "id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KA",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "purpose": "ai.train",
++ "on": true,
++ "kinds": [
++ "streams",
++ "vods"
++ ],
++ "client": null,
++ "options": {},
++ "text_version": "2026-10-31.1",
++ "source": "account",
++ "granted_at": "2026-10-31T05:00:00.000Z",
++ "revoked_at": null,
++ "expires_at": null
++}
ddiff --git a/fixtures/network.consent/valid/app-data-revoked.json b/fixtures/network.consent/valid/app-data-revoked.json
nnew file mode 100644
iindex 00000000..a08b82b4
---- /dev/null
++++ b/fixtures/network.consent/valid/app-data-revoked.json
@@@ -0,0 +1,20 @@
++{
++ "id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KC",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "purpose": "app.data",
++ "on": false,
++ "kinds": [
++ "pictures"
++ ],
++ "client": "app_01K6R3A1B2C3D4E5F6G7H8J9KD",
++ "options": {
++ "purposes": [
++ "ai.train"
++ ]
++ },
++ "text_version": "2026-10-31.1",
++ "source": "oauth",
++ "granted_at": "2026-10-31T05:00:00.000Z",
++ "revoked_at": "2026-11-02T08:00:00.000Z",
++ "expires_at": null
++}
ddiff --git a/fixtures/network.consent/valid/face-recognize.json b/fixtures/network.consent/valid/face-recognize.json
nnew file mode 100644
iindex 00000000..33aa29d2
---- /dev/null
++++ b/fixtures/network.consent/valid/face-recognize.json
@@@ -0,0 +1,19 @@
++{
++ "id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KB",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "purpose": "face.recognize",
++ "on": true,
++ "kinds": [],
++ "client": null,
++ "options": {
++ "features": [
++ "verify",
++ "library"
++ ]
++ },
++ "text_version": "2026-10-31.1",
++ "source": "import:vision",
++ "granted_at": "2026-10-31T05:00:00.000Z",
++ "revoked_at": null,
++ "expires_at": "2027-10-31T05:00:00.000Z"
++}
ddiff --git a/fixtures/network.me-consent-result/invalid/unknown-action.json b/fixtures/network.me-consent-result/invalid/unknown-action.json
nnew file mode 100644
iindex 00000000..20f11e64
---- /dev/null
++++ b/fixtures/network.me-consent-result/invalid/unknown-action.json
@@@ -0,0 +1,14 @@
++{
++ "purposes": [],
++ "consents": [],
++ "history": [
++ {
++ "consent_id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KA",
++ "purpose": "ai.train",
++ "action": "sold",
++ "at": "2026-10-31T05:00:00.000Z",
++ "by": "person",
++ "text_version": "2026-10-31.1"
++ }
++ ]
++}
ddiff --git a/fixtures/network.me-consent-result/valid/one-choice.json b/fixtures/network.me-consent-result/valid/one-choice.json
nnew file mode 100644
iindex 00000000..7925a5d8
---- /dev/null
++++ b/fixtures/network.me-consent-result/valid/one-choice.json
@@@ -0,0 +1,53 @@
++{
++ "purposes": [
++ {
++ "id": "ai.train",
++ "title": "Train AI on my content",
++ "allows": "OpenVibe may train or fine-tune its models on the content you pick.",
++ "off": "Off: nothing new of yours is used for training.",
++ "cannot_undo": "A model already trained keeps what it learned.",
++ "adults_only": true,
++ "kinds": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ],
++ "text_version": "2026-10-31.1"
++ }
++ ],
++ "consents": [
++ {
++ "id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KA",
++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
++ "purpose": "ai.train",
++ "on": true,
++ "kinds": [
++ "streams",
++ "vods"
++ ],
++ "client": null,
++ "options": {},
++ "text_version": "2026-10-31.1",
++ "source": "account",
++ "granted_at": "2026-10-31T05:00:00.000Z",
++ "revoked_at": null,
++ "expires_at": null
++ }
++ ],
++ "history": [
++ {
++ "consent_id": "cns_01K6R3A1B2C3D4E5F6G7H8J9KA",
++ "purpose": "ai.train",
++ "client": null,
++ "action": "granted",
++ "at": "2026-10-31T05:00:00.000Z",
++ "by": "person",
++ "text_version": "2026-10-31.1"
++ }
++ ]
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 665a53d8..b011b806 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -87502,6 +87502,630 @@
}
}
},
++ "network.consent": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/consent.v1.json",
++ "title": "NetworkConsent",
++ "description": "network.consent@1 (L24, data and AI by consent, 2026-10-31): one person's choice for one purpose. Nothing a person makes is off-limits to AI or data use by design; each use is off until that person turns it on, here. The record is the proof of what was allowed, by whom, under which wording and when: a choice is turned off by setting revoked_at, never by deleting the row. Stored by OpenVibe.Network (consents, with every change in consent_events), read by a person at GET /api/v1/me/consent and by services through POST /internal/consent/check (capability network.consent.read). A service that cannot reach Network treats every purpose as off.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "id",
++ "subject",
++ "purpose",
++ "on",
++ "kinds",
++ "client",
++ "options",
++ "text_version",
++ "source",
++ "granted_at",
++ "revoked_at",
++ "expires_at"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^cns_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "The choice's own id (cns_<ULID>). A choice changed later (other kinds, another licence) is a new record; the old one is revoked."
++ },
++ "subject": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "Whose choice it is. Only that person (or an account merge or deletion) changes it."
++ },
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ],
++ "description": "What turning it on allows. ai.train: OpenVibe trains or fine-tunes models on the person's content. data.public: the person's content goes into OpenVibe's open dataset under the licence in options. face.recognize: the person's face is recognised (the features in options; OpenVibe.Vision keeps the encrypted templates). ai.looks: AI text about the person may describe how they look (it lifts the no-looks rule for that person only, never for anyone else in frame). app.data: one named app (client) may use the person's content for the purposes in options."
++ },
++ "on": {
++ "type": "boolean",
++ "description": "Whether the purpose is allowed now: true while the record is active (revoked_at null and expires_at not passed). A service never decides from this field alone; it asks the check."
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ },
++ "description": "Which of the person's content it covers. Empty means every kind the purpose applies to. face.recognize and ai.looks take no kinds (they are about the person, not a piece of content)."
++ },
++ "client": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$",
++ "description": "The app the choice is for: null means OpenVibe itself; otherwise the OAuth client id of an app the person granted (required for app.data, and only there)."
++ },
++ "options": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "licence": {
++ "enum": [
++ "cc-by-4.0",
++ "cc0-1.0"
++ ],
++ "description": "data.public only: the licence the person's content is published under."
++ },
++ "features": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ]
++ },
++ "description": "face.recognize only: which recognition the person allows (OpenVibe.Vision's features). Empty means none yet."
++ },
++ "purposes": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks"
++ ]
++ },
++ "description": "app.data only: what the app may do with the person's content, as the consent screen showed it."
++ }
++ },
++ "description": "What the purpose needs beyond on and kinds. An empty object for ai.train and ai.looks."
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$",
++ "description": "The exact wording the person saw when choosing (YYYY-MM-DD.n). A new wording never turns an existing choice on; it may only ask again."
++ },
++ "source": {
++ "enum": [
++ "account",
++ "oauth",
++ "api",
++ "import:vision"
++ ],
++ "description": "Where the choice was made: the account page, an app's consent screen, the person's own API call, or OpenVibe.Vision's older face consents moved into Network."
++ },
++ "granted_at": {
++ "type": "string",
++ "format": "date-time",
++ "description": "When the person turned it on."
++ },
++ "revoked_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time",
++ "description": "When it was turned off (by the person, by revoking the app, by a merge or by deleting the account), or null while it holds. Use stops on the next check; a model already trained keeps what it learned, and the next dataset release leaves the person's content out."
++ },
++ "expires_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time",
++ "description": "When the choice ends by itself (a time-limited grant, or the end of a face purpose), or null for no end."
++ }
++ }
++ }
++ },
++ "network.consent-choice": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/consent-choice.v1.json",
++ "title": "NetworkConsentChoice",
++ "description": "network.consent-choice@1 (L24): the body of PUT /api/v1/me/consent/:purpose on OpenVibe.Network — the signed-in person turns a purpose on or off. Turning on records the wording they saw (text_version, which must be the current one) and, for the adults-only purposes, that they confirmed they are 18 or older. Turning off revokes the active choice. An app's choice (app.data) is made on its consent screen, not here.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "on"
++ ],
++ "properties": {
++ "on": {
++ "type": "boolean"
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ }
++ },
++ "options": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "licence": {
++ "enum": [
++ "cc-by-4.0",
++ "cc0-1.0"
++ ]
++ },
++ "features": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ]
++ }
++ }
++ }
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$",
++ "description": "The wording the page showed. Required to turn on; a stale one is refused (consent.stale_text) so the page shows the new words first."
++ },
++ "adult": {
++ "type": "boolean",
++ "description": "The person confirmed they are 18 or older. Required (true) to turn on face.recognize, ai.looks, ai.train or data.public."
++ }
++ }
++ }
++ },
++ "network.me-consent-result": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/me-consent-result.v1.json",
++ "title": "NetworkMeConsentResult",
++ "description": "network.me-consent-result@1 (L24): \"Your data choices\" for the signed-in person. GET /api/v1/me/consent (and the answer to PUT /api/v1/me/consent/:purpose and DELETE /api/v1/me/consent/:purpose/:client) on OpenVibe.Network. Every purpose is listed with the words the account page shows, whether the person has turned it on, and the history of their changes. Off is the default for every purpose.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "purposes",
++ "consents",
++ "history"
++ ],
++ "properties": {
++ "purposes": {
++ "type": "array",
++ "maxItems": 16,
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "id",
++ "title",
++ "allows",
++ "off",
++ "cannot_undo",
++ "adults_only",
++ "kinds",
++ "text_version"
++ ],
++ "properties": {
++ "id": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ]
++ },
++ "title": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 80
++ },
++ "allows": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 300,
++ "description": "What turning it on allows, in one plain line."
++ },
++ "off": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 300,
++ "description": "What turning it off does."
++ },
++ "cannot_undo": {
++ "type": "string",
++ "maxLength": 300,
++ "description": "What turning it off cannot undo (empty when nothing)."
++ },
++ "adults_only": {
++ "type": "boolean",
++ "description": "Turning it on asks the person to confirm they are 18 or older."
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ },
++ "description": "The kinds of content the person may narrow it to (empty: the purpose takes none)."
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$"
++ }
++ }
++ }
++ },
++ "consents": {
++ "type": "array",
++ "maxItems": 200,
++ "items": {
++ "$ref": "consent.v1.json"
++ },
++ "description": "The person's active choices (network.consent@1), one per purpose and app."
++ },
++ "history": {
++ "type": "array",
++ "maxItems": 200,
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "consent_id",
++ "purpose",
++ "action",
++ "at",
++ "by",
++ "text_version"
++ ],
++ "properties": {
++ "consent_id": {
++ "type": "string",
++ "pattern": "^cns_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ]
++ },
++ "client": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$"
++ },
++ "action": {
++ "enum": [
++ "granted",
++ "revoked",
++ "expired"
++ ]
++ },
++ "at": {
++ "type": "string",
++ "format": "date-time"
++ },
++ "by": {
++ "enum": [
++ "person",
++ "app_revoked",
++ "merge",
++ "deletion",
++ "import"
++ ],
++ "description": "Who made the change: the person, the app being revoked, an account merge, an account deletion, or the move of an older record."
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$"
++ }
++ }
++ },
++ "description": "The newest changes first."
++ }
++ }
++ }
++ },
++ "network.consent-check-request": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/consent-check-request.v1.json",
++ "title": "NetworkConsentCheckRequest",
++ "description": "network.consent-check-request@1 (L24): may this purpose be used for these people? POST /internal/consent/check on OpenVibe.Network with a service token holding network.consent.read. One purpose per call, up to 500 subjects (a dataset build or a chat log checks its authors in batches).",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "purpose",
++ "subjects"
++ ],
++ "properties": {
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ],
++ "description": "The purpose to check (network.consent@1)."
++ },
++ "kind": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ],
++ "description": "The kind of content the use is about. A choice limited to other kinds answers false."
++ },
++ "client": {
++ "type": "string",
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$",
++ "description": "app.data only: the app asking. Required for app.data."
++ },
++ "feature": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ],
++ "description": "face.recognize only: the recognition about to run."
++ },
++ "subjects": {
++ "type": "array",
++ "minItems": 1,
++ "maxItems": 500,
++ "uniqueItems": true,
++ "items": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "description": "The people the use would be about."
++ }
++ }
++ }
++ },
++ "network.consent-check-result": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/network/consent-check-result.v1.json",
++ "title": "NetworkConsentCheckResult",
++ "description": "network.consent-check-result@1 (L24): the answer to network.consent-check-request@1. Every subject asked about is in allowed: true only for an active choice that covers the purpose, the kind, the app and the feature asked about. An unknown or deleted subject is false, the same as a person who never chose (the answer never says whether an account exists). A service caches an answer for at most 60 s and drops it on network.consent.changed; when Network cannot answer, every subject is false.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "purpose",
++ "allowed",
++ "checked_at"
++ ],
++ "properties": {
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ]
++ },
++ "kind": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ },
++ "client": {
++ "type": "string",
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$"
++ },
++ "feature": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ]
++ },
++ "allowed": {
++ "type": "object",
++ "maxProperties": 500,
++ "propertyNames": {
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "additionalProperties": {
++ "type": "boolean"
++ },
++ "description": "Each subject asked about, and whether the use is allowed for them."
++ },
++ "licence": {
++ "type": "object",
++ "maxProperties": 500,
++ "propertyNames": {
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "additionalProperties": {
++ "enum": [
++ "cc-by-4.0",
++ "cc0-1.0"
++ ]
++ },
++ "description": "data.public only: the licence each allowed subject chose."
++ },
++ "checked_at": {
++ "type": "string",
++ "format": "date-time"
++ }
++ }
++ }
++ },
++ "network.consent.changed": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/network.consent.changed.v1.json",
++ "title": "NetworkConsentChangedPayload",
++ "description": "network.consent.changed v1 (OpenVibe.Network, L24): a person turned a purpose on or off, an app's grant was revoked, or a choice expired. A service that caches consent answers drops that subject's answers for the purpose at once; one that is running a use for the subject (a dataset build, a recognition, an AI text) checks again before it goes on. The payload names the change and never the content it covers.",
++ "type": "object",
++ "required": [
++ "consent_id",
++ "subject",
++ "purpose",
++ "client",
++ "on",
++ "kinds",
++ "text_version",
++ "changed_at"
++ ],
++ "additionalProperties": false,
++ "properties": {
++ "consent_id": {
++ "type": "string",
++ "pattern": "^cns_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "subject": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ]
++ },
++ "client": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$"
++ },
++ "on": {
++ "type": "boolean",
++ "description": "Whether the purpose is allowed after the change."
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ }
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$"
++ },
++ "changed_at": {
++ "type": "string",
++ "format": "date-time"
++ }
++ }
++ }
++ },
"today.event.scheduled": {
"version": "1.0.0",
"owner": "today",
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex cc26b7e3..b3f1da3c 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Actor API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex c4cf3b0e..6a6639fe 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.AI API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/bench.json b/generated/openapi/bench.json
iindex d10b1f86..a76c41db 100644
---- a/generated/openapi/bench.json
++++ b/generated/openapi/bench.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bench API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex 5d70f8d6..23ced1c0 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Billing API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex b4772739..33ee8116 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Blog API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex 561e84ab..b60148cf 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bot API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex 5db66132..5a9c6373 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Chat API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/codes.json b/generated/openapi/codes.json
iindex c5ec0bf7..1b7e7b96 100644
---- a/generated/openapi/codes.json
++++ b/generated/openapi/codes.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Codes API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex 5643f131..456e6d28 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Community API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex 84464ce4..087e6720 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Coupons API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex bea3ad3b..5a442ecb 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Deals API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/domains.json b/generated/openapi/domains.json
iindex 1366b566..02796343 100644
---- a/generated/openapi/domains.json
++++ b/generated/openapi/domains.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Domains API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex d4477ad7..4ed41b85 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Events API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex 144692f9..e45747d9 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Food API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex 7915b26d..49974238 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Games API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex 53c24b79..a637ee5d 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Host API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/index.json b/generated/openapi/index.json
iindex a569a810..5885f57e 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -145,8 +145,8 @@
"service": "network",
"name": "OpenVibe.Network",
"origin": "https://openvibe.network",
-- "operations": 43,
-- "capabilities": 30
++ "operations": 47,
++ "capabilities": 32
},
{
"service": "news",
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex 39710d3c..1d831b95 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Inventory API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex f43cf5ed..f3d696cf 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Live API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/media-hub.json b/generated/openapi/media-hub.json
iindex 090b19af..90edb1f3 100644
---- a/generated/openapi/media-hub.json
++++ b/generated/openapi/media-hub.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.MediaHub API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex d610295a..81656f0f 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Media API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex d2879203..eb6c831b 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Network API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
@@@ -254,6 +254,352 @@
}
}
},
++ "/api/v1/me/consent": {
++ "get": {
++ "operationId": "get_api_v1_me_consent",
++ "summary": "\"Your data choices\" for the signed-in person (L24): GET /api/v1/me/consent lists every purpose with its wording, the person's choices and their history; PUT /api/v1/me/consent/:purpose turns one on or",
++ "description": "**network.consent.manage** (public): \"Your data choices\" for the signed-in person (L24): GET /api/v1/me/consent lists every purpose with its wording, the person's choices and their history; PUT /api/v1/me/consent/:purpose turns one on or off (network.consent-choice@1); DELETE /api/v1/me/consent/:purpose/:client revokes one app. Off is the default for every purpose. Only the person's own session or token reaches it.",
++ "tags": [
++ "network.consent"
++ ],
++ "x-openvibe-capabilities": [
++ "network.consent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "network.consent.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/network.consent-choice.v1"
++ },
++ "parameters": [
++ {
++ "name": "on",
++ "in": "query",
++ "required": true,
++ "schema": {
++ "type": "boolean"
++ }
++ },
++ {
++ "name": "kinds",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ }
++ }
++ },
++ {
++ "name": "options",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "licence": {
++ "enum": [
++ "cc-by-4.0",
++ "cc0-1.0"
++ ]
++ },
++ "features": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ]
++ }
++ }
++ }
++ }
++ },
++ {
++ "name": "text_version",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$",
++ "description": "The wording the page showed. Required to turn on; a stale one is refused (consent.stale_text) so the page shows the new words first."
++ },
++ "description": "The wording the page showed. Required to turn on; a stale one is refused (consent.stale_text) so the page shows the new words first."
++ },
++ {
++ "name": "adult",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "boolean",
++ "description": "The person confirmed they are 18 or older. Required (true) to turn on face.recognize, ai.looks, ai.train or data.public."
++ },
++ "description": "The person confirmed they are 18 or older. Required (true) to turn on face.recognize, ai.looks, ai.train or data.public."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/network.me-consent-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/me/consent/{purpose}": {
++ "put": {
++ "operationId": "put_api_v1_me_consent_purpose",
++ "summary": "\"Your data choices\" for the signed-in person (L24): GET /api/v1/me/consent lists every purpose with its wording, the person's choices and their history; PUT /api/v1/me/consent/:purpose turns one on or",
++ "description": "**network.consent.manage** (public): \"Your data choices\" for the signed-in person (L24): GET /api/v1/me/consent lists every purpose with its wording, the person's choices and their history; PUT /api/v1/me/consent/:purpose turns one on or off (network.consent-choice@1); DELETE /api/v1/me/consent/:purpose/:client revokes one app. Off is the default for every purpose. Only the person's own session or token reaches it.",
++ "tags": [
++ "network.consent"
++ ],
++ "x-openvibe-capabilities": [
++ "network.consent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "network.consent.manage"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/network.consent-choice.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "purpose",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/network.me-consent-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/me/consent/{purpose}/{client}": {
++ "delete": {
++ "operationId": "delete_api_v1_me_consent_purpose_client",
++ "summary": "\"Your data choices\" for the signed-in person (L24): GET /api/v1/me/consent lists every purpose with its wording, the person's choices and their history; PUT /api/v1/me/consent/:purpose turns one on or",
++ "description": "**network.consent.manage** (public): \"Your data choices\" for the signed-in person (L24): GET /api/v1/me/consent lists every purpose with its wording, the person's choices and their history; PUT /api/v1/me/consent/:purpose turns one on or off (network.consent-choice@1); DELETE /api/v1/me/consent/:purpose/:client revokes one app. Off is the default for every purpose. Only the person's own session or token reaches it.",
++ "tags": [
++ "network.consent"
++ ],
++ "x-openvibe-capabilities": [
++ "network.consent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "network.consent.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/network.consent-choice.v1"
++ },
++ "parameters": [
++ {
++ "name": "purpose",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "client",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "on",
++ "in": "query",
++ "required": true,
++ "schema": {
++ "type": "boolean"
++ }
++ },
++ {
++ "name": "kinds",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ }
++ }
++ },
++ {
++ "name": "options",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "licence": {
++ "enum": [
++ "cc-by-4.0",
++ "cc0-1.0"
++ ]
++ },
++ "features": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ]
++ }
++ }
++ }
++ }
++ },
++ {
++ "name": "text_version",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$",
++ "description": "The wording the page showed. Required to turn on; a stale one is refused (consent.stale_text) so the page shows the new words first."
++ },
++ "description": "The wording the page showed. Required to turn on; a stale one is refused (consent.stale_text) so the page shows the new words first."
++ },
++ {
++ "name": "adult",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "boolean",
++ "description": "The person confirmed they are 18 or older. Required (true) to turn on face.recognize, ai.looks, ai.train or data.public."
++ },
++ "description": "The person confirmed they are 18 or older. Required (true) to turn on face.recognize, ai.looks, ai.train or data.public."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/network.me-consent-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
"/api/v1/node/self/capabilities": {
"put": {
"operationId": "put_api_v1_node_self_capabilities",
@@@ -994,8 +1340,64 @@
}
}
},
-- "/internal/follows/{type}/{target}": {
-- "delete": {
++ "/internal/consent/check": {
++ "post": {
++ "operationId": "post_internal_consent_check",
++ "summary": "Ask whether a purpose (ai.train, data.public, face.recognize, ai.looks, app.data) may be used for up to 500 people (L24, data and AI by consent).",
++ "description": "**network.consent.read** (first-party): Ask whether a purpose (ai.train, data.public, face.recognize, ai.looks, app.data) may be used for up to 500 people (L24, data and AI by consent). A service asks before every use of a person's content or likeness for one of those purposes; an answer is cached at most 60 s and dropped on network.consent.changed, and a service that cannot reach Network treats every purpose as off.",
++ "tags": [
++ "network.consent"
++ ],
++ "x-openvibe-capabilities": [
++ "network.consent.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "identity-read",
++ "security": [
++ {
++ "openvibeToken": [
++ "network.consent.read"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/network.consent-check-request.v1"
++ }
++ }
++ }
++ },
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/network.consent-check-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/internal/follows/{type}/{target}": {
++ "delete": {
"operationId": "delete_internal_follows_type_target",
"summary": "Follow or unfollow on a person's behalf, as the first-party product where they pressed the button (Live's follow buttons, ADR-030 step 4).",
"description": "**network.follows.write** (first-party): Follow or unfollow on a person's behalf, as the first-party product where they pressed the button (Live's follow buttons, ADR-030 step 4). The follower is named in the request; Network keeps the graph and emits the events. Never grantable to apps.",
@@@ -3560,6 +3962,355 @@
}
}
},
++ "network.consent-check-request.v1": {
++ "title": "NetworkConsentCheckRequest",
++ "description": "network.consent-check-request@1 (L24): may this purpose be used for these people? POST /internal/consent/check on OpenVibe.Network with a service token holding network.consent.read. One purpose per call, up to 500 subjects (a dataset build or a chat log checks its authors in batches).",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "purpose",
++ "subjects"
++ ],
++ "properties": {
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ],
++ "description": "The purpose to check (network.consent@1)."
++ },
++ "kind": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ],
++ "description": "The kind of content the use is about. A choice limited to other kinds answers false."
++ },
++ "client": {
++ "type": "string",
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$",
++ "description": "app.data only: the app asking. Required for app.data."
++ },
++ "feature": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ],
++ "description": "face.recognize only: the recognition about to run."
++ },
++ "subjects": {
++ "type": "array",
++ "minItems": 1,
++ "maxItems": 500,
++ "uniqueItems": true,
++ "items": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "description": "The people the use would be about."
++ }
++ }
++ },
++ "network.consent-check-result.v1": {
++ "title": "NetworkConsentCheckResult",
++ "description": "network.consent-check-result@1 (L24): the answer to network.consent-check-request@1. Every subject asked about is in allowed: true only for an active choice that covers the purpose, the kind, the app and the feature asked about. An unknown or deleted subject is false, the same as a person who never chose (the answer never says whether an account exists). A service caches an answer for at most 60 s and drops it on network.consent.changed; when Network cannot answer, every subject is false.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "purpose",
++ "allowed",
++ "checked_at"
++ ],
++ "properties": {
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ]
++ },
++ "kind": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ },
++ "client": {
++ "type": "string",
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$"
++ },
++ "feature": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ]
++ },
++ "allowed": {
++ "type": "object",
++ "maxProperties": 500,
++ "propertyNames": {
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "additionalProperties": {
++ "type": "boolean"
++ },
++ "description": "Each subject asked about, and whether the use is allowed for them."
++ },
++ "licence": {
++ "type": "object",
++ "maxProperties": 500,
++ "propertyNames": {
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "additionalProperties": {
++ "enum": [
++ "cc-by-4.0",
++ "cc0-1.0"
++ ]
++ },
++ "description": "data.public only: the licence each allowed subject chose."
++ },
++ "checked_at": {
++ "type": "string",
++ "format": "date-time"
++ }
++ }
++ },
++ "network.consent-choice.v1": {
++ "title": "NetworkConsentChoice",
++ "description": "network.consent-choice@1 (L24): the body of PUT /api/v1/me/consent/:purpose on OpenVibe.Network — the signed-in person turns a purpose on or off. Turning on records the wording they saw (text_version, which must be the current one) and, for the adults-only purposes, that they confirmed they are 18 or older. Turning off revokes the active choice. An app's choice (app.data) is made on its consent screen, not here.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "on"
++ ],
++ "properties": {
++ "on": {
++ "type": "boolean"
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ }
++ },
++ "options": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "licence": {
++ "enum": [
++ "cc-by-4.0",
++ "cc0-1.0"
++ ]
++ },
++ "features": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ]
++ }
++ }
++ }
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$",
++ "description": "The wording the page showed. Required to turn on; a stale one is refused (consent.stale_text) so the page shows the new words first."
++ },
++ "adult": {
++ "type": "boolean",
++ "description": "The person confirmed they are 18 or older. Required (true) to turn on face.recognize, ai.looks, ai.train or data.public."
++ }
++ }
++ },
++ "network.consent.v1": {
++ "title": "NetworkConsent",
++ "description": "network.consent@1 (L24, data and AI by consent, 2026-10-31): one person's choice for one purpose. Nothing a person makes is off-limits to AI or data use by design; each use is off until that person turns it on, here. The record is the proof of what was allowed, by whom, under which wording and when: a choice is turned off by setting revoked_at, never by deleting the row. Stored by OpenVibe.Network (consents, with every change in consent_events), read by a person at GET /api/v1/me/consent and by services through POST /internal/consent/check (capability network.consent.read). A service that cannot reach Network treats every purpose as off.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "id",
++ "subject",
++ "purpose",
++ "on",
++ "kinds",
++ "client",
++ "options",
++ "text_version",
++ "source",
++ "granted_at",
++ "revoked_at",
++ "expires_at"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^cns_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "The choice's own id (cns_<ULID>). A choice changed later (other kinds, another licence) is a new record; the old one is revoked."
++ },
++ "subject": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
++ "description": "Whose choice it is. Only that person (or an account merge or deletion) changes it."
++ },
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ],
++ "description": "What turning it on allows. ai.train: OpenVibe trains or fine-tunes models on the person's content. data.public: the person's content goes into OpenVibe's open dataset under the licence in options. face.recognize: the person's face is recognised (the features in options; OpenVibe.Vision keeps the encrypted templates). ai.looks: AI text about the person may describe how they look (it lifts the no-looks rule for that person only, never for anyone else in frame). app.data: one named app (client) may use the person's content for the purposes in options."
++ },
++ "on": {
++ "type": "boolean",
++ "description": "Whether the purpose is allowed now: true while the record is active (revoked_at null and expires_at not passed). A service never decides from this field alone; it asks the check."
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ },
++ "description": "Which of the person's content it covers. Empty means every kind the purpose applies to. face.recognize and ai.looks take no kinds (they are about the person, not a piece of content)."
++ },
++ "client": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$",
++ "description": "The app the choice is for: null means OpenVibe itself; otherwise the OAuth client id of an app the person granted (required for app.data, and only there)."
++ },
++ "options": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "licence": {
++ "enum": [
++ "cc-by-4.0",
++ "cc0-1.0"
++ ],
++ "description": "data.public only: the licence the person's content is published under."
++ },
++ "features": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "verify",
++ "find",
++ "cast",
++ "library"
++ ]
++ },
++ "description": "face.recognize only: which recognition the person allows (OpenVibe.Vision's features). Empty means none yet."
++ },
++ "purposes": {
++ "type": "array",
++ "maxItems": 4,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks"
++ ]
++ },
++ "description": "app.data only: what the app may do with the person's content, as the consent screen showed it."
++ }
++ },
++ "description": "What the purpose needs beyond on and kinds. An empty object for ai.train and ai.looks."
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$",
++ "description": "The exact wording the person saw when choosing (YYYY-MM-DD.n). A new wording never turns an existing choice on; it may only ask again."
++ },
++ "source": {
++ "enum": [
++ "account",
++ "oauth",
++ "api",
++ "import:vision"
++ ],
++ "description": "Where the choice was made: the account page, an app's consent screen, the person's own API call, or OpenVibe.Vision's older face consents moved into Network."
++ },
++ "granted_at": {
++ "type": "string",
++ "format": "date-time",
++ "description": "When the person turned it on."
++ },
++ "revoked_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time",
++ "description": "When it was turned off (by the person, by revoking the app, by a merge or by deleting the account), or null while it holds. Use stops on the next check; a model already trained keeps what it learned, and the next dataset release leaves the person's content out."
++ },
++ "expires_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time",
++ "description": "When the choice ends by itself (a time-limited grant, or the end of a face purpose), or null for no end."
++ }
++ }
++ },
"network.creator-analytics-result.v1": {
"title": "NetworkCreatorAnalyticsResult",
"description": "network.creator-analytics-result@1 (roadmap WS-E task 6): GET /api/v1/creators/:creator/analytics?days=1-365 on OpenVibe.Network. A creator's streaming analytics, built from live.stream.ended events: per UTC day and per stream, counts only (never who watched or chatted, no IP address or viewer id). Everyone sees streams, minutes and peak viewers; the creator (signed in) and services holding network.analytics.creator.read also get average viewers, chatters, messages and watch minutes (`full: true`).",
@@@ -3976,6 +4727,168 @@
}
}
},
++ "network.me-consent-result.v1": {
++ "title": "NetworkMeConsentResult",
++ "description": "network.me-consent-result@1 (L24): \"Your data choices\" for the signed-in person. GET /api/v1/me/consent (and the answer to PUT /api/v1/me/consent/:purpose and DELETE /api/v1/me/consent/:purpose/:client) on OpenVibe.Network. Every purpose is listed with the words the account page shows, whether the person has turned it on, and the history of their changes. Off is the default for every purpose.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "purposes",
++ "consents",
++ "history"
++ ],
++ "properties": {
++ "purposes": {
++ "type": "array",
++ "maxItems": 16,
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "id",
++ "title",
++ "allows",
++ "off",
++ "cannot_undo",
++ "adults_only",
++ "kinds",
++ "text_version"
++ ],
++ "properties": {
++ "id": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ]
++ },
++ "title": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 80
++ },
++ "allows": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 300,
++ "description": "What turning it on allows, in one plain line."
++ },
++ "off": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 300,
++ "description": "What turning it off does."
++ },
++ "cannot_undo": {
++ "type": "string",
++ "maxLength": 300,
++ "description": "What turning it off cannot undo (empty when nothing)."
++ },
++ "adults_only": {
++ "type": "boolean",
++ "description": "Turning it on asks the person to confirm they are 18 or older."
++ },
++ "kinds": {
++ "type": "array",
++ "maxItems": 8,
++ "uniqueItems": true,
++ "items": {
++ "enum": [
++ "streams",
++ "vods",
++ "clips",
++ "voice",
++ "chat",
++ "posts",
++ "pictures",
++ "code"
++ ]
++ },
++ "description": "The kinds of content the person may narrow it to (empty: the purpose takes none)."
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$"
++ }
++ }
++ }
++ },
++ "consents": {
++ "type": "array",
++ "maxItems": 200,
++ "items": {
++ "$ref": "#/components/schemas/network.consent.v1"
++ },
++ "description": "The person's active choices (network.consent@1), one per purpose and app."
++ },
++ "history": {
++ "type": "array",
++ "maxItems": 200,
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "consent_id",
++ "purpose",
++ "action",
++ "at",
++ "by",
++ "text_version"
++ ],
++ "properties": {
++ "consent_id": {
++ "type": "string",
++ "pattern": "^cns_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "purpose": {
++ "enum": [
++ "ai.train",
++ "data.public",
++ "face.recognize",
++ "ai.looks",
++ "app.data"
++ ]
++ },
++ "client": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,79}$"
++ },
++ "action": {
++ "enum": [
++ "granted",
++ "revoked",
++ "expired"
++ ]
++ },
++ "at": {
++ "type": "string",
++ "format": "date-time"
++ },
++ "by": {
++ "enum": [
++ "person",
++ "app_revoked",
++ "merge",
++ "deletion",
++ "import"
++ ],
++ "description": "Who made the change: the person, the app being revoked, an account merge, an account deletion, or the move of an older record."
++ },
++ "text_version": {
++ "type": "string",
++ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]{1,3}$"
++ }
++ }
++ },
++ "description": "The newest changes first."
++ }
++ }
++ },
"network.mod-install-request.v1": {
"title": "NetworkModInstallRequest",
"description": "network.mod-install-request@1 (OpenVibe.Network; roadmap WS-M task 3, ADR-013): a runtime (OpenVibe.Games) registers an install's mod principal, POST /internal/mods with capability mods.grant.manage. The manifest (mods.mod-manifest@1) names the requested capabilities; `approve` is the subset staff approved at install, and the rest stays pending. The runtime that registers a mod is its owner: only it (or Network staff) changes its grants. Registering the same mod again answers the existing principal.",
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex 9fec008d..5b4e569f 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.News API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex 16229d55..dbbc9865 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenRestream API",
-- "version": "0.254.0",
-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/play.json b/generated/openapi/play.json
iindex 83ef360c..3d5ab4b9 100644
---- a/generated/openapi/play.json
++++ b/generated/openapi/play.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Play API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/quest.json b/generated/openapi/quest.json
iindex f8a3fd1b..8fb7f63e 100644
---- a/generated/openapi/quest.json
++++ b/generated/openapi/quest.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Quest API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex 41344e1d..cf422bda 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Reviews API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex fe290815..9615dde1 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Run API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex 73f7fb22..c7dc876b 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Search API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex 51acbf91..3025b3fe 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Services API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex fd499798..d7c96bfb 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Sources API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/space.json b/generated/openapi/space.json
iindex dac11480..178ce027 100644
---- a/generated/openapi/space.json
++++ b/generated/openapi/space.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Space API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex 74c1a737..9b8250cb 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tips API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex 47acc576..5abe2ddd 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tools API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex 0901f6f9..56ad9f37 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Trade API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex 802e72d8..d1c62888 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.VIP API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/vision.json b/generated/openapi/vision.json
iindex da5a6965..2476339c 100644
---- a/generated/openapi/vision.json
++++ b/generated/openapi/vision.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Vision API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex 96bf4458..a1cbefbe 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Watch API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex fe9357a1..5e5ec270 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Wiki API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/work.json b/generated/openapi/work.json
iindex 3ef63d7e..899a4f67 100644
---- a/generated/openapi/work.json
++++ b/generated/openapi/work.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Work API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/zone.json b/generated/openapi/zone.json
iindex 2b6794b3..122a3f53 100644
---- a/generated/openapi/zone.json
++++ b/generated/openapi/zone.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Zone API",
-- "version": "0.254.0",
-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.254.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.255.0",
++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.255.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex 6b12a219..2213c846 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -263422,6 +263422,11055 @@ export interface NetworkDockResult {
sources_partial: boolean;
}
++/** [email protected] (owner: network) */
++/**
++ * network.consent@1 (L24, data and AI by consent, 2026-10-31): one person's choice for one purpose. Nothing a person makes is off-limits to AI or data use by design; each use is off until that person turns it on, here. The record is the proof of what was allowed, by whom, under which wording and when: a choice is turned off by setting revoked_at, never by deleting the row. Stored by OpenVibe.Network (consents, with every change in consent_events), read by a person at GET /api/v1/me/consent and by services through POST /internal/consent/check (capability network.consent.read). A service that cannot reach Network treats every purpose as off.
++ */
++export interface NetworkConsent {
++ /**
++ * The choice's own id (cns_<ULID>). A choice changed later (other kinds, another licence) is a new record; the old one is revoked.
++ */
++ id: string;
++ /**
++ * Whose choice it is. Only that person (or an account merge or deletion) changes it.
++ */
++ subject: string;
++ /**
++ * What turning it on allows. ai.train: OpenVibe trains or fine-tunes models on the person's content. data.public: the person's content goes into OpenVibe's open dataset under the licence in options. face.recognize: the person's face is recognised (the features in options; OpenVibe.Vision keeps the encrypted templates). ai.looks: AI text about the person may describe how they look (it lifts the no-looks rule for that person only, never for anyone else in frame). app.data: one named app (client) may use the person's content for the purposes in options.
++ */
++ purpose: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ /**
++ * Whether the purpose is allowed now: true while the record is active (revoked_at null and expires_at not passed). A service never decides from this field alone; it asks the check.
++ */
++ on: boolean;
++ /**
++ * Which of the person's content it covers. Empty means every kind the purpose applies to. face.recognize and ai.looks take no kinds (they are about the person, not a piece of content).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ /**
++ * The app the choice is for: null means OpenVibe itself; otherwise the OAuth client id of an app the person granted (required for app.data, and only there).
++ */
++ client: string | null;
++ /**
++ * What the purpose needs beyond on and kinds. An empty object for ai.train and ai.looks.
++ */
++ options: {
++ /**
++ * data.public only: the licence the person's content is published under.
++ */
++ licence?: "cc-by-4.0" | "cc0-1.0";
++ /**
++ * face.recognize only: which recognition the person allows (OpenVibe.Vision's features). Empty means none yet.
++ *
++ * @maxItems 4
++ */
++ features?:
++ | []
++ | ["verify" | "find" | "cast" | "library"]
++ | ["verify" | "find" | "cast" | "library", "verify" | "find" | "cast" | "library"]
++ | [
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library"
++ ]
++ | [
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library"
++ ];
++ /**
++ * app.data only: what the app may do with the person's content, as the consent screen showed it.
++ *
++ * @maxItems 4
++ */
++ purposes?:
++ | []
++ | ["ai.train" | "data.public" | "face.recognize" | "ai.looks"]
++ | [
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks",
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks"
++ ]
++ | [
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks",
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks",
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks"
++ ]
++ | [
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks",
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks",
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks",
++ "ai.train" | "data.public" | "face.recognize" | "ai.looks"
++ ];
++ };
++ /**
++ * The exact wording the person saw when choosing (YYYY-MM-DD.n). A new wording never turns an existing choice on; it may only ask again.
++ */
++ text_version: string;
++ /**
++ * Where the choice was made: the account page, an app's consent screen, the person's own API call, or OpenVibe.Vision's older face consents moved into Network.
++ */
++ source: "account" | "oauth" | "api" | "import:vision";
++ /**
++ * When the person turned it on.
++ */
++ granted_at: string;
++ /**
++ * When it was turned off (by the person, by revoking the app, by a merge or by deleting the account), or null while it holds. Use stops on the next check; a model already trained keeps what it learned, and the next dataset release leaves the person's content out.
++ */
++ revoked_at: string | null;
++ /**
++ * When the choice ends by itself (a time-limited grant, or the end of a face purpose), or null for no end.
++ */
++ expires_at: string | null;
++}
++
++/** [email protected] (owner: network) */
++/**
++ * network.consent-choice@1 (L24): the body of PUT /api/v1/me/consent/:purpose on OpenVibe.Network — the signed-in person turns a purpose on or off. Turning on records the wording they saw (text_version, which must be the current one) and, for the adults-only purposes, that they confirmed they are 18 or older. Turning off revokes the active choice. An app's choice (app.data) is made on its consent screen, not here.
++ */
++export interface NetworkConsentChoice {
++ on: boolean;
++ /**
++ * @maxItems 8
++ */
++ kinds?:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ options?: {
++ licence?: "cc-by-4.0" | "cc0-1.0";
++ /**
++ * @maxItems 4
++ */
++ features?:
++ | []
++ | ["verify" | "find" | "cast" | "library"]
++ | ["verify" | "find" | "cast" | "library", "verify" | "find" | "cast" | "library"]
++ | [
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library"
++ ]
++ | [
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library",
++ "verify" | "find" | "cast" | "library"
++ ];
++ };
++ /**
++ * The wording the page showed. Required to turn on; a stale one is refused (consent.stale_text) so the page shows the new words first.
++ */
++ text_version?: string;
++ /**
++ * The person confirmed they are 18 or older. Required (true) to turn on face.recognize, ai.looks, ai.train or data.public.
++ */
++ adult?: boolean;
++}
++
++/** [email protected] (owner: network) */
++/**
++ * network.me-consent-result@1 (L24): "Your data choices" for the signed-in person. GET /api/v1/me/consent (and the answer to PUT /api/v1/me/consent/:purpose and DELETE /api/v1/me/consent/:purpose/:client) on OpenVibe.Network. Every purpose is listed with the words the account page shows, whether the person has turned it on, and the history of their changes. Off is the default for every purpose.
++ */
++export interface NetworkMeConsentResult {
++ /**
++ * @maxItems 16
++ */
++ purposes:
++ | []
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ]
++ | [
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ },
++ {
++ id: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ title: string;
++ /**
++ * What turning it on allows, in one plain line.
++ */
++ allows: string;
++ /**
++ * What turning it off does.
++ */
++ off: string;
++ /**
++ * What turning it off cannot undo (empty when nothing).
++ */
++ cannot_undo: string;
++ /**
++ * Turning it on asks the person to confirm they are 18 or older.
++ */
++ adults_only: boolean;
++ /**
++ * The kinds of content the person may narrow it to (empty: the purpose takes none).
++ *
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ }
++ ];
++ /**
++ * The person's active choices (network.consent@1), one per purpose and app.
++ *
++ * @maxItems 200
++ */
++ consents: NetworkConsent[];
++ /**
++ * The newest changes first.
++ *
++ * @maxItems 200
++ */
++ history: {
++ consent_id: string;
++ purpose: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ client?: string | null;
++ action: "granted" | "revoked" | "expired";
++ at: string;
++ /**
++ * Who made the change: the person, the app being revoked, an account merge, an account deletion, or the move of an older record.
++ */
++ by: "person" | "app_revoked" | "merge" | "deletion" | "import";
++ text_version: string;
++ }[];
++}
++
++/** [email protected] (owner: network) */
++/**
++ * network.consent-check-request@1 (L24): may this purpose be used for these people? POST /internal/consent/check on OpenVibe.Network with a service token holding network.consent.read. One purpose per call, up to 500 subjects (a dataset build or a chat log checks its authors in batches).
++ */
++export interface NetworkConsentCheckRequest {
++ /**
++ * The purpose to check (network.consent@1).
++ */
++ purpose: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ /**
++ * The kind of content the use is about. A choice limited to other kinds answers false.
++ */
++ kind?: "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code";
++ /**
++ * app.data only: the app asking. Required for app.data.
++ */
++ client?: string;
++ /**
++ * face.recognize only: the recognition about to run.
++ */
++ feature?: "verify" | "find" | "cast" | "library";
++ /**
++ * The people the use would be about.
++ *
++ * @minItems 1
++ * @maxItems 500
++ */
++ subjects: [string, ...string[]];
++}
++
++/** [email protected] (owner: network) */
++/**
++ * network.consent-check-result@1 (L24): the answer to network.consent-check-request@1. Every subject asked about is in allowed: true only for an active choice that covers the purpose, the kind, the app and the feature asked about. An unknown or deleted subject is false, the same as a person who never chose (the answer never says whether an account exists). A service caches an answer for at most 60 s and drops it on network.consent.changed; when Network cannot answer, every subject is false.
++ */
++export interface NetworkConsentCheckResult {
++ purpose: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ kind?: "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code";
++ client?: string;
++ feature?: "verify" | "find" | "cast" | "library";
++ /**
++ * Each subject asked about, and whether the use is allowed for them.
++ */
++ allowed: {
++ [k: string]: boolean | undefined;
++ };
++ /**
++ * data.public only: the licence each allowed subject chose.
++ */
++ licence?: {
++ [k: string]: ("cc-by-4.0" | "cc0-1.0") | undefined;
++ };
++ checked_at: string;
++}
++
++/** [email protected] (owner: network) */
++/**
++ * network.consent.changed v1 (OpenVibe.Network, L24): a person turned a purpose on or off, an app's grant was revoked, or a choice expired. A service that caches consent answers drops that subject's answers for the purpose at once; one that is running a use for the subject (a dataset build, a recognition, an AI text) checks again before it goes on. The payload names the change and never the content it covers.
++ */
++export interface NetworkConsentChangedPayload {
++ consent_id: string;
++ subject: string;
++ purpose: "ai.train" | "data.public" | "face.recognize" | "ai.looks" | "app.data";
++ client: string | null;
++ /**
++ * Whether the purpose is allowed after the change.
++ */
++ on: boolean;
++ /**
++ * @maxItems 8
++ */
++ kinds:
++ | []
++ | ["streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ]
++ | [
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code",
++ "streams" | "vods" | "clips" | "voice" | "chat" | "posts" | "pictures" | "code"
++ ];
++ text_version: string;
++ changed_at: string;
++}
++
/** [email protected] (owner: today) */
/**
* today.event.scheduled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). A person put a stream or an event on OpenVibe.Today's calendar (POST /api/v1/events or the schedule form). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).
ddiff --git a/lib/ids.js b/lib/ids.js
iindex d4200572..5756e04c 100644
---- a/lib/ids.js
++++ b/lib/ids.js
@@@ -6,7 +6,7 @@
const crypto = require('crypto');
const ALPHABET = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
--const PREFIX = { user: 'usr', guest: 'gst', app: 'app', mod: 'mod', agent: 'agt', node: 'nod', event: 'evt', media: 'med', project: 'prj', confirmation: 'cnf', job: 'job', task: 'tsk', watch: 'wch', wait: 'wai', observation: 'wco', check: 'ckr', subscription: 'sub', deploy: 'dpl', domain: 'dom', manifest: 'mfs', release: 'rel', site: 'sit', robot: 'rob', stream: 'std', webhook_delivery: 'whd' };
++const PREFIX = { user: 'usr', guest: 'gst', app: 'app', mod: 'mod', agent: 'agt', node: 'nod', event: 'evt', media: 'med', project: 'prj', confirmation: 'cnf', consent: 'cns', job: 'job', task: 'tsk', watch: 'wch', wait: 'wai', observation: 'wco', check: 'ckr', subscription: 'sub', deploy: 'dpl', domain: 'dom', manifest: 'mfs', release: 'rel', site: 'sit', robot: 'rob', stream: 'std', webhook_delivery: 'whd' };
const SLUG_TYPES = new Set(['service', 'system']);
const ULID_RE = /^[0-9A-HJKMNP-TV-Z]{26}$/;
const SLUG_RE = /^[a-z][a-z0-9-]{1,39}$/;
ddiff --git a/manifests/capabilities/network.consent.manage.json b/manifests/capabilities/network.consent.manage.json
nnew file mode 100644
iindex 00000000..b64bad19
---- /dev/null
++++ b/manifests/capabilities/network.consent.manage.json
@@@ -0,0 +1,26 @@
++{
++ "id": "network.consent.manage",
++ "version": "1.0",
++ "owner": "network",
++ "status": "active",
++ "visibility": "public",
++ "description": "\"Your data choices\" for the signed-in person (L24): GET /api/v1/me/consent lists every purpose with its wording, the person's choices and their history; PUT /api/v1/me/consent/:purpose turns one on or off (network.consent-choice@1); DELETE /api/v1/me/consent/:purpose/:client revokes one app. Off is the default for every purpose. Only the person's own session or token reaches it.",
++ "inputSchema": "network.consent-choice@1",
++ "outputSchema": "network.me-consent-result@1",
++ "permissions": [
++ "network:read",
++ "network:write"
++ ],
++ "resourceConstraints": [
++ "none"
++ ],
++ "quotaClass": "standard",
++ "events": [
++ "network.consent.changed"
++ ],
++ "implementedBy": [
++ "GET /api/v1/me/consent",
++ "PUT /api/v1/me/consent/:purpose",
++ "DELETE /api/v1/me/consent/:purpose/:client"
++ ]
++}
ddiff --git a/manifests/capabilities/network.consent.read.json b/manifests/capabilities/network.consent.read.json
nnew file mode 100644
iindex 00000000..fbf8a639
---- /dev/null
++++ b/manifests/capabilities/network.consent.read.json
@@@ -0,0 +1,23 @@
++{
++ "id": "network.consent.read",
++ "version": "1.0",
++ "owner": "network",
++ "status": "active",
++ "visibility": "first-party",
++ "description": "Ask whether a purpose (ai.train, data.public, face.recognize, ai.looks, app.data) may be used for up to 500 people (L24, data and AI by consent). A service asks before every use of a person's content or likeness for one of those purposes; an answer is cached at most 60 s and dropped on network.consent.changed, and a service that cannot reach Network treats every purpose as off.",
++ "inputSchema": "network.consent-check-request@1",
++ "outputSchema": "network.consent-check-result@1",
++ "permissions": [
++ "network:read"
++ ],
++ "resourceConstraints": [
++ "none"
++ ],
++ "quotaClass": "identity-read",
++ "events": [
++ "network.consent.changed"
++ ],
++ "implementedBy": [
++ "POST /internal/consent/check"
++ ]
++}
ddiff --git a/manifests/services/network.json b/manifests/services/network.json
iindex 25edac61..ed8da547 100644
---- a/manifests/services/network.json
++++ b/manifests/services/network.json
@@@ -78,7 +78,9 @@
"network.secret.use",
"network.staff.read",
"network.status.incident",
-- "network.actions.read"
++ "network.actions.read",
++ "network.consent.read",
++ "network.consent.manage"
],
"eventsProduced": [
"network.account.deleted",
@@@ -99,7 +101,8 @@
"network.principal_grant.changed",
"network.subject.merged",
"network.user.token_valid_after",
-- "network.user.updated"
++ "network.user.updated",
++ "network.consent.changed"
],
"eventsConsumed": [
"billing.staff.action",
ddiff --git a/package.json b/package.json
iindex ce9c5bbd..fac25094 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.254.0",
++ "version": "0.255.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
ddiff --git a/test/network-consent.test.js b/test/network-consent.test.js
nnew file mode 100644
iindex 00000000..1b40525d
---- /dev/null
++++ b/test/network-consent.test.js
@@@ -0,0 +1,74 @@
++'use strict';
++// network.consent@1 and its family (L24, data and AI by consent, 2026-10-31). Each use of a person's content or likeness
++// for AI or data is off until that person turns it on; the record is the proof. The schemas carry the shapes; the
++// rules they cannot say are checked here: one list of purposes and kinds everywhere, an id of the choice's own kind,
++// and no purpose that sells data (that needs its own contract and a per-deal yes, plan C5).
++const assert = require('assert');
++const fs = require('fs');
++const path = require('path');
++const c = require('..');
++
++const ROOT = path.join(__dirname, '..');
++const schema = (f) => JSON.parse(fs.readFileSync(path.join(ROOT, 'contracts', f), 'utf8'));
++const fx = (id, kind, f) => JSON.parse(fs.readFileSync(path.join(ROOT, 'fixtures', id, kind, f), 'utf8'));
++
++const PURPOSES = ['ai.train', 'data.public', 'face.recognize', 'ai.looks', 'app.data'];
++const KINDS = ['streams', 'vods', 'clips', 'voice', 'chat', 'posts', 'pictures', 'code'];
++
++const consent = schema('network/consent.v1.json');
++const request = schema('network/consent-check-request.v1.json');
++const result = schema('network/consent-check-result.v1.json');
++const mine = schema('network/me-consent-result.v1.json');
++const changed = schema('events/payloads/network.consent.changed.v1.json');
++
++// One list of purposes and one of kinds in every contract of the family, so a new purpose is added everywhere at once.
++for (const [name, list] of [
++ ['consent.purpose', consent.properties.purpose.enum],
++ ['request.purpose', request.properties.purpose.enum],
++ ['result.purpose', result.properties.purpose.enum],
++ ['mine.purposes.id', mine.properties.purposes.items.properties.id.enum],
++ ['mine.history.purpose', mine.properties.history.items.properties.purpose.enum],
++ ['changed.purpose', changed.properties.purpose.enum],
++]) assert.deepStrictEqual(list, PURPOSES, `${name} lists the same purposes`);
++for (const [name, list] of [
++ ['consent.kinds', consent.properties.kinds.items.enum],
++ ['request.kind', request.properties.kind.enum],
++ ['result.kind', result.properties.kind.enum],
++ ['changed.kinds', changed.properties.kinds.items.enum],
++]) assert.deepStrictEqual(list, KINDS, `${name} lists the same kinds`);
++
++// Selling is not a purpose: it would need its own contract and a yes for each deal.
++assert.ok(!PURPOSES.some((p) => /sell|licen[cs]e|sale/.test(p)), 'no purpose sells data');
++assert.strictEqual(c.validate('network.consent@1', { ...fx('network.consent', 'valid', 'ai-train-streams.json'), purpose: 'data.sell' }).valid, false);
++
++// A choice's id is its own kind.
++assert.match(c.ids.newId('consent'), /^cns_[0-9A-HJKMNP-TV-Z]{26}$/, 'a consent id is cns_<ULID>');
++
++// The fixtures: each valid one validates, each invalid one does not.
++for (const id of ['network.consent', 'network.consent-choice', 'network.me-consent-result', 'network.consent-check-request', 'network.consent-check-result', 'network.consent.changed']) {
++ for (const kind of ['valid', 'invalid']) {
++ for (const f of fs.readdirSync(path.join(ROOT, 'fixtures', id, kind))) {
++ const r = c.validate(`${id}@1`, fx(id, kind, f));
++ assert.strictEqual(r.valid, kind === 'valid', `${id} ${kind}/${f}: ${JSON.stringify(r.errors)}`);
++ }
++ }
++}
++
++// The change event names the change, never the content it covers.
++assert.strictEqual(changed.additionalProperties, false);
++assert.ok(!('content' in changed.properties) && !('text' in changed.properties), 'the event carries no content');
++
++// A check answers at most what it was asked: 500 people a call.
++assert.strictEqual(request.properties.subjects.maxItems, 500);
++assert.strictEqual(result.properties.allowed.maxProperties, 500);
++
++// The capabilities exist, and the service check is first-party only.
++const cap = (id) => JSON.parse(fs.readFileSync(path.join(ROOT, 'manifests', 'capabilities', `${id}.json`), 'utf8'));
++assert.strictEqual(cap('network.consent.read').visibility, 'first-party', 'only OpenVibe services ask the check');
++assert.deepStrictEqual(cap('network.consent.read').implementedBy, ['POST /internal/consent/check']);
++assert.strictEqual(cap('network.consent.manage').visibility, 'public');
++const network = JSON.parse(fs.readFileSync(path.join(ROOT, 'manifests', 'services', 'network.json'), 'utf8'));
++assert.ok(network.capabilities.includes('network.consent.read') && network.capabilities.includes('network.consent.manage'));
++assert.ok(network.eventsProduced.includes('network.consent.changed'));
++
++console.log('network.consent@1: one list of purposes and kinds, cns_ ids, no selling purpose, fixtures, capabilities');
ddiff --git a/test/run.js b/test/run.js
iindex ce9c653c..d7fbf634 100644
---- a/test/run.js
++++ b/test/run.js
@@@ -928,6 +928,7 @@ sub(path.join(__dirname, 'billing-grace.test.js'));
sub(path.join(__dirname, 'resources.test.js'));
// The wait record (plan A2): a wait is a record, not a running loop.
sub(path.join(__dirname, 'actor-wait.test.js'));
++sub(path.join(__dirname, 'network-consent.test.js'));
// Documentation currency (roadmap WS-U task 3): a placeholder service with no repository yet is skipped, not a gap.
sub(path.join(__dirname, 'docs-currency.test.js'));