a collection of lightweight TypeScript packages for AT Protocol, the protocol powering Bluesky
atproto bluesky typescript npm
101
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: pull latest Bluesky lexicons

Mary 74db1f1b 2fe56587

+376 -20
+5
.changeset/mighty-oranges-dream.md
··· 1 + --- 2 + '@atcute/bluesky': patch 3 + --- 4 + 5 + pull latest Bluesky lexicons
+1 -1
lexdocs/bluesky/README.md
··· 1 - https://github.com/bluesky-social/atproto/tree/a5cd018bd5f237221902ab1b6956b46233c92187/lexicons/ 1 + https://github.com/bluesky-social/atproto/tree/a48671e730681f692a88053e8f137bd9e2aed5f1/lexicons/
+58
lexdocs/bluesky/app/bsky/notification/defs.json
··· 5 5 "recordDeleted": { 6 6 "type": "object", 7 7 "properties": {} 8 + }, 9 + "chatPreference": { 10 + "type": "object", 11 + "required": ["filter", "push"], 12 + "properties": { 13 + "filter": { "type": "string", "knownValues": ["all", "accepted"] }, 14 + "push": { "type": "boolean" } 15 + } 16 + }, 17 + "filterablePreference": { 18 + "type": "object", 19 + "required": ["filter", "list", "push"], 20 + "properties": { 21 + "filter": { "type": "string", "knownValues": ["all", "follows"] }, 22 + "list": { "type": "boolean" }, 23 + "push": { "type": "boolean" } 24 + } 25 + }, 26 + "preference": { 27 + "type": "object", 28 + "required": ["list", "push"], 29 + "properties": { 30 + "list": { "type": "boolean" }, 31 + "push": { "type": "boolean" } 32 + } 33 + }, 34 + "preferences": { 35 + "type": "object", 36 + "required": [ 37 + "chat", 38 + "follow", 39 + "like", 40 + "likeViaRepost", 41 + "mention", 42 + "quote", 43 + "reply", 44 + "repost", 45 + "repostViaRepost", 46 + "starterpackJoined", 47 + "subscribedPost", 48 + "unverified", 49 + "verified" 50 + ], 51 + "properties": { 52 + "chat": { "type": "ref", "ref": "#chatPreference" }, 53 + "follow": { "type": "ref", "ref": "#filterablePreference" }, 54 + "like": { "type": "ref", "ref": "#filterablePreference" }, 55 + "likeViaRepost": { "type": "ref", "ref": "#filterablePreference" }, 56 + "mention": { "type": "ref", "ref": "#filterablePreference" }, 57 + "quote": { "type": "ref", "ref": "#filterablePreference" }, 58 + "reply": { "type": "ref", "ref": "#filterablePreference" }, 59 + "repost": { "type": "ref", "ref": "#filterablePreference" }, 60 + "repostViaRepost": { "type": "ref", "ref": "#filterablePreference" }, 61 + "starterpackJoined": { "type": "ref", "ref": "#preference" }, 62 + "subscribedPost": { "type": "ref", "ref": "#preference" }, 63 + "unverified": { "type": "ref", "ref": "#preference" }, 64 + "verified": { "type": "ref", "ref": "#preference" } 65 + } 8 66 } 9 67 } 10 68 }
+27
lexdocs/bluesky/app/bsky/notification/getPreferences.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.notification.getPreferences", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get notification-related preferences for an account. Requires auth.", 8 + "parameters": { 9 + "type": "params", 10 + "properties": {} 11 + }, 12 + "output": { 13 + "encoding": "application/json", 14 + "schema": { 15 + "type": "object", 16 + "required": ["preferences"], 17 + "properties": { 18 + "preferences": { 19 + "type": "ref", 20 + "ref": "app.bsky.notification.defs#preferences" 21 + } 22 + } 23 + } 24 + } 25 + } 26 + } 27 + }
+83
lexdocs/bluesky/app/bsky/notification/putPreferencesV2.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.notification.putPreferencesV2", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Set notification-related preferences for an account. Requires auth.", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "chat": { 14 + "type": "ref", 15 + "ref": "app.bsky.notification.defs#chatPreference" 16 + }, 17 + "follow": { 18 + "type": "ref", 19 + "ref": "app.bsky.notification.defs#filterablePreference" 20 + }, 21 + "like": { 22 + "type": "ref", 23 + "ref": "app.bsky.notification.defs#filterablePreference" 24 + }, 25 + "likeViaRepost": { 26 + "type": "ref", 27 + "ref": "app.bsky.notification.defs#filterablePreference" 28 + }, 29 + "mention": { 30 + "type": "ref", 31 + "ref": "app.bsky.notification.defs#filterablePreference" 32 + }, 33 + "quote": { 34 + "type": "ref", 35 + "ref": "app.bsky.notification.defs#filterablePreference" 36 + }, 37 + "reply": { 38 + "type": "ref", 39 + "ref": "app.bsky.notification.defs#filterablePreference" 40 + }, 41 + "repost": { 42 + "type": "ref", 43 + "ref": "app.bsky.notification.defs#filterablePreference" 44 + }, 45 + "repostViaRepost": { 46 + "type": "ref", 47 + "ref": "app.bsky.notification.defs#filterablePreference" 48 + }, 49 + "starterpackJoined": { 50 + "type": "ref", 51 + "ref": "app.bsky.notification.defs#preference" 52 + }, 53 + "subscribedPost": { 54 + "type": "ref", 55 + "ref": "app.bsky.notification.defs#preference" 56 + }, 57 + "unverified": { 58 + "type": "ref", 59 + "ref": "app.bsky.notification.defs#preference" 60 + }, 61 + "verified": { 62 + "type": "ref", 63 + "ref": "app.bsky.notification.defs#preference" 64 + } 65 + } 66 + } 67 + }, 68 + "output": { 69 + "encoding": "application/json", 70 + "schema": { 71 + "type": "object", 72 + "required": ["preferences"], 73 + "properties": { 74 + "preferences": { 75 + "type": "ref", 76 + "ref": "app.bsky.notification.defs#preferences" 77 + } 78 + } 79 + } 80 + } 81 + } 82 + } 83 + }
+5 -5
lexdocs/bluesky/app/bsky/unspecced/getPostThreadHiddenV2.json lexdocs/bluesky/app/bsky/unspecced/getPostThreadOtherV2.json
··· 1 1 { 2 2 "lexicon": 1, 3 - "id": "app.bsky.unspecced.getPostThreadHiddenV2", 3 + "id": "app.bsky.unspecced.getPostThreadOtherV2", 4 4 "defs": { 5 5 "main": { 6 6 "type": "query", 7 - "description": "(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get the hidden posts in a thread. It is based in an anchor post at any depth of the tree, and returns hidden replies (recursive replies, with branching to their replies) below the anchor. It does not include ancestors nor the anchor. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests.", 7 + "description": "(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests.", 8 8 "parameters": { 9 9 "type": "params", 10 10 "required": ["anchor"], ··· 29 29 "properties": { 30 30 "thread": { 31 31 "type": "array", 32 - "description": "A flat list of hidden thread items. The depth of each item is indicated by the depth property inside the item.", 32 + "description": "A flat list of other thread items. The depth of each item is indicated by the depth property inside the item.", 33 33 "items": { 34 34 "type": "ref", 35 - "ref": "#threadHiddenItem" 35 + "ref": "#threadItem" 36 36 } 37 37 } 38 38 } 39 39 } 40 40 } 41 41 }, 42 - "threadHiddenItem": { 42 + "threadItem": { 43 43 "type": "object", 44 44 "required": ["uri", "depth", "value"], 45 45 "properties": {
+3 -3
lexdocs/bluesky/app/bsky/unspecced/getPostThreadV2.json
··· 50 50 "encoding": "application/json", 51 51 "schema": { 52 52 "type": "object", 53 - "required": ["thread", "hasHiddenReplies"], 53 + "required": ["thread", "hasOtherReplies"], 54 54 "properties": { 55 55 "thread": { 56 56 "type": "array", ··· 64 64 "type": "ref", 65 65 "ref": "app.bsky.feed.defs#threadgateView" 66 66 }, 67 - "hasHiddenReplies": { 67 + "hasOtherReplies": { 68 68 "type": "boolean", 69 - "description": "Whether this thread has hidden replies. If true, a call can be made to the `getPostThreadHiddenV2` endpoint to retrieve them." 69 + "description": "Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them." 70 70 } 71 71 } 72 72 }
+3 -1
packages/definitions/bluesky/lib/lexicons/index.ts
··· 72 72 export * as AppBskyLabelerGetServices from './types/app/bsky/labeler/getServices.js'; 73 73 export * as AppBskyLabelerService from './types/app/bsky/labeler/service.js'; 74 74 export * as AppBskyNotificationDefs from './types/app/bsky/notification/defs.js'; 75 + export * as AppBskyNotificationGetPreferences from './types/app/bsky/notification/getPreferences.js'; 75 76 export * as AppBskyNotificationGetUnreadCount from './types/app/bsky/notification/getUnreadCount.js'; 76 77 export * as AppBskyNotificationListNotifications from './types/app/bsky/notification/listNotifications.js'; 77 78 export * as AppBskyNotificationPutPreferences from './types/app/bsky/notification/putPreferences.js'; 79 + export * as AppBskyNotificationPutPreferencesV2 from './types/app/bsky/notification/putPreferencesV2.js'; 78 80 export * as AppBskyNotificationRegisterPush from './types/app/bsky/notification/registerPush.js'; 79 81 export * as AppBskyNotificationUpdateSeen from './types/app/bsky/notification/updateSeen.js'; 80 82 export * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet.js'; 81 83 export * as AppBskyUnspeccedDefs from './types/app/bsky/unspecced/defs.js'; 82 84 export * as AppBskyUnspeccedGetConfig from './types/app/bsky/unspecced/getConfig.js'; 83 85 export * as AppBskyUnspeccedGetPopularFeedGenerators from './types/app/bsky/unspecced/getPopularFeedGenerators.js'; 84 - export * as AppBskyUnspeccedGetPostThreadHiddenV2 from './types/app/bsky/unspecced/getPostThreadHiddenV2.js'; 86 + export * as AppBskyUnspeccedGetPostThreadOtherV2 from './types/app/bsky/unspecced/getPostThreadOtherV2.js'; 85 87 export * as AppBskyUnspeccedGetPostThreadV2 from './types/app/bsky/unspecced/getPostThreadV2.js'; 86 88 export * as AppBskyUnspeccedGetSuggestedFeeds from './types/app/bsky/unspecced/getSuggestedFeeds.js'; 87 89 export * as AppBskyUnspeccedGetSuggestedFeedsSkeleton from './types/app/bsky/unspecced/getSuggestedFeedsSkeleton.js';
+74
packages/definitions/bluesky/lib/lexicons/types/app/bsky/notification/defs.ts
··· 1 1 import type {} from '@atcute/lexicons'; 2 2 import * as v from '@atcute/lexicons/validations'; 3 3 4 + const _chatPreferenceSchema = /*#__PURE__*/ v.object({ 5 + $type: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal('app.bsky.notification.defs#chatPreference')), 6 + filter: /*#__PURE__*/ v.string<'accepted' | 'all' | (string & {})>(), 7 + push: /*#__PURE__*/ v.boolean(), 8 + }); 9 + const _filterablePreferenceSchema = /*#__PURE__*/ v.object({ 10 + $type: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal('app.bsky.notification.defs#filterablePreference')), 11 + filter: /*#__PURE__*/ v.string<'all' | 'follows' | (string & {})>(), 12 + list: /*#__PURE__*/ v.boolean(), 13 + push: /*#__PURE__*/ v.boolean(), 14 + }); 15 + const _preferenceSchema = /*#__PURE__*/ v.object({ 16 + $type: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal('app.bsky.notification.defs#preference')), 17 + list: /*#__PURE__*/ v.boolean(), 18 + push: /*#__PURE__*/ v.boolean(), 19 + }); 20 + const _preferencesSchema = /*#__PURE__*/ v.object({ 21 + $type: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal('app.bsky.notification.defs#preferences')), 22 + get chat() { 23 + return chatPreferenceSchema; 24 + }, 25 + get follow() { 26 + return filterablePreferenceSchema; 27 + }, 28 + get like() { 29 + return filterablePreferenceSchema; 30 + }, 31 + get likeViaRepost() { 32 + return filterablePreferenceSchema; 33 + }, 34 + get mention() { 35 + return filterablePreferenceSchema; 36 + }, 37 + get quote() { 38 + return filterablePreferenceSchema; 39 + }, 40 + get reply() { 41 + return filterablePreferenceSchema; 42 + }, 43 + get repost() { 44 + return filterablePreferenceSchema; 45 + }, 46 + get repostViaRepost() { 47 + return filterablePreferenceSchema; 48 + }, 49 + get starterpackJoined() { 50 + return preferenceSchema; 51 + }, 52 + get subscribedPost() { 53 + return preferenceSchema; 54 + }, 55 + get unverified() { 56 + return preferenceSchema; 57 + }, 58 + get verified() { 59 + return preferenceSchema; 60 + }, 61 + }); 4 62 const _recordDeletedSchema = /*#__PURE__*/ v.object({ 5 63 $type: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal('app.bsky.notification.defs#recordDeleted')), 6 64 }); 7 65 66 + type chatPreference$schematype = typeof _chatPreferenceSchema; 67 + type filterablePreference$schematype = typeof _filterablePreferenceSchema; 68 + type preference$schematype = typeof _preferenceSchema; 69 + type preferences$schematype = typeof _preferencesSchema; 8 70 type recordDeleted$schematype = typeof _recordDeletedSchema; 9 71 72 + export interface chatPreferenceSchema extends chatPreference$schematype {} 73 + export interface filterablePreferenceSchema extends filterablePreference$schematype {} 74 + export interface preferenceSchema extends preference$schematype {} 75 + export interface preferencesSchema extends preferences$schematype {} 10 76 export interface recordDeletedSchema extends recordDeleted$schematype {} 11 77 78 + export const chatPreferenceSchema = _chatPreferenceSchema as chatPreferenceSchema; 79 + export const filterablePreferenceSchema = _filterablePreferenceSchema as filterablePreferenceSchema; 80 + export const preferenceSchema = _preferenceSchema as preferenceSchema; 81 + export const preferencesSchema = _preferencesSchema as preferencesSchema; 12 82 export const recordDeletedSchema = _recordDeletedSchema as recordDeletedSchema; 13 83 84 + export interface ChatPreference extends v.InferInput<typeof chatPreferenceSchema> {} 85 + export interface FilterablePreference extends v.InferInput<typeof filterablePreferenceSchema> {} 86 + export interface Preference extends v.InferInput<typeof preferenceSchema> {} 87 + export interface Preferences extends v.InferInput<typeof preferencesSchema> {} 14 88 export interface RecordDeleted extends v.InferInput<typeof recordDeletedSchema> {}
+31
packages/definitions/bluesky/lib/lexicons/types/app/bsky/notification/getPreferences.ts
··· 1 + import type {} from '@atcute/lexicons'; 2 + import * as v from '@atcute/lexicons/validations'; 3 + import type {} from '@atcute/lexicons/ambient'; 4 + import * as AppBskyNotificationDefs from './defs.js'; 5 + 6 + const _mainSchema = /*#__PURE__*/ v.query('app.bsky.notification.getPreferences', { 7 + params: /*#__PURE__*/ v.object({}), 8 + output: { 9 + type: 'lex', 10 + schema: /*#__PURE__*/ v.object({ 11 + get preferences() { 12 + return AppBskyNotificationDefs.preferencesSchema; 13 + }, 14 + }), 15 + }, 16 + }); 17 + 18 + type main$schematype = typeof _mainSchema; 19 + 20 + export interface mainSchema extends main$schematype {} 21 + 22 + export const mainSchema = _mainSchema as mainSchema; 23 + 24 + export interface $params extends v.InferInput<mainSchema['params']> {} 25 + export interface $output extends v.InferXRPCBodyInput<mainSchema['output']> {} 26 + 27 + declare module '@atcute/lexicons/ambient' { 28 + interface XRPCQueries { 29 + 'app.bsky.notification.getPreferences': mainSchema; 30 + } 31 + }
+76
packages/definitions/bluesky/lib/lexicons/types/app/bsky/notification/putPreferencesV2.ts
··· 1 + import type {} from '@atcute/lexicons'; 2 + import * as v from '@atcute/lexicons/validations'; 3 + import type {} from '@atcute/lexicons/ambient'; 4 + import * as AppBskyNotificationDefs from './defs.js'; 5 + 6 + const _mainSchema = /*#__PURE__*/ v.procedure('app.bsky.notification.putPreferencesV2', { 7 + params: null, 8 + input: { 9 + type: 'lex', 10 + schema: /*#__PURE__*/ v.object({ 11 + get chat() { 12 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.chatPreferenceSchema); 13 + }, 14 + get follow() { 15 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.filterablePreferenceSchema); 16 + }, 17 + get like() { 18 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.filterablePreferenceSchema); 19 + }, 20 + get likeViaRepost() { 21 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.filterablePreferenceSchema); 22 + }, 23 + get mention() { 24 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.filterablePreferenceSchema); 25 + }, 26 + get quote() { 27 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.filterablePreferenceSchema); 28 + }, 29 + get reply() { 30 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.filterablePreferenceSchema); 31 + }, 32 + get repost() { 33 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.filterablePreferenceSchema); 34 + }, 35 + get repostViaRepost() { 36 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.filterablePreferenceSchema); 37 + }, 38 + get starterpackJoined() { 39 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.preferenceSchema); 40 + }, 41 + get subscribedPost() { 42 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.preferenceSchema); 43 + }, 44 + get unverified() { 45 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.preferenceSchema); 46 + }, 47 + get verified() { 48 + return /*#__PURE__*/ v.optional(AppBskyNotificationDefs.preferenceSchema); 49 + }, 50 + }), 51 + }, 52 + output: { 53 + type: 'lex', 54 + schema: /*#__PURE__*/ v.object({ 55 + get preferences() { 56 + return AppBskyNotificationDefs.preferencesSchema; 57 + }, 58 + }), 59 + }, 60 + }); 61 + 62 + type main$schematype = typeof _mainSchema; 63 + 64 + export interface mainSchema extends main$schematype {} 65 + 66 + export const mainSchema = _mainSchema as mainSchema; 67 + 68 + export interface $params {} 69 + export interface $input extends v.InferXRPCBodyInput<mainSchema['input']> {} 70 + export interface $output extends v.InferXRPCBodyInput<mainSchema['output']> {} 71 + 72 + declare module '@atcute/lexicons/ambient' { 73 + interface XRPCProcedures { 74 + 'app.bsky.notification.putPreferencesV2': mainSchema; 75 + } 76 + }
+9 -9
packages/definitions/bluesky/lib/lexicons/types/app/bsky/unspecced/getPostThreadHiddenV2.ts packages/definitions/bluesky/lib/lexicons/types/app/bsky/unspecced/getPostThreadOtherV2.ts
··· 3 3 import type {} from '@atcute/lexicons/ambient'; 4 4 import * as AppBskyUnspeccedDefs from './defs.js'; 5 5 6 - const _mainSchema = /*#__PURE__*/ v.query('app.bsky.unspecced.getPostThreadHiddenV2', { 6 + const _mainSchema = /*#__PURE__*/ v.query('app.bsky.unspecced.getPostThreadOtherV2', { 7 7 params: /*#__PURE__*/ v.object({ 8 8 anchor: /*#__PURE__*/ v.resourceUriString(), 9 9 prioritizeFollowedUsers: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean(), false), ··· 12 12 type: 'lex', 13 13 schema: /*#__PURE__*/ v.object({ 14 14 get thread() { 15 - return /*#__PURE__*/ v.array(threadHiddenItemSchema); 15 + return /*#__PURE__*/ v.array(threadItemSchema); 16 16 }, 17 17 }), 18 18 }, 19 19 }); 20 - const _threadHiddenItemSchema = /*#__PURE__*/ v.object({ 20 + const _threadItemSchema = /*#__PURE__*/ v.object({ 21 21 $type: /*#__PURE__*/ v.optional( 22 - /*#__PURE__*/ v.literal('app.bsky.unspecced.getPostThreadHiddenV2#threadHiddenItem'), 22 + /*#__PURE__*/ v.literal('app.bsky.unspecced.getPostThreadOtherV2#threadItem'), 23 23 ), 24 24 depth: /*#__PURE__*/ v.integer(), 25 25 uri: /*#__PURE__*/ v.resourceUriString(), ··· 29 29 }); 30 30 31 31 type main$schematype = typeof _mainSchema; 32 - type threadHiddenItem$schematype = typeof _threadHiddenItemSchema; 32 + type threadItem$schematype = typeof _threadItemSchema; 33 33 34 34 export interface mainSchema extends main$schematype {} 35 - export interface threadHiddenItemSchema extends threadHiddenItem$schematype {} 35 + export interface threadItemSchema extends threadItem$schematype {} 36 36 37 37 export const mainSchema = _mainSchema as mainSchema; 38 - export const threadHiddenItemSchema = _threadHiddenItemSchema as threadHiddenItemSchema; 38 + export const threadItemSchema = _threadItemSchema as threadItemSchema; 39 39 40 - export interface ThreadHiddenItem extends v.InferInput<typeof threadHiddenItemSchema> {} 40 + export interface ThreadItem extends v.InferInput<typeof threadItemSchema> {} 41 41 42 42 export interface $params extends v.InferInput<mainSchema['params']> {} 43 43 export interface $output extends v.InferXRPCBodyInput<mainSchema['output']> {} 44 44 45 45 declare module '@atcute/lexicons/ambient' { 46 46 interface XRPCQueries { 47 - 'app.bsky.unspecced.getPostThreadHiddenV2': mainSchema; 47 + 'app.bsky.unspecced.getPostThreadOtherV2': mainSchema; 48 48 } 49 49 }
+1 -1
packages/definitions/bluesky/lib/lexicons/types/app/bsky/unspecced/getPostThreadV2.ts
··· 25 25 output: { 26 26 type: 'lex', 27 27 schema: /*#__PURE__*/ v.object({ 28 - hasHiddenReplies: /*#__PURE__*/ v.boolean(), 28 + hasOtherReplies: /*#__PURE__*/ v.boolean(), 29 29 get thread() { 30 30 return /*#__PURE__*/ v.array(threadItemSchema); 31 31 },