Retro Bulletin Board Systems on atproto. Web app and TUI. lazy mirror of alyraffauf/atbbs atbbs.xyz
forums python tui atproto bbs
3
fork

Configure Feed

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

add profile lexicon

+92 -2
+2 -1
core/lexicon.py
··· 8 8 BAN = "xyz.atboards.ban" 9 9 HIDE = "xyz.atboards.hide" 10 10 PIN = "xyz.atboards.pin" 11 + PROFILE = "xyz.atboards.profile" 11 12 12 - OAUTH_SCOPE = f"atproto blob:*/* repo:{SITE} repo:{BOARD} repo:{NEWS} repo:{THREAD} repo:{REPLY} repo:{BAN} repo:{HIDE} repo:{PIN}" 13 + OAUTH_SCOPE = f"atproto blob:*/* repo:{SITE} repo:{BOARD} repo:{NEWS} repo:{THREAD} repo:{REPLY} repo:{BAN} repo:{HIDE} repo:{PIN} repo:{PROFILE}"
+36
lexicons/xyz.atboards.profile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "xyz.atboards.profile", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "key": "literal:self", 8 + "record": { 9 + "type": "object", 10 + "required": ["createdAt"], 11 + "properties": { 12 + "name": { 13 + "type": "string", 14 + "maxLength": 100 15 + }, 16 + "pronouns": { 17 + "type": "string", 18 + "maxLength": 50 19 + }, 20 + "bio": { 21 + "type": "string", 22 + "maxLength": 1000 23 + }, 24 + "createdAt": { 25 + "type": "string", 26 + "format": "datetime" 27 + }, 28 + "updatedAt": { 29 + "type": "string", 30 + "format": "datetime" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + }
+1 -1
web/docker-entrypoint.sh
··· 6 6 # Strip trailing slash. 7 7 PUBLIC_URL="${PUBLIC_URL%/}" 8 8 9 - SCOPE="atproto blob:*/* repo:xyz.atboards.site repo:xyz.atboards.board repo:xyz.atboards.news repo:xyz.atboards.thread repo:xyz.atboards.reply repo:xyz.atboards.ban repo:xyz.atboards.hide repo:xyz.atboards.pin" 9 + SCOPE="atproto blob:*/* repo:xyz.atboards.site repo:xyz.atboards.board repo:xyz.atboards.news repo:xyz.atboards.thread repo:xyz.atboards.reply repo:xyz.atboards.ban repo:xyz.atboards.hide repo:xyz.atboards.pin repo:xyz.atboards.profile" 10 10 11 11 # Runtime config read by the SPA at startup. 12 12 cat > /usr/share/nginx/html/config.json <<EOF
+1
web/src/lexicons/index.ts
··· 3 3 export * as XyzAtboardsHide from "./types/xyz/atboards/hide.js"; 4 4 export * as XyzAtboardsNews from "./types/xyz/atboards/news.js"; 5 5 export * as XyzAtboardsPin from "./types/xyz/atboards/pin.js"; 6 + export * as XyzAtboardsProfile from "./types/xyz/atboards/profile.js"; 6 7 export * as XyzAtboardsReply from "./types/xyz/atboards/reply.js"; 7 8 export * as XyzAtboardsSite from "./types/xyz/atboards/site.js"; 8 9 export * as XyzAtboardsThread from "./types/xyz/atboards/thread.js";
+50
web/src/lexicons/types/xyz/atboards/profile.ts
··· 1 + import type {} from "@atcute/lexicons"; 2 + import * as v from "@atcute/lexicons/validations"; 3 + import type {} from "@atcute/lexicons/ambient"; 4 + 5 + const _mainSchema = /*#__PURE__*/ v.record( 6 + /*#__PURE__*/ v.literal("self"), 7 + /*#__PURE__*/ v.object({ 8 + $type: /*#__PURE__*/ v.literal("xyz.atboards.profile"), 9 + /** 10 + * @maxLength 1000 11 + */ 12 + bio: /*#__PURE__*/ v.optional( 13 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 14 + /*#__PURE__*/ v.stringLength(0, 1000), 15 + ]), 16 + ), 17 + createdAt: /*#__PURE__*/ v.datetimeString(), 18 + /** 19 + * @maxLength 100 20 + */ 21 + name: /*#__PURE__*/ v.optional( 22 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 23 + /*#__PURE__*/ v.stringLength(0, 100), 24 + ]), 25 + ), 26 + /** 27 + * @maxLength 50 28 + */ 29 + pronouns: /*#__PURE__*/ v.optional( 30 + /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ 31 + /*#__PURE__*/ v.stringLength(0, 50), 32 + ]), 33 + ), 34 + updatedAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), 35 + }), 36 + ); 37 + 38 + type main$schematype = typeof _mainSchema; 39 + 40 + export interface mainSchema extends main$schematype {} 41 + 42 + export const mainSchema = _mainSchema as mainSchema; 43 + 44 + export interface Main extends v.InferInput<typeof mainSchema> {} 45 + 46 + declare module "@atcute/lexicons/ambient" { 47 + interface Records { 48 + "xyz.atboards.profile": mainSchema; 49 + } 50 + }
+1
web/src/lib/lexicon.ts
··· 6 6 export const BAN = "xyz.atboards.ban"; 7 7 export const HIDE = "xyz.atboards.hide"; 8 8 export const PIN = "xyz.atboards.pin"; 9 + export const PROFILE = "xyz.atboards.profile";
+1
web/vite.config.ts
··· 16 16 "repo:xyz.atboards.ban", 17 17 "repo:xyz.atboards.hide", 18 18 "repo:xyz.atboards.pin", 19 + "repo:xyz.atboards.profile", 19 20 ].join(" "); 20 21 21 22 interface ClientMetadata {