openvibers/openvibe.contracts Commits
0.255.0: network.consent@1 — data and AI by consent (L24) (#263)
Changes
@@@ -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@@@ -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",nnew file mode 100644@@@ -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"++ }++ }++}nnew file mode 100644@@@ -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."++ }++ }++}nnew file mode 100644@@@ -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"++ }++ }++}nnew file mode 100644@@@ -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."++ }++ }++}nnew file mode 100644@@@ -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."++ }++ }++}nnew file mode 100644@@@ -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."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,4 @@++{++ "purpose": "ai.train",++ "subjects": []++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "purpose": "ai.train",++ "kind": "chat",++ "subjects": [++ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",++ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z5"++ ]++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "purpose": "ai.train",++ "allowed": {++ "moosely": true++ },++ "checked_at": "2026-10-31T05:00:01.000Z"++}nnew file mode 100644@@@ -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"++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "on": true,++ "text_version": "2026-10-31.1",++ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4"++}nnew file mode 100644@@@ -0,0 +1,3 @@++{++ "on": false++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "on": true,++ "kinds": [++ "chat"++ ],++ "text_version": "2026-10-31.1",++ "adult": true++}nnew file mode 100644@@@ -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"++}nnew file mode 100644@@@ -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"++}nnew file mode 100644@@@ -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++}nnew file mode 100644@@@ -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++}nnew file mode 100644@@@ -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++}nnew file mode 100644@@@ -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++}nnew file mode 100644@@@ -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"++}nnew file mode 100644@@@ -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"++ }++ ]++}nnew file mode 100644@@@ -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"++ }++ ]++}@@@ -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",@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -145,8 +145,8 @@"service": "network","name": "OpenVibe.Network","origin": "https://openvibe.network",-- "operations": 43,-- "capabilities": 30++ "operations": 47,++ "capabilities": 32},{"service": "news",@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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.",@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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).@@@ -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}$/;nnew file mode 100644@@@ -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"++ ]++}nnew file mode 100644@@@ -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"++ ]++}@@@ -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",@@@ -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",nnew file mode 100644@@@ -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');@@@ -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'));
@@ -1,5 +1,21 @@
@@ -1,5 +1,21 @@
# Changelog
# 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
## 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
- **`actor.wait@1`** (plan A2, Watch mode; the design note `research-2026-10-30/agent-a2-watch.md`): one wait — the
@@ -7716,6 +7716,60 @@
@@ -7716,6 +7716,60 @@
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"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",
"id": "today.event.scheduled",
"version": "1.0.0",
"version": "1.0.0",
new file mode 100644
new file mode 100644
@@ -0,0 +1,44 @@
@@ -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"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,36 @@
@@ -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."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,42 @@
@@ -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"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,40 @@
@@ -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."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,90 @@
@@ -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."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,61 @@
@@ -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."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
+{
+ "purpose": "ai.train",
+ "subjects": []
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "purpose": "ai.train",
+ "kind": "chat",
+ "subjects": [
+ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4",
+ "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z5"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "purpose": "ai.train",
+ "allowed": {
+ "moosely": true
+ },
+ "checked_at": "2026-10-31T05:00:01.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -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"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "on": true,
+ "text_version": "2026-10-31.1",
+ "subject": "usr_01K6R2Z8C4V7M9Q3T5W1X2Y3Z4"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
+{
+ "on": false
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "on": true,
+ "kinds": [
+ "chat"
+ ],
+ "text_version": "2026-10-31.1",
+ "adult": true
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -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"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -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"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -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
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -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
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -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
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,20 @@
@@ -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
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,19 @@
@@ -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"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -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"
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,53 @@
@@ -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"
+ }
+ ]
+}
@@ -87502,6 +87502,630 @@
@@ -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": {
"today.event.scheduled": {
"version": "1.0.0",
"version": "1.0.0",
"owner": "today",
"owner": "today",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bench API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -145,8 +145,8 @@
@@ -145,8 +145,8 @@
"service": "network",
"service": "network",
"name": "OpenVibe.Network",
"name": "OpenVibe.Network",
"origin": "https://openvibe.network",
"origin": "https://openvibe.network",
- "operations": 43,
- "capabilities": 30
+ "operations": 47,
+ "capabilities": 32
},
},
{
{
"service": "news",
"service": "news",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -254,6 +254,352 @@
@@ -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": {
"/api/v1/node/self/capabilities": {
"put": {
"put": {
"operationId": "put_api_v1_node_self_capabilities",
"operationId": "put_api_v1_node_self_capabilities",
@@ -994,8 +1340,64 @@
@@ -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",
"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).",
"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.",
"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 @@
@@ -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": {
"network.creator-analytics-result.v1": {
"title": "NetworkCreatorAnalyticsResult",
"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`).",
"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 @@
@@ -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": {
"network.mod-install-request.v1": {
"title": "NetworkModInstallRequest",
"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.",
"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.",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -263422,6 +263422,11055 @@ export interface NetworkDockResult {
@@ -263422,6 +263422,11055 @@ export interface NetworkDockResult {
sources_partial: boolean;
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) */
/** [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).
* 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).
@@ -6,7 +6,7 @@
@@ -6,7 +6,7 @@
const crypto = require('crypto');
const crypto = require('crypto');
const ALPHABET = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
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 SLUG_TYPES = new Set(['service', 'system']);
const ULID_RE = /^[0-9A-HJKMNP-TV-Z]{26}$/;
const ULID_RE = /^[0-9A-HJKMNP-TV-Z]{26}$/;
const SLUG_RE = /^[a-z][a-z0-9-]{1,39}$/;
const SLUG_RE = /^[a-z][a-z0-9-]{1,39}$/;
new file mode 100644
new file mode 100644
@@ -0,0 +1,26 @@
@@ -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"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,23 @@
@@ -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"
+ ]
+}
@@ -78,7 +78,9 @@
@@ -78,7 +78,9 @@
"network.secret.use",
"network.secret.use",
"network.staff.read",
"network.staff.read",
"network.status.incident",
"network.status.incident",
- "network.actions.read"
+ "network.actions.read",
+ "network.consent.read",
+ "network.consent.manage"
],
],
"eventsProduced": [
"eventsProduced": [
"network.account.deleted",
"network.account.deleted",
@@ -99,7 +101,8 @@
@@ -99,7 +101,8 @@
"network.principal_grant.changed",
"network.principal_grant.changed",
"network.subject.merged",
"network.subject.merged",
"network.user.token_valid_after",
"network.user.token_valid_after",
- "network.user.updated"
+ "network.user.updated",
+ "network.consent.changed"
],
],
"eventsConsumed": [
"eventsConsumed": [
"billing.staff.action",
"billing.staff.action",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"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.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",
new file mode 100644
new file mode 100644
@@ -0,0 +1,74 @@
@@ -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');
@@ -928,6 +928,7 @@ sub(path.join(__dirname, 'billing-grace.test.js'));
@@ -928,6 +928,7 @@ sub(path.join(__dirname, 'billing-grace.test.js'));
sub(path.join(__dirname, 'resources.test.js'));
sub(path.join(__dirname, 'resources.test.js'));
// The wait record (plan A2): a wait is a record, not a running loop.
// 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, '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.
// 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'));
sub(path.join(__dirname, 'docs-currency.test.js'));