Compare commits

..

No commits in common. "d4133d4c37b46066cc064ec8d7df1c401d189191" and "f7c3f9afd9a3230f17ce288c6b16b7348d6611da" have entirely different histories.

1912 changed files with 65624 additions and 132001 deletions

View File

@ -0,0 +1,5 @@
---
"@atproto/api": patch
---
Add verification state to profile view lexicons

View File

@ -0,0 +1,5 @@
---
"@atproto/oauth-provider-frontend": patch
---
Minor UI/UX tweaks

View File

@ -1,5 +1,4 @@
packages/api/src/client packages/api/src/client
packages/lexicon-resolver/src/client
packages/bsky/src/lexicon packages/bsky/src/lexicon
packages/pds/src/lexicon packages/pds/src/lexicon
packages/ozone/src/lexicon packages/ozone/src/lexicon

View File

@ -45,11 +45,7 @@
], ],
"@typescript-eslint/no-unused-vars": [ "@typescript-eslint/no-unused-vars": [
"error", "error",
{ { "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" }
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_",
"ignoreRestSiblings": true
}
], ],
"@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-empty-interface": "off", "@typescript-eslint/no-empty-interface": "off",
@ -62,10 +58,6 @@
"files": ["jest.config.js"], "files": ["jest.config.js"],
"env": { "commonjs": true } "env": { "commonjs": true }
}, },
{
"files": ["vite.config.js", "vite.config.cjs", "vite.config.mjs"],
"env": { "node": true }
},
{ {
"files": ["jest.setup.js"], "files": ["jest.setup.js"],
"env": { "jest": true } "env": { "jest": true }

7
.gitattributes vendored
View File

@ -1,7 +0,0 @@
packages/**/src/lexicon/** linguist-generated=true
packages/api/src/client/** linguist-generated=true
packages/lexicon-resolver/src/client/** linguist-generated=true
packages/bsky/src/proto/** linguist-generated=true
packages/bsync/src/proto/** linguist-generated=true
packages/oauth/oauth-provider-ui/src/locales/**/messages.po linguist-generated=true

View File

@ -3,7 +3,6 @@ on:
push: push:
branches: branches:
- main - main
- divy/pds-build-dblock-fix
env: env:
REGISTRY: ghcr.io REGISTRY: ghcr.io
USERNAME: ${{ github.actor }} USERNAME: ${{ github.actor }}

View File

@ -15,16 +15,10 @@ jobs:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
# https://github.com/actions/setup-node/issues/531#issuecomment-2960522861 - run: corepack enable && corepack prepare --activate
- name: Install Node.js - uses: actions/setup-node@v4
uses: actions/setup-node@v4
with: with:
node-version-file: package.json node-version-file: package.json
- name: Enable Corepack
run: corepack enable
- name: Configure Dependency Cache
uses: actions/setup-node@v4
with:
cache: 'pnpm' cache: 'pnpm'
- name: Get current month - name: Get current month
run: echo "CURRENT_MONTH=$(date +'%Y-%m')" >> $GITHUB_ENV run: echo "CURRENT_MONTH=$(date +'%Y-%m')" >> $GITHUB_ENV
@ -52,16 +46,10 @@ jobs:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
# https://github.com/actions/setup-node/issues/531#issuecomment-2960522861 - run: corepack enable && corepack prepare --activate
- name: Install Node.js - uses: actions/setup-node@v4
uses: actions/setup-node@v4
with: with:
node-version-file: package.json node-version-file: package.json
- name: Enable Corepack
run: corepack enable
- name: Configure Dependency Cache
uses: actions/setup-node@v4
with:
cache: 'pnpm' cache: 'pnpm'
- name: Get current month - name: Get current month
run: echo "CURRENT_MONTH=$(date +'%Y-%m')" >> $GITHUB_ENV run: echo "CURRENT_MONTH=$(date +'%Y-%m')" >> $GITHUB_ENV
@ -82,16 +70,10 @@ jobs:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
# https://github.com/actions/setup-node/issues/531#issuecomment-2960522861 - run: corepack enable && corepack prepare --activate
- name: Install Node.js - uses: actions/setup-node@v4
uses: actions/setup-node@v4
with: with:
node-version-file: package.json node-version-file: package.json
- name: Enable Corepack
run: corepack enable
- name: Configure Dependency Cache
uses: actions/setup-node@v4
with:
cache: 'pnpm' cache: 'pnpm'
- name: Get current month - name: Get current month
run: echo "CURRENT_MONTH=$(date +'%Y-%m')" >> $GITHUB_ENV run: echo "CURRENT_MONTH=$(date +'%Y-%m')" >> $GITHUB_ENV

View File

@ -1,31 +0,0 @@
name: Sync to internal repo
on:
push:
branches: [main]
jobs:
sync:
if: github.repository == 'bluesky-social/atproto'
runs-on: ubuntu-latest
steps:
- name: Checkout public repo
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate GitHub App Token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ vars.SYNC_INTERNAL_APP_ID }}
private-key: ${{ secrets.SYNC_INTERNAL_PK }}
repositories: atproto-internal
- name: Push to internal repo
env:
TOKEN: ${{ steps.app-token.outputs.token }}
run: |
git config user.name "github-actions"
git config user.email "test@users.noreply.github.com"
git config --unset-all http.https://github.com/.extraheader
git remote add internal https://x-access-token:${TOKEN}@github.com/bluesky-social/atproto-internal.git
git push internal main --force

View File

@ -9,7 +9,6 @@ CHANGELOG.md
# Prettier is used to format the code during codegen # Prettier is used to format the code during codegen
packages/api/src/client packages/api/src/client
packages/lexicon-resolver/src/client
packages/bsky/src/lexicon packages/bsky/src/lexicon
packages/pds/src/lexicon packages/pds/src/lexicon
packages/ozone/src/lexicon packages/ozone/src/lexicon
@ -17,3 +16,4 @@ packages/ozone/src/lexicon
# Automatically generated by lingui # Automatically generated by lingui
packages/oauth/*/src/locales/*/messages.ts packages/oauth/*/src/locales/*/messages.ts
packages/oauth/oauth-provider-frontend/src/routeTree.gen.ts packages/oauth/oauth-provider-frontend/src/routeTree.gen.ts

View File

@ -1,6 +1,6 @@
Dual MIT/Apache-2.0 License Dual MIT/Apache-2.0 License
Copyright (c) 2022-2025 Bluesky Social PBC, and Contributors Copyright (c) 2022-2025 Bluesky PBC, and Contributors
Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>). Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>).

View File

@ -61,7 +61,7 @@ make help
## About AT Protocol ## About AT Protocol
The Authenticated Transfer Protocol ("ATP" or "atproto") is a decentralized social media protocol, developed by [Bluesky Social PBC](https://bsky.social). Learn more at: The Authenticated Transfer Protocol ("ATP" or "atproto") is a decentralized social media protocol, developed by [Bluesky PBC](https://bsky.social). Learn more at:
- [Overview and Guides](https://atproto.com/guides/overview) 👈 Best starting point - [Overview and Guides](https://atproto.com/guides/overview) 👈 Best starting point
- [Github Discussions](https://github.com/bluesky-social/atproto/discussions) 👈 Great place to ask questions - [Github Discussions](https://github.com/bluesky-social/atproto/discussions) 👈 Great place to ask questions

View File

@ -27,10 +27,6 @@
"verification": { "verification": {
"type": "ref", "type": "ref",
"ref": "#verificationState" "ref": "#verificationState"
},
"status": {
"type": "ref",
"ref": "#statusView"
} }
} }
}, },
@ -65,10 +61,6 @@
"verification": { "verification": {
"type": "ref", "type": "ref",
"ref": "#verificationState" "ref": "#verificationState"
},
"status": {
"type": "ref",
"ref": "#statusView"
} }
} }
}, },
@ -115,10 +107,6 @@
"verification": { "verification": {
"type": "ref", "type": "ref",
"ref": "#verificationState" "ref": "#verificationState"
},
"status": {
"type": "ref",
"ref": "#statusView"
} }
} }
}, },
@ -129,11 +117,7 @@
"feedgens": { "type": "integer" }, "feedgens": { "type": "integer" },
"starterPacks": { "type": "integer" }, "starterPacks": { "type": "integer" },
"labeler": { "type": "boolean" }, "labeler": { "type": "boolean" },
"chat": { "type": "ref", "ref": "#profileAssociatedChat" }, "chat": { "type": "ref", "ref": "#profileAssociatedChat" }
"activitySubscription": {
"type": "ref",
"ref": "#profileAssociatedActivitySubscription"
}
} }
}, },
"profileAssociatedChat": { "profileAssociatedChat": {
@ -146,16 +130,6 @@
} }
} }
}, },
"profileAssociatedActivitySubscription": {
"type": "object",
"required": ["allowSubscriptions"],
"properties": {
"allowSubscriptions": {
"type": "string",
"knownValues": ["followers", "mutuals", "none"]
}
}
},
"viewerState": { "viewerState": {
"type": "object", "type": "object",
"description": "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.", "description": "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.",
@ -174,14 +148,8 @@
"following": { "type": "string", "format": "at-uri" }, "following": { "type": "string", "format": "at-uri" },
"followedBy": { "type": "string", "format": "at-uri" }, "followedBy": { "type": "string", "format": "at-uri" },
"knownFollowers": { "knownFollowers": {
"description": "This property is present only in selected cases, as an optimization.",
"type": "ref", "type": "ref",
"ref": "#knownFollowers" "ref": "#knownFollowers"
},
"activitySubscription": {
"description": "This property is present only in selected cases, as an optimization.",
"type": "ref",
"ref": "app.bsky.notification.defs#activitySubscription"
} }
} }
}, },
@ -267,8 +235,7 @@
"#hiddenPostsPref", "#hiddenPostsPref",
"#bskyAppStatePref", "#bskyAppStatePref",
"#labelersPref", "#labelersPref",
"#postInteractionSettingsPref", "#postInteractionSettingsPref"
"#verificationPrefs"
] ]
} }
}, },
@ -563,18 +530,6 @@
} }
} }
}, },
"verificationPrefs": {
"type": "object",
"description": "Preferences for how verified accounts appear in the app.",
"required": [],
"properties": {
"hideBadges": {
"description": "Hide the blue check badges for verified accounts and trusted verifiers.",
"type": "boolean",
"default": false
}
}
},
"postInteractionSettingsPref": { "postInteractionSettingsPref": {
"type": "object", "type": "object",
"description": "Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly.", "description": "Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly.",
@ -604,32 +559,6 @@
} }
} }
} }
},
"statusView": {
"type": "object",
"required": ["status", "record"],
"properties": {
"status": {
"type": "string",
"description": "The status for the account.",
"knownValues": ["app.bsky.actor.status#live"]
},
"record": { "type": "unknown" },
"embed": {
"type": "union",
"description": "An optional embed associated with the status.",
"refs": ["app.bsky.embed.external#view"]
},
"expiresAt": {
"type": "string",
"description": "The date when this status will expire. The application might choose to no longer return the status after expiration.",
"format": "datetime"
},
"isActive": {
"type": "boolean",
"description": "True if the status is not expired, false if it is expired. Only present if expiration was set."
}
}
} }
} }
} }

View File

@ -1,37 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.actor.status",
"defs": {
"main": {
"type": "record",
"description": "A declaration of a Bluesky account status.",
"key": "literal:self",
"record": {
"type": "object",
"required": ["status", "createdAt"],
"properties": {
"status": {
"type": "string",
"description": "The status for the account.",
"knownValues": ["app.bsky.actor.status#live"]
},
"embed": {
"type": "union",
"description": "An optional embed associated with the status.",
"refs": ["app.bsky.embed.external"]
},
"durationMinutes": {
"type": "integer",
"description": "The duration of the status in minutes. Applications can choose to impose minimum and maximum limits.",
"minimum": 1
},
"createdAt": { "type": "string", "format": "datetime" }
}
}
},
"live": {
"type": "token",
"description": "Advertises an account as currently offering live content."
}
}
}

View File

@ -1,27 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.bookmark.createBookmark",
"defs": {
"main": {
"type": "procedure",
"description": "Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["uri", "cid"],
"properties": {
"uri": { "type": "string", "format": "at-uri" },
"cid": { "type": "string", "format": "cid" }
}
}
},
"errors": [
{
"name": "UnsupportedCollection",
"description": "The URI to be bookmarked is for an unsupported collection."
}
]
}
}
}

View File

@ -1,38 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.bookmark.defs",
"defs": {
"bookmark": {
"description": "Object used to store bookmark data in stash.",
"type": "object",
"required": ["subject"],
"properties": {
"subject": {
"description": "A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported.",
"type": "ref",
"ref": "com.atproto.repo.strongRef"
}
}
},
"bookmarkView": {
"type": "object",
"required": ["subject", "item"],
"properties": {
"subject": {
"description": "A strong ref to the bookmarked record.",
"type": "ref",
"ref": "com.atproto.repo.strongRef"
},
"createdAt": { "type": "string", "format": "datetime" },
"item": {
"type": "union",
"refs": [
"app.bsky.feed.defs#blockedPost",
"app.bsky.feed.defs#notFoundPost",
"app.bsky.feed.defs#postView"
]
}
}
}
}
}

View File

@ -1,26 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.bookmark.deleteBookmark",
"defs": {
"main": {
"type": "procedure",
"description": "Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": { "type": "string", "format": "at-uri" }
}
}
},
"errors": [
{
"name": "UnsupportedCollection",
"description": "The URI to be bookmarked is for an unsupported collection."
}
]
}
}
}

View File

@ -1,39 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.bookmark.getBookmarks",
"defs": {
"main": {
"type": "query",
"description": "Gets views of records bookmarked by the authenticated user. Requires authentication.",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["bookmarks"],
"properties": {
"cursor": { "type": "string" },
"bookmarks": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.bookmark.defs#bookmarkView"
}
}
}
}
}
}
}
}

View File

@ -23,7 +23,6 @@
"app.bsky.embed.recordWithMedia#view" "app.bsky.embed.recordWithMedia#view"
] ]
}, },
"bookmarkCount": { "type": "integer" },
"replyCount": { "type": "integer" }, "replyCount": { "type": "integer" },
"repostCount": { "type": "integer" }, "repostCount": { "type": "integer" },
"likeCount": { "type": "integer" }, "likeCount": { "type": "integer" },
@ -43,7 +42,6 @@
"properties": { "properties": {
"repost": { "type": "string", "format": "at-uri" }, "repost": { "type": "string", "format": "at-uri" },
"like": { "type": "string", "format": "at-uri" }, "like": { "type": "string", "format": "at-uri" },
"bookmarked": { "type": "boolean" },
"threadMuted": { "type": "boolean" }, "threadMuted": { "type": "boolean" },
"replyDisabled": { "type": "boolean" }, "replyDisabled": { "type": "boolean" },
"embeddingDisabled": { "type": "boolean" }, "embeddingDisabled": { "type": "boolean" },
@ -68,11 +66,6 @@
"type": "string", "type": "string",
"description": "Context provided by feed generator that may be passed back alongside interactions.", "description": "Context provided by feed generator that may be passed back alongside interactions.",
"maxLength": 2000 "maxLength": 2000
},
"reqId": {
"type": "string",
"description": "Unique identifier per request that may be passed back alongside interactions.",
"maxLength": 100
} }
} }
}, },
@ -100,8 +93,6 @@
"required": ["by", "indexedAt"], "required": ["by", "indexedAt"],
"properties": { "properties": {
"by": { "type": "ref", "ref": "app.bsky.actor.defs#profileViewBasic" }, "by": { "type": "ref", "ref": "app.bsky.actor.defs#profileViewBasic" },
"uri": { "type": "string", "format": "at-uri" },
"cid": { "type": "string", "format": "cid" },
"indexedAt": { "type": "string", "format": "datetime" } "indexedAt": { "type": "string", "format": "datetime" }
} }
}, },
@ -259,11 +250,6 @@
"type": "string", "type": "string",
"description": "Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton.", "description": "Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton.",
"maxLength": 2000 "maxLength": 2000
},
"reqId": {
"type": "string",
"description": "Unique identifier per request that may be passed back alongside interactions.",
"maxLength": 100
} }
} }
}, },

View File

@ -36,11 +36,6 @@
"type": "ref", "type": "ref",
"ref": "app.bsky.feed.defs#skeletonFeedPost" "ref": "app.bsky.feed.defs#skeletonFeedPost"
} }
},
"reqId": {
"type": "string",
"description": "Unique identifier per request that may be passed back alongside interactions.",
"maxLength": 100
} }
} }
} }

View File

@ -11,8 +11,7 @@
"required": ["subject", "createdAt"], "required": ["subject", "createdAt"],
"properties": { "properties": {
"subject": { "type": "ref", "ref": "com.atproto.repo.strongRef" }, "subject": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
"createdAt": { "type": "string", "format": "datetime" }, "createdAt": { "type": "string", "format": "datetime" }
"via": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
} }
} }
} }

View File

@ -11,8 +11,7 @@
"required": ["subject", "createdAt"], "required": ["subject", "createdAt"],
"properties": { "properties": {
"subject": { "type": "ref", "ref": "com.atproto.repo.strongRef" }, "subject": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
"createdAt": { "type": "string", "format": "datetime" }, "createdAt": { "type": "string", "format": "datetime" }
"via": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
} }
} }
} }

View File

@ -4,7 +4,7 @@
"defs": { "defs": {
"main": { "main": {
"type": "query", "type": "query",
"description": "Find posts matching search criteria, returning views of those posts. Note that this API endpoint may require authentication (eg, not public) for some service providers and implementations.", "description": "Find posts matching search criteria, returning views of those posts.",
"parameters": { "parameters": {
"type": "params", "type": "params",
"required": ["q"], "required": ["q"],

View File

@ -20,15 +20,7 @@
"maximum": 100, "maximum": 100,
"default": 50 "default": 50
}, },
"cursor": { "type": "string" }, "cursor": { "type": "string" }
"purposes": {
"type": "array",
"description": "Optional filter by list purpose. If not specified, all supported types are returned.",
"items": {
"type": "string",
"knownValues": ["modlist", "curatelist"]
}
}
} }
}, },
"output": { "output": {

View File

@ -1,65 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.graph.getListsWithMembership",
"defs": {
"main": {
"type": "query",
"description": "Enumerates the lists created by the session user, and includes membership information about `actor` in those lists. Only supports curation and moderation lists (no reference lists, used in starter packs). Requires auth.",
"parameters": {
"type": "params",
"required": ["actor"],
"properties": {
"actor": {
"type": "string",
"format": "at-identifier",
"description": "The account (actor) to check for membership."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": { "type": "string" },
"purposes": {
"type": "array",
"description": "Optional filter by list purpose. If not specified, all supported types are returned.",
"items": {
"type": "string",
"knownValues": ["modlist", "curatelist"]
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["listsWithMembership"],
"properties": {
"cursor": { "type": "string" },
"listsWithMembership": {
"type": "array",
"items": { "type": "ref", "ref": "#listWithMembership" }
}
}
}
}
},
"listWithMembership": {
"description": "A list and an optional list item indicating membership of a target user to that list.",
"type": "object",
"required": ["list"],
"properties": {
"list": {
"type": "ref",
"ref": "app.bsky.graph.defs#listView"
},
"listItem": {
"type": "ref",
"ref": "app.bsky.graph.defs#listItemView"
}
}
}
}
}

View File

@ -1,57 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.graph.getStarterPacksWithMembership",
"defs": {
"main": {
"type": "query",
"description": "Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth.",
"parameters": {
"type": "params",
"required": ["actor"],
"properties": {
"actor": {
"type": "string",
"format": "at-identifier",
"description": "The account (actor) to check for membership."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["starterPacksWithMembership"],
"properties": {
"cursor": { "type": "string" },
"starterPacksWithMembership": {
"type": "array",
"items": { "type": "ref", "ref": "#starterPackWithMembership" }
}
}
}
}
},
"starterPackWithMembership": {
"description": "A starter pack and an optional list item indicating membership of a target user to that starter pack.",
"type": "object",
"required": ["starterPack"],
"properties": {
"starterPack": {
"type": "ref",
"ref": "app.bsky.graph.defs#starterPackView"
},
"listItem": {
"type": "ref",
"ref": "app.bsky.graph.defs#listItemView"
}
}
}
}
}

View File

@ -1,22 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.notification.declaration",
"defs": {
"main": {
"type": "record",
"description": "A declaration of the user's choices related to notifications that can be produced by them.",
"key": "literal:self",
"record": {
"type": "object",
"required": ["allowSubscriptions"],
"properties": {
"allowSubscriptions": {
"type": "string",
"description": "A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'.",
"knownValues": ["followers", "mutuals", "none"]
}
}
}
}
}
}

View File

@ -1,88 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.notification.defs",
"defs": {
"recordDeleted": {
"type": "object",
"properties": {}
},
"chatPreference": {
"type": "object",
"required": ["include", "push"],
"properties": {
"include": { "type": "string", "knownValues": ["all", "accepted"] },
"push": { "type": "boolean" }
}
},
"filterablePreference": {
"type": "object",
"required": ["include", "list", "push"],
"properties": {
"include": { "type": "string", "knownValues": ["all", "follows"] },
"list": { "type": "boolean" },
"push": { "type": "boolean" }
}
},
"preference": {
"type": "object",
"required": ["list", "push"],
"properties": {
"list": { "type": "boolean" },
"push": { "type": "boolean" }
}
},
"preferences": {
"type": "object",
"required": [
"chat",
"follow",
"like",
"likeViaRepost",
"mention",
"quote",
"reply",
"repost",
"repostViaRepost",
"starterpackJoined",
"subscribedPost",
"unverified",
"verified"
],
"properties": {
"chat": { "type": "ref", "ref": "#chatPreference" },
"follow": { "type": "ref", "ref": "#filterablePreference" },
"like": { "type": "ref", "ref": "#filterablePreference" },
"likeViaRepost": { "type": "ref", "ref": "#filterablePreference" },
"mention": { "type": "ref", "ref": "#filterablePreference" },
"quote": { "type": "ref", "ref": "#filterablePreference" },
"reply": { "type": "ref", "ref": "#filterablePreference" },
"repost": { "type": "ref", "ref": "#filterablePreference" },
"repostViaRepost": { "type": "ref", "ref": "#filterablePreference" },
"starterpackJoined": { "type": "ref", "ref": "#preference" },
"subscribedPost": { "type": "ref", "ref": "#preference" },
"unverified": { "type": "ref", "ref": "#preference" },
"verified": { "type": "ref", "ref": "#preference" }
}
},
"activitySubscription": {
"type": "object",
"required": ["post", "reply"],
"properties": {
"post": { "type": "boolean" },
"reply": { "type": "boolean" }
}
},
"subjectActivitySubscription": {
"description": "Object used to store activity subscription data in stash.",
"type": "object",
"required": ["subject", "activitySubscription"],
"properties": {
"subject": { "type": "string", "format": "did" },
"activitySubscription": {
"type": "ref",
"ref": "#activitySubscription"
}
}
}
}
}

View File

@ -1,27 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.notification.getPreferences",
"defs": {
"main": {
"type": "query",
"description": "Get notification-related preferences for an account. Requires auth.",
"parameters": {
"type": "params",
"properties": {}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["preferences"],
"properties": {
"preferences": {
"type": "ref",
"ref": "app.bsky.notification.defs#preferences"
}
}
}
}
}
}
}

View File

@ -1,39 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.notification.listActivitySubscriptions",
"defs": {
"main": {
"type": "query",
"description": "Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth.",
"parameters": {
"type": "params",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
},
"cursor": { "type": "string" }
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["subscriptions"],
"properties": {
"cursor": { "type": "string" },
"subscriptions": {
"type": "array",
"items": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileView"
}
}
}
}
}
}
}
}

View File

@ -61,7 +61,7 @@
"author": { "type": "ref", "ref": "app.bsky.actor.defs#profileView" }, "author": { "type": "ref", "ref": "app.bsky.actor.defs#profileView" },
"reason": { "reason": {
"type": "string", "type": "string",
"description": "The reason why this notification was delivered - e.g. your post was liked, or you received a new follower.", "description": "Expected values are 'like', 'repost', 'follow', 'mention', 'reply', 'quote', and 'starterpack-joined'.",
"knownValues": [ "knownValues": [
"like", "like",
"repost", "repost",
@ -69,12 +69,7 @@
"mention", "mention",
"reply", "reply",
"quote", "quote",
"starterpack-joined", "starterpack-joined"
"verified",
"unverified",
"like-via-repost",
"repost-via-repost",
"subscribed-post"
] ]
}, },
"reasonSubject": { "type": "string", "format": "at-uri" }, "reasonSubject": { "type": "string", "format": "at-uri" },

View File

@ -1,38 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.notification.putActivitySubscription",
"defs": {
"main": {
"type": "procedure",
"description": "Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["subject", "activitySubscription"],
"properties": {
"subject": { "type": "string", "format": "did" },
"activitySubscription": {
"type": "ref",
"ref": "app.bsky.notification.defs#activitySubscription"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["subject"],
"properties": {
"subject": { "type": "string", "format": "did" },
"activitySubscription": {
"type": "ref",
"ref": "app.bsky.notification.defs#activitySubscription"
}
}
}
}
}
}
}

View File

@ -1,83 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.notification.putPreferencesV2",
"defs": {
"main": {
"type": "procedure",
"description": "Set notification-related preferences for an account. Requires auth.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {
"chat": {
"type": "ref",
"ref": "app.bsky.notification.defs#chatPreference"
},
"follow": {
"type": "ref",
"ref": "app.bsky.notification.defs#filterablePreference"
},
"like": {
"type": "ref",
"ref": "app.bsky.notification.defs#filterablePreference"
},
"likeViaRepost": {
"type": "ref",
"ref": "app.bsky.notification.defs#filterablePreference"
},
"mention": {
"type": "ref",
"ref": "app.bsky.notification.defs#filterablePreference"
},
"quote": {
"type": "ref",
"ref": "app.bsky.notification.defs#filterablePreference"
},
"reply": {
"type": "ref",
"ref": "app.bsky.notification.defs#filterablePreference"
},
"repost": {
"type": "ref",
"ref": "app.bsky.notification.defs#filterablePreference"
},
"repostViaRepost": {
"type": "ref",
"ref": "app.bsky.notification.defs#filterablePreference"
},
"starterpackJoined": {
"type": "ref",
"ref": "app.bsky.notification.defs#preference"
},
"subscribedPost": {
"type": "ref",
"ref": "app.bsky.notification.defs#preference"
},
"unverified": {
"type": "ref",
"ref": "app.bsky.notification.defs#preference"
},
"verified": {
"type": "ref",
"ref": "app.bsky.notification.defs#preference"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["preferences"],
"properties": {
"preferences": {
"type": "ref",
"ref": "app.bsky.notification.defs#preferences"
}
}
}
}
}
}
}

View File

@ -17,11 +17,7 @@
"type": "string", "type": "string",
"knownValues": ["ios", "android", "web"] "knownValues": ["ios", "android", "web"]
}, },
"appId": { "type": "string" }, "appId": { "type": "string" }
"ageRestricted": {
"type": "boolean",
"description": "Set to true when the actor is age restricted"
}
} }
} }
} }

View File

@ -1,26 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.notification.unregisterPush",
"defs": {
"main": {
"type": "procedure",
"description": "The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["serviceDid", "token", "platform", "appId"],
"properties": {
"serviceDid": { "type": "string", "format": "did" },
"token": { "type": "string" },
"platform": {
"type": "string",
"knownValues": ["ios", "android", "web"]
},
"appId": { "type": "string" }
}
}
}
}
}
}

View File

@ -86,113 +86,6 @@
} }
} }
} }
},
"threadItemPost": {
"type": "object",
"required": [
"post",
"moreParents",
"moreReplies",
"opThread",
"hiddenByThreadgate",
"mutedByViewer"
],
"properties": {
"post": { "type": "ref", "ref": "app.bsky.feed.defs#postView" },
"moreParents": {
"type": "boolean",
"description": "This post has more parents that were not present in the response. This is just a boolean, without the number of parents."
},
"moreReplies": {
"type": "integer",
"description": "This post has more replies that were not present in the response. This is a numeric value, which is best-effort and might not be accurate."
},
"opThread": {
"type": "boolean",
"description": "This post is part of a contiguous thread by the OP from the thread root. Many different OP threads can happen in the same thread."
},
"hiddenByThreadgate": {
"type": "boolean",
"description": "The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread."
},
"mutedByViewer": {
"type": "boolean",
"description": "This is by an account muted by the viewer requesting it."
}
}
},
"threadItemNoUnauthenticated": {
"type": "object",
"properties": {}
},
"threadItemNotFound": {
"type": "object",
"properties": {}
},
"threadItemBlocked": {
"type": "object",
"required": ["author"],
"properties": {
"author": { "type": "ref", "ref": "app.bsky.feed.defs#blockedAuthor" }
}
},
"ageAssuranceState": {
"type": "object",
"description": "The computed state of the age assurance process, returned to the user in question on certain authenticated requests.",
"required": ["status"],
"properties": {
"lastInitiatedAt": {
"type": "string",
"format": "datetime",
"description": "The timestamp when this state was last updated."
},
"status": {
"type": "string",
"description": "The status of the age assurance process.",
"knownValues": ["unknown", "pending", "assured", "blocked"]
}
}
},
"ageAssuranceEvent": {
"type": "object",
"description": "Object used to store age assurance data in stash.",
"required": ["createdAt", "status", "attemptId"],
"properties": {
"createdAt": {
"type": "string",
"format": "datetime",
"description": "The date and time of this write operation."
},
"status": {
"type": "string",
"description": "The status of the age assurance process.",
"knownValues": ["unknown", "pending", "assured"]
},
"attemptId": {
"type": "string",
"description": "The unique identifier for this instance of the age assurance flow, in UUID format."
},
"email": {
"type": "string",
"description": "The email used for AA."
},
"initIp": {
"type": "string",
"description": "The IP address used when initiating the AA flow."
},
"initUa": {
"type": "string",
"description": "The user agent used when initiating the AA flow."
},
"completeIp": {
"type": "string",
"description": "The IP address used when completing the AA flow."
},
"completeUa": {
"type": "string",
"description": "The user agent used when completing the AA flow."
}
}
} }
} }
} }

View File

@ -1,17 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getAgeAssuranceState",
"defs": {
"main": {
"type": "query",
"description": "Returns the current state of the age assurance process for an account. This is used to check if the user has completed age assurance or if further action is required.",
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#ageAssuranceState"
}
}
}
}
}

View File

@ -11,24 +11,7 @@
"type": "object", "type": "object",
"required": [], "required": [],
"properties": { "properties": {
"checkEmailConfirmed": { "type": "boolean" }, "checkEmailConfirmed": { "type": "boolean" }
"liveNow": {
"type": "array",
"items": { "type": "ref", "ref": "#liveNowConfig" }
}
}
}
}
},
"liveNowConfig": {
"type": "object",
"required": ["did", "domains"],
"properties": {
"did": { "type": "string", "format": "did" },
"domains": {
"type": "array",
"items": {
"type": "string"
} }
} }
} }

View File

@ -1,61 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getPostThreadOtherV2",
"defs": {
"main": {
"type": "query",
"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.",
"parameters": {
"type": "params",
"required": ["anchor"],
"properties": {
"anchor": {
"type": "string",
"format": "at-uri",
"description": "Reference (AT-URI) to post record. This is the anchor post."
},
"prioritizeFollowedUsers": {
"type": "boolean",
"description": "Whether to prioritize posts from followed users. It only has effect when the user is authenticated.",
"default": false
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["thread"],
"properties": {
"thread": {
"type": "array",
"description": "A flat list of other thread items. The depth of each item is indicated by the depth property inside the item.",
"items": {
"type": "ref",
"ref": "#threadItem"
}
}
}
}
}
},
"threadItem": {
"type": "object",
"required": ["uri", "depth", "value"],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"depth": {
"type": "integer",
"description": "The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths."
},
"value": {
"type": "union",
"refs": ["app.bsky.unspecced.defs#threadItemPost"]
}
}
}
}
}

View File

@ -1,99 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.getPostThreadV2",
"defs": {
"main": {
"type": "query",
"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 posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests.",
"parameters": {
"type": "params",
"required": ["anchor"],
"properties": {
"anchor": {
"type": "string",
"format": "at-uri",
"description": "Reference (AT-URI) to post record. This is the anchor post, and the thread will be built around it. It can be any post in the tree, not necessarily a root post."
},
"above": {
"type": "boolean",
"description": "Whether to include parents above the anchor.",
"default": true
},
"below": {
"type": "integer",
"description": "How many levels of replies to include below the anchor.",
"default": 6,
"minimum": 0,
"maximum": 20
},
"branchingFactor": {
"type": "integer",
"description": "Maximum of replies to include at each level of the thread, except for the direct replies to the anchor, which are (NOTE: currently, during unspecced phase) all returned (NOTE: later they might be paginated).",
"default": 10,
"minimum": 0,
"maximum": 100
},
"prioritizeFollowedUsers": {
"type": "boolean",
"description": "Whether to prioritize posts from followed users. It only has effect when the user is authenticated.",
"default": false
},
"sort": {
"type": "string",
"description": "Sorting for the thread replies.",
"knownValues": ["newest", "oldest", "top"],
"default": "oldest"
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["thread", "hasOtherReplies"],
"properties": {
"thread": {
"type": "array",
"description": "A flat list of thread items. The depth of each item is indicated by the depth property inside the item.",
"items": {
"type": "ref",
"ref": "#threadItem"
}
},
"threadgate": {
"type": "ref",
"ref": "app.bsky.feed.defs#threadgateView"
},
"hasOtherReplies": {
"type": "boolean",
"description": "Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them."
}
}
}
}
},
"threadItem": {
"type": "object",
"required": ["uri", "depth", "value"],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"depth": {
"type": "integer",
"description": "The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths."
},
"value": {
"type": "union",
"refs": [
"app.bsky.unspecced.defs#threadItemPost",
"app.bsky.unspecced.defs#threadItemNoUnauthenticated",
"app.bsky.unspecced.defs#threadItemNotFound",
"app.bsky.unspecced.defs#threadItemBlocked"
]
}
}
}
}
}

View File

@ -1,43 +0,0 @@
{
"lexicon": 1,
"id": "app.bsky.unspecced.initAgeAssurance",
"defs": {
"main": {
"type": "procedure",
"description": "Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["email", "language", "countryCode"],
"properties": {
"email": {
"type": "string",
"description": "The user's email address to receive assurance instructions."
},
"language": {
"type": "string",
"description": "The user's preferred language for communication during the assurance process."
},
"countryCode": {
"type": "string",
"description": "An ISO 3166-1 alpha-2 code of the user's location."
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "app.bsky.unspecced.defs#ageAssuranceState"
}
},
"errors": [
{ "name": "InvalidEmail" },
{ "name": "DidTooLong" },
{ "name": "InvalidInitiation" }
]
}
}
}

View File

@ -25,11 +25,7 @@
}, },
"chatDisabled": { "chatDisabled": {
"type": "boolean", "type": "boolean",
"description": "Set to true when the actor cannot actively participate in conversations" "description": "Set to true when the actor cannot actively participate in converations"
},
"verification": {
"type": "ref",
"ref": "app.bsky.actor.defs#verificationState"
} }
} }
} }

View File

@ -28,10 +28,6 @@
"com.atproto.admin.defs#repoRef", "com.atproto.admin.defs#repoRef",
"com.atproto.repo.strongRef" "com.atproto.repo.strongRef"
] ]
},
"modTool": {
"type": "ref",
"ref": "#modTool"
} }
} }
} }
@ -70,21 +66,6 @@
} }
} }
} }
},
"modTool": {
"type": "object",
"description": "Moderation tool information for tracing the source of the action",
"required": ["name"],
"properties": {
"name": {
"type": "string",
"description": "Name/identifier of the source (e.g., 'bsky-app/android', 'bsky-web/chrome')"
},
"meta": {
"type": "unknown",
"description": "Additional arbitrary metadata about the source"
}
}
} }
} }
} }

View File

@ -11,89 +11,36 @@
"com.atproto.moderation.defs#reasonSexual", "com.atproto.moderation.defs#reasonSexual",
"com.atproto.moderation.defs#reasonRude", "com.atproto.moderation.defs#reasonRude",
"com.atproto.moderation.defs#reasonOther", "com.atproto.moderation.defs#reasonOther",
"com.atproto.moderation.defs#reasonAppeal", "com.atproto.moderation.defs#reasonAppeal"
"tools.ozone.report.defs#reasonAppeal",
"tools.ozone.report.defs#reasonViolenceAnimalWelfare",
"tools.ozone.report.defs#reasonViolenceThreats",
"tools.ozone.report.defs#reasonViolenceGraphicContent",
"tools.ozone.report.defs#reasonViolenceSelfHarm",
"tools.ozone.report.defs#reasonViolenceGlorification",
"tools.ozone.report.defs#reasonViolenceExtremistContent",
"tools.ozone.report.defs#reasonViolenceTrafficking",
"tools.ozone.report.defs#reasonViolenceOther",
"tools.ozone.report.defs#reasonSexualAbuseContent",
"tools.ozone.report.defs#reasonSexualNCII",
"tools.ozone.report.defs#reasonSexualSextortion",
"tools.ozone.report.defs#reasonSexualDeepfake",
"tools.ozone.report.defs#reasonSexualAnimal",
"tools.ozone.report.defs#reasonSexualUnlabeled",
"tools.ozone.report.defs#reasonSexualOther",
"tools.ozone.report.defs#reasonChildSafetyCSAM",
"tools.ozone.report.defs#reasonChildSafetyGroom",
"tools.ozone.report.defs#reasonChildSafetyMinorPrivacy",
"tools.ozone.report.defs#reasonChildSafetyEndangerment",
"tools.ozone.report.defs#reasonChildSafetyHarassment",
"tools.ozone.report.defs#reasonChildSafetyPromotion",
"tools.ozone.report.defs#reasonChildSafetyOther",
"tools.ozone.report.defs#reasonHarassmentTroll",
"tools.ozone.report.defs#reasonHarassmentTargeted",
"tools.ozone.report.defs#reasonHarassmentHateSpeech",
"tools.ozone.report.defs#reasonHarassmentDoxxing",
"tools.ozone.report.defs#reasonHarassmentOther",
"tools.ozone.report.defs#reasonMisleadingBot",
"tools.ozone.report.defs#reasonMisleadingImpersonation",
"tools.ozone.report.defs#reasonMisleadingSpam",
"tools.ozone.report.defs#reasonMisleadingScam",
"tools.ozone.report.defs#reasonMisleadingSyntheticContent",
"tools.ozone.report.defs#reasonMisleadingMisinformation",
"tools.ozone.report.defs#reasonMisleadingOther",
"tools.ozone.report.defs#reasonRuleSiteSecurity",
"tools.ozone.report.defs#reasonRuleStolenContent",
"tools.ozone.report.defs#reasonRuleProhibitedSales",
"tools.ozone.report.defs#reasonRuleBanEvasion",
"tools.ozone.report.defs#reasonRuleOther",
"tools.ozone.report.defs#reasonCivicElectoralProcess",
"tools.ozone.report.defs#reasonCivicDisclosure",
"tools.ozone.report.defs#reasonCivicInterference",
"tools.ozone.report.defs#reasonCivicMisinformation",
"tools.ozone.report.defs#reasonCivicImpersonation"
] ]
}, },
"reasonSpam": { "reasonSpam": {
"type": "token", "type": "token",
"description": "Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`." "description": "Spam: frequent unwanted promotion, replies, mentions"
}, },
"reasonViolation": { "reasonViolation": {
"type": "token", "type": "token",
"description": "Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`." "description": "Direct violation of server rules, laws, terms of service"
}, },
"reasonMisleading": { "reasonMisleading": {
"type": "token", "type": "token",
"description": "Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`." "description": "Misleading identity, affiliation, or content"
}, },
"reasonSexual": { "reasonSexual": {
"type": "token", "type": "token",
"description": "Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`." "description": "Unwanted or mislabeled sexual content"
}, },
"reasonRude": { "reasonRude": {
"type": "token", "type": "token",
"description": "Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`." "description": "Rude, harassing, explicit, or otherwise unwelcoming behavior"
}, },
"reasonOther": { "reasonOther": {
"type": "token", "type": "token",
"description": "Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`." "description": "Other: reports not falling under another report category"
}, },
"reasonAppeal": { "reasonAppeal": {
"type": "token", "type": "token",
"description": "Appeal a previously taken moderation action" "description": "Appeal: appeal a previously taken moderation action"
}, },
"subjectType": { "subjectType": {
"type": "string", "type": "string",

View File

@ -1,88 +0,0 @@
{
"lexicon": 1,
"id": "com.atproto.temp.checkHandleAvailability",
"defs": {
"main": {
"type": "query",
"description": "Checks whether the provided handle is available. If the handle is not available, available suggestions will be returned. Optional inputs will be used to generate suggestions.",
"parameters": {
"type": "params",
"required": ["handle"],
"properties": {
"handle": {
"type": "string",
"format": "handle",
"description": "Tentative handle. Will be checked for availability or used to build handle suggestions."
},
"email": {
"type": "string",
"description": "User-provided email. Might be used to build handle suggestions."
},
"birthDate": {
"type": "string",
"format": "datetime",
"description": "User-provided birth date. Might be used to build handle suggestions."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["handle", "result"],
"properties": {
"handle": {
"type": "string",
"format": "handle",
"description": "Echo of the input handle."
},
"result": {
"type": "union",
"refs": ["#resultAvailable", "#resultUnavailable"]
}
}
}
},
"errors": [
{
"name": "InvalidEmail",
"description": "An invalid email was provided."
}
]
},
"resultAvailable": {
"type": "object",
"description": "Indicates the provided handle is available.",
"properties": {}
},
"resultUnavailable": {
"type": "object",
"description": "Indicates the provided handle is unavailable and gives suggestions of available handles.",
"required": ["suggestions"],
"properties": {
"suggestions": {
"type": "array",
"description": "List of suggested handles based on the provided inputs.",
"items": {
"type": "ref",
"ref": "#suggestion"
}
}
}
},
"suggestion": {
"type": "object",
"required": ["handle", "method"],
"properties": {
"handle": {
"type": "string",
"format": "handle"
},
"method": {
"type": "string",
"description": "Method used to build this suggestion. Should be considered opaque to clients. Can be used for metrics."
}
}
}
}
}

View File

@ -1,39 +0,0 @@
{
"lexicon": 1,
"id": "com.atproto.temp.dereferenceScope",
"defs": {
"main": {
"type": "query",
"description": "Allows finding the oauth permission scope from a reference",
"parameters": {
"type": "params",
"required": ["scope"],
"properties": {
"scope": {
"type": "string",
"description": "The scope reference (starts with 'ref:')"
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["scope"],
"properties": {
"scope": {
"type": "string",
"description": "The full oauth permission scope"
}
}
}
},
"errors": [
{
"name": "InvalidScopeReference",
"description": "An invalid scope reference was provided."
}
]
}
}
}

View File

@ -1,23 +0,0 @@
{
"lexicon": 1,
"id": "com.atproto.temp.revokeAccountCredentials",
"defs": {
"main": {
"type": "procedure",
"description": "Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["account"],
"properties": {
"account": {
"type": "string",
"format": "at-identifier"
}
}
}
}
}
}
}

View File

@ -1,106 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.hosting.getAccountHistory",
"defs": {
"main": {
"type": "query",
"description": "Get account history, e.g. log of updated email addresses or other identity information.",
"parameters": {
"type": "params",
"required": ["did"],
"properties": {
"did": { "type": "string", "format": "did" },
"events": {
"type": "array",
"items": {
"type": "string",
"knownValues": [
"accountCreated",
"emailUpdated",
"emailConfirmed",
"passwordUpdated",
"handleUpdated"
]
}
},
"cursor": { "type": "string" },
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["events"],
"properties": {
"cursor": { "type": "string" },
"events": {
"type": "array",
"items": {
"type": "ref",
"ref": "#event"
}
}
}
}
}
},
"event": {
"type": "object",
"required": ["details", "createdBy", "createdAt"],
"properties": {
"details": {
"type": "union",
"refs": [
"#accountCreated",
"#emailUpdated",
"#emailConfirmed",
"#passwordUpdated",
"#handleUpdated"
]
},
"createdBy": { "type": "string" },
"createdAt": { "type": "string", "format": "datetime" }
}
},
"accountCreated": {
"type": "object",
"required": [],
"properties": {
"email": { "type": "string" },
"handle": { "type": "string", "format": "handle" }
}
},
"emailUpdated": {
"type": "object",
"required": ["email"],
"properties": {
"email": { "type": "string" }
}
},
"emailConfirmed": {
"type": "object",
"required": ["email"],
"properties": {
"email": { "type": "string" }
}
},
"passwordUpdated": {
"type": "object",
"required": [],
"properties": {}
},
"handleUpdated": {
"type": "object",
"required": ["handle"],
"properties": {
"handle": { "type": "string", "format": "handle" }
}
}
}
}

View File

@ -35,10 +35,7 @@
"#accountEvent", "#accountEvent",
"#identityEvent", "#identityEvent",
"#recordEvent", "#recordEvent",
"#modEventPriorityScore", "#modEventPriorityScore"
"#ageAssuranceEvent",
"#ageAssuranceOverrideEvent",
"#revokeAccountCredentialsEvent"
] ]
}, },
"subject": { "subject": {
@ -53,8 +50,7 @@
"createdBy": { "type": "string", "format": "did" }, "createdBy": { "type": "string", "format": "did" },
"createdAt": { "type": "string", "format": "datetime" }, "createdAt": { "type": "string", "format": "datetime" },
"creatorHandle": { "type": "string" }, "creatorHandle": { "type": "string" },
"subjectHandle": { "type": "string" }, "subjectHandle": { "type": "string" }
"modTool": { "type": "ref", "ref": "#modTool" }
} }
}, },
"modEventViewDetail": { "modEventViewDetail": {
@ -90,10 +86,7 @@
"#accountEvent", "#accountEvent",
"#identityEvent", "#identityEvent",
"#recordEvent", "#recordEvent",
"#modEventPriorityScore", "#modEventPriorityScore"
"#ageAssuranceEvent",
"#ageAssuranceOverrideEvent",
"#revokeAccountCredentialsEvent"
] ]
}, },
"subject": { "subject": {
@ -110,8 +103,7 @@
"items": { "type": "ref", "ref": "#blobView" } "items": { "type": "ref", "ref": "#blobView" }
}, },
"createdBy": { "type": "string", "format": "did" }, "createdBy": { "type": "string", "format": "did" },
"createdAt": { "type": "string", "format": "datetime" }, "createdAt": { "type": "string", "format": "datetime" }
"modTool": { "type": "ref", "ref": "#modTool" }
} }
}, },
"subjectStatusView": { "subjectStatusView": {
@ -123,8 +115,7 @@
"type": "union", "type": "union",
"refs": [ "refs": [
"com.atproto.admin.defs#repoRef", "com.atproto.admin.defs#repoRef",
"com.atproto.repo.strongRef", "com.atproto.repo.strongRef"
"chat.bsky.convo.defs#messageRef"
] ]
}, },
"hosting": { "hosting": {
@ -209,16 +200,6 @@
"description": "Statistics related to the record subjects authored by the subject's account", "description": "Statistics related to the record subjects authored by the subject's account",
"type": "ref", "type": "ref",
"ref": "#recordsStats" "ref": "#recordsStats"
},
"ageAssuranceState": {
"type": "string",
"description": "Current age assurance state of the subject.",
"knownValues": ["pending", "assured", "unknown", "reset", "blocked"]
},
"ageAssuranceUpdatedBy": {
"type": "string",
"description": "Whether or not the last successful update to age assurance was made by the user or admin.",
"knownValues": ["admin", "user"]
} }
} }
}, },
@ -452,70 +433,6 @@
} }
} }
}, },
"ageAssuranceEvent": {
"type": "object",
"description": "Age assurance info coming directly from users. Only works on DID subjects.",
"required": ["createdAt", "status", "attemptId"],
"properties": {
"createdAt": {
"type": "string",
"format": "datetime",
"description": "The date and time of this write operation."
},
"status": {
"type": "string",
"description": "The status of the age assurance process.",
"knownValues": ["unknown", "pending", "assured"]
},
"attemptId": {
"type": "string",
"description": "The unique identifier for this instance of the age assurance flow, in UUID format."
},
"initIp": {
"type": "string",
"description": "The IP address used when initiating the AA flow."
},
"initUa": {
"type": "string",
"description": "The user agent used when initiating the AA flow."
},
"completeIp": {
"type": "string",
"description": "The IP address used when completing the AA flow."
},
"completeUa": {
"type": "string",
"description": "The user agent used when completing the AA flow."
}
}
},
"ageAssuranceOverrideEvent": {
"type": "object",
"description": "Age assurance status override by moderators. Only works on DID subjects.",
"required": ["comment", "status"],
"properties": {
"status": {
"type": "string",
"description": "The status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state.",
"knownValues": ["assured", "reset", "blocked"]
},
"comment": {
"type": "string",
"description": "Comment describing the reason for the override."
}
}
},
"revokeAccountCredentialsEvent": {
"type": "object",
"description": "Account credentials revocation by moderators. Only works on DID subjects.",
"required": ["comment"],
"properties": {
"comment": {
"type": "string",
"description": "Comment describing the reason for the revocation."
}
}
},
"modEventAcknowledge": { "modEventAcknowledge": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -976,33 +893,6 @@
"description": "The total number of records labeled as a result of the user's reports." "description": "The total number of records labeled as a result of the user's reports."
} }
} }
},
"modTool": {
"type": "object",
"description": "Moderation tool information for tracing the source of the action",
"required": ["name"],
"properties": {
"name": {
"type": "string",
"description": "Name/identifier of the source (e.g., 'automod', 'ozone/workspace')"
},
"meta": {
"type": "unknown",
"description": "Additional arbitrary metadata about the source"
}
}
},
"timelineEventPlcCreate": {
"type": "token",
"description": "Moderation event timeline event for a PLC create operation"
},
"timelineEventPlcOperation": {
"type": "token",
"description": "Moderation event timeline event for generic PLC operation"
},
"timelineEventPlcTombstone": {
"type": "token",
"description": "Moderation event timeline event for a PLC tombstone operation"
} }
} }
} }

View File

@ -32,10 +32,7 @@
"tools.ozone.moderation.defs#accountEvent", "tools.ozone.moderation.defs#accountEvent",
"tools.ozone.moderation.defs#identityEvent", "tools.ozone.moderation.defs#identityEvent",
"tools.ozone.moderation.defs#recordEvent", "tools.ozone.moderation.defs#recordEvent",
"tools.ozone.moderation.defs#modEventPriorityScore", "tools.ozone.moderation.defs#modEventPriorityScore"
"tools.ozone.moderation.defs#ageAssuranceEvent",
"tools.ozone.moderation.defs#ageAssuranceOverrideEvent",
"tools.ozone.moderation.defs#revokeAccountCredentialsEvent"
] ]
}, },
"subject": { "subject": {
@ -47,23 +44,9 @@
}, },
"subjectBlobCids": { "subjectBlobCids": {
"type": "array", "type": "array",
"items": { "items": { "type": "string", "format": "cid" }
"type": "string",
"format": "cid"
}
}, },
"createdBy": { "createdBy": { "type": "string", "format": "did" }
"type": "string",
"format": "did"
},
"modTool": {
"type": "ref",
"ref": "tools.ozone.moderation.defs#modTool"
},
"externalId": {
"type": "string",
"description": "An optional external ID for the event, used to deduplicate events from external systems. Fails when an event of same type with the same external ID exists for the same subject."
}
} }
} }
}, },
@ -74,15 +57,7 @@
"ref": "tools.ozone.moderation.defs#modEventView" "ref": "tools.ozone.moderation.defs#modEventView"
} }
}, },
"errors": [ "errors": [{ "name": "SubjectHasAction" }]
{
"name": "SubjectHasAction"
},
{
"name": "DuplicateExternalId",
"description": "An event with the same external ID already exists for the subject."
}
]
} }
} }
} }

View File

@ -1,104 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.moderation.getAccountTimeline",
"defs": {
"main": {
"type": "query",
"description": "Get timeline of all available events of an account. This includes moderation events, account history and did history.",
"parameters": {
"type": "params",
"required": ["did"],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["timeline"],
"properties": {
"timeline": {
"type": "array",
"items": {
"type": "ref",
"ref": "#timelineItem"
}
}
}
}
},
"errors": [
{
"name": "RepoNotFound"
}
]
},
"timelineItem": {
"type": "object",
"required": ["day", "summary"],
"properties": {
"day": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "ref",
"ref": "#timelineItemSummary"
}
}
}
},
"timelineItemSummary": {
"type": "object",
"required": ["eventSubjectType", "eventType", "count"],
"properties": {
"eventSubjectType": {
"type": "string",
"knownValues": ["account", "record", "chat"]
},
"eventType": {
"type": "string",
"knownValues": [
"tools.ozone.moderation.defs#modEventTakedown",
"tools.ozone.moderation.defs#modEventReverseTakedown",
"tools.ozone.moderation.defs#modEventComment",
"tools.ozone.moderation.defs#modEventReport",
"tools.ozone.moderation.defs#modEventLabel",
"tools.ozone.moderation.defs#modEventAcknowledge",
"tools.ozone.moderation.defs#modEventEscalate",
"tools.ozone.moderation.defs#modEventMute",
"tools.ozone.moderation.defs#modEventUnmute",
"tools.ozone.moderation.defs#modEventMuteReporter",
"tools.ozone.moderation.defs#modEventUnmuteReporter",
"tools.ozone.moderation.defs#modEventEmail",
"tools.ozone.moderation.defs#modEventResolveAppeal",
"tools.ozone.moderation.defs#modEventDivert",
"tools.ozone.moderation.defs#modEventTag",
"tools.ozone.moderation.defs#accountEvent",
"tools.ozone.moderation.defs#identityEvent",
"tools.ozone.moderation.defs#recordEvent",
"tools.ozone.moderation.defs#modEventPriorityScore",
"tools.ozone.moderation.defs#revokeAccountCredentialsEvent",
"tools.ozone.moderation.defs#ageAssuranceEvent",
"tools.ozone.moderation.defs#ageAssuranceOverrideEvent",
"tools.ozone.moderation.defs#timelineEventPlcCreate",
"tools.ozone.moderation.defs#timelineEventPlcOperation",
"tools.ozone.moderation.defs#timelineEventPlcTombstone",
"tools.ozone.hosting.getAccountHistory#accountCreated",
"tools.ozone.hosting.getAccountHistory#emailConfirmed",
"tools.ozone.hosting.getAccountHistory#passwordUpdated",
"tools.ozone.hosting.getAccountHistory#handleUpdated"
]
},
"count": {
"type": "integer"
}
}
}
}
}

View File

@ -113,22 +113,6 @@
"description": "If specified, only events where the action policies match any of the given policies are returned" "description": "If specified, only events where the action policies match any of the given policies are returned"
} }
}, },
"modTool": {
"type": "array",
"items": {
"type": "string"
},
"description": "If specified, only events where the modTool name matches any of the given values are returned"
},
"batchId": {
"type": "string",
"description": "If specified, only events where the batchId matches the given value are returned"
},
"ageAssuranceState": {
"type": "string",
"description": "If specified, only events where the age assurance state matches the given value are returned",
"knownValues": ["pending", "assured", "unknown", "reset", "blocked"]
},
"cursor": { "cursor": {
"type": "string" "type": "string"
} }

View File

@ -182,11 +182,6 @@
"maximum": 100, "maximum": 100,
"type": "integer", "type": "integer",
"description": "If specified, only subjects that have priority score value above the given value will be returned." "description": "If specified, only subjects that have priority score value above the given value will be returned."
},
"ageAssuranceState": {
"type": "string",
"description": "If specified, only subjects with the given age assurance state will be returned.",
"knownValues": ["pending", "assured", "unknown", "reset", "blocked"]
} }
} }
}, },

View File

@ -1,249 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.report.defs",
"defs": {
"reasonType": {
"type": "string",
"knownValues": [
"tools.ozone.report.defs#reasonAppeal",
"tools.ozone.report.defs#reasonViolenceAnimalWelfare",
"tools.ozone.report.defs#reasonViolenceThreats",
"tools.ozone.report.defs#reasonViolenceGraphicContent",
"tools.ozone.report.defs#reasonViolenceSelfHarm",
"tools.ozone.report.defs#reasonViolenceGlorification",
"tools.ozone.report.defs#reasonViolenceExtremistContent",
"tools.ozone.report.defs#reasonViolenceTrafficking",
"tools.ozone.report.defs#reasonViolenceOther",
"tools.ozone.report.defs#reasonSexualAbuseContent",
"tools.ozone.report.defs#reasonSexualNCII",
"tools.ozone.report.defs#reasonSexualSextortion",
"tools.ozone.report.defs#reasonSexualDeepfake",
"tools.ozone.report.defs#reasonSexualAnimal",
"tools.ozone.report.defs#reasonSexualUnlabeled",
"tools.ozone.report.defs#reasonSexualOther",
"tools.ozone.report.defs#reasonChildSafetyCSAM",
"tools.ozone.report.defs#reasonChildSafetyGroom",
"tools.ozone.report.defs#reasonChildSafetyMinorPrivacy",
"tools.ozone.report.defs#reasonChildSafetyEndangerment",
"tools.ozone.report.defs#reasonChildSafetyHarassment",
"tools.ozone.report.defs#reasonChildSafetyPromotion",
"tools.ozone.report.defs#reasonChildSafetyOther",
"tools.ozone.report.defs#reasonHarassmentTroll",
"tools.ozone.report.defs#reasonHarassmentTargeted",
"tools.ozone.report.defs#reasonHarassmentHateSpeech",
"tools.ozone.report.defs#reasonHarassmentDoxxing",
"tools.ozone.report.defs#reasonHarassmentOther",
"tools.ozone.report.defs#reasonMisleadingBot",
"tools.ozone.report.defs#reasonMisleadingImpersonation",
"tools.ozone.report.defs#reasonMisleadingSpam",
"tools.ozone.report.defs#reasonMisleadingScam",
"tools.ozone.report.defs#reasonMisleadingSyntheticContent",
"tools.ozone.report.defs#reasonMisleadingMisinformation",
"tools.ozone.report.defs#reasonMisleadingOther",
"tools.ozone.report.defs#reasonRuleSiteSecurity",
"tools.ozone.report.defs#reasonRuleStolenContent",
"tools.ozone.report.defs#reasonRuleProhibitedSales",
"tools.ozone.report.defs#reasonRuleBanEvasion",
"tools.ozone.report.defs#reasonRuleOther",
"tools.ozone.report.defs#reasonCivicElectoralProcess",
"tools.ozone.report.defs#reasonCivicDisclosure",
"tools.ozone.report.defs#reasonCivicInterference",
"tools.ozone.report.defs#reasonCivicMisinformation",
"tools.ozone.report.defs#reasonCivicImpersonation"
]
},
"reasonAppeal": {
"type": "token",
"description": "Appeal a previously taken moderation action"
},
"reasonViolenceAnimalWelfare": {
"type": "token",
"description": "Animal welfare violations"
},
"reasonViolenceThreats": {
"type": "token",
"description": "Threats or incitement"
},
"reasonViolenceGraphicContent": {
"type": "token",
"description": "Graphic violent content"
},
"reasonViolenceSelfHarm": {
"type": "token",
"description": "Self harm"
},
"reasonViolenceGlorification": {
"type": "token",
"description": "Glorification of violence"
},
"reasonViolenceExtremistContent": {
"type": "token",
"description": "Extremist content. These reports will be sent only be sent to the application's Moderation Authority."
},
"reasonViolenceTrafficking": {
"type": "token",
"description": "Human trafficking"
},
"reasonViolenceOther": {
"type": "token",
"description": "Other violent content"
},
"reasonSexualAbuseContent": {
"type": "token",
"description": "Adult sexual abuse content"
},
"reasonSexualNCII": {
"type": "token",
"description": "Non-consensual intimate imagery"
},
"reasonSexualSextortion": {
"type": "token",
"description": "Sextortion"
},
"reasonSexualDeepfake": {
"type": "token",
"description": "Deepfake adult content"
},
"reasonSexualAnimal": {
"type": "token",
"description": "Animal sexual abuse"
},
"reasonSexualUnlabeled": {
"type": "token",
"description": "Unlabelled adult content"
},
"reasonSexualOther": {
"type": "token",
"description": "Other sexual violence content"
},
"reasonChildSafetyCSAM": {
"type": "token",
"description": "Child sexual abuse material (CSAM). These reports will be sent only be sent to the application's Moderation Authority."
},
"reasonChildSafetyGroom": {
"type": "token",
"description": "Grooming or predatory behavior. These reports will be sent only be sent to the application's Moderation Authority."
},
"reasonChildSafetyMinorPrivacy": {
"type": "token",
"description": "Privacy violation involving a minor"
},
"reasonChildSafetyEndangerment": {
"type": "token",
"description": "Child endangerment. These reports will be sent only be sent to the application's Moderation Authority."
},
"reasonChildSafetyHarassment": {
"type": "token",
"description": "Harassment or bullying of minors"
},
"reasonChildSafetyPromotion": {
"type": "token",
"description": "Promotion of child exploitation. These reports will be sent only be sent to the application's Moderation Authority."
},
"reasonChildSafetyOther": {
"type": "token",
"description": "Other child safety. These reports will be sent only be sent to the application's Moderation Authority."
},
"reasonHarassmentTroll": {
"type": "token",
"description": "Trolling"
},
"reasonHarassmentTargeted": {
"type": "token",
"description": "Targeted harassment"
},
"reasonHarassmentHateSpeech": {
"type": "token",
"description": "Hate speech"
},
"reasonHarassmentDoxxing": {
"type": "token",
"description": "Doxxing"
},
"reasonHarassmentOther": {
"type": "token",
"description": "Other harassing or hateful content"
},
"reasonMisleadingBot": {
"type": "token",
"description": "Fake account or bot"
},
"reasonMisleadingImpersonation": {
"type": "token",
"description": "Impersonation"
},
"reasonMisleadingSpam": {
"type": "token",
"description": "Spam"
},
"reasonMisleadingScam": {
"type": "token",
"description": "Scam"
},
"reasonMisleadingSyntheticContent": {
"type": "token",
"description": "Unlabelled gen-AI or synthetic content"
},
"reasonMisleadingMisinformation": {
"type": "token",
"description": "Harmful false claims"
},
"reasonMisleadingOther": {
"type": "token",
"description": "Other misleading content"
},
"reasonRuleSiteSecurity": {
"type": "token",
"description": "Hacking or system attacks"
},
"reasonRuleStolenContent": {
"type": "token",
"description": "Stolen content"
},
"reasonRuleProhibitedSales": {
"type": "token",
"description": "Promoting or selling prohibited items or services"
},
"reasonRuleBanEvasion": {
"type": "token",
"description": "Banned user returning"
},
"reasonRuleOther": {
"type": "token",
"description": "Other"
},
"reasonCivicElectoralProcess": {
"type": "token",
"description": "Electoral process violations"
},
"reasonCivicDisclosure": {
"type": "token",
"description": "Disclosure & transparency violations"
},
"reasonCivicInterference": {
"type": "token",
"description": "Voter intimidation or interference"
},
"reasonCivicMisinformation": {
"type": "token",
"description": "Election misinformation"
},
"reasonCivicImpersonation": {
"type": "token",
"description": "Impersonation of electoral officials/entities"
}
}
}

View File

@ -1,61 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.safelink.addRule",
"defs": {
"main": {
"type": "procedure",
"description": "Add a new URL safety rule",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["url", "pattern", "action", "reason"],
"properties": {
"url": {
"type": "string",
"description": "The URL or domain to apply the rule to"
},
"pattern": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#patternType"
},
"action": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#actionType"
},
"reason": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#reasonType"
},
"comment": {
"type": "string",
"description": "Optional comment about the decision"
},
"createdBy": {
"type": "string",
"format": "did",
"description": "Author DID. Only respected when using admin auth"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#event"
}
},
"errors": [
{
"name": "InvalidUrl",
"description": "The provided URL is invalid"
},
{
"name": "RuleAlreadyExists",
"description": "A rule for this URL/domain already exists"
}
]
}
}
}

View File

@ -1,125 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.safelink.defs",
"defs": {
"event": {
"type": "object",
"description": "An event for URL safety decisions",
"required": [
"id",
"eventType",
"url",
"pattern",
"action",
"reason",
"createdBy",
"createdAt"
],
"properties": {
"id": {
"type": "integer",
"description": "Auto-incrementing row ID"
},
"eventType": {
"type": "ref",
"ref": "#eventType"
},
"url": {
"type": "string",
"description": "The URL that this rule applies to"
},
"pattern": {
"type": "ref",
"ref": "#patternType"
},
"action": {
"type": "ref",
"ref": "#actionType"
},
"reason": {
"type": "ref",
"ref": "#reasonType"
},
"createdBy": {
"type": "string",
"format": "did",
"description": "DID of the user who created this rule"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"comment": {
"type": "string",
"description": "Optional comment about the decision"
}
}
},
"eventType": {
"type": "string",
"knownValues": ["addRule", "updateRule", "removeRule"]
},
"patternType": {
"type": "string",
"knownValues": ["domain", "url"]
},
"actionType": {
"type": "string",
"knownValues": ["block", "warn", "whitelist"]
},
"reasonType": {
"type": "string",
"knownValues": ["csam", "spam", "phishing", "none"]
},
"urlRule": {
"type": "object",
"description": "Input for creating a URL safety rule",
"required": [
"url",
"pattern",
"action",
"reason",
"createdBy",
"createdAt",
"updatedAt"
],
"properties": {
"url": {
"type": "string",
"description": "The URL or domain to apply the rule to"
},
"pattern": {
"type": "ref",
"ref": "#patternType"
},
"action": {
"type": "ref",
"ref": "#actionType"
},
"reason": {
"type": "ref",
"ref": "#reasonType"
},
"comment": {
"type": "string",
"description": "Optional comment about the decision"
},
"createdBy": {
"type": "string",
"format": "did",
"description": "DID of the user added the rule."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp when the rule was created"
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp when the rule was last updated"
}
}
}
}
}

View File

@ -1,66 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.safelink.queryEvents",
"defs": {
"main": {
"type": "procedure",
"description": "Query URL safety audit events",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {
"cursor": {
"type": "string",
"description": "Cursor for pagination"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum number of results to return"
},
"urls": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by specific URLs or domains"
},
"patternType": {
"type": "string",
"description": "Filter by pattern type"
},
"sortDirection": {
"type": "string",
"knownValues": ["asc", "desc"],
"default": "desc",
"description": "Sort direction"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["events"],
"properties": {
"cursor": {
"type": "string",
"description": "Next cursor for pagination. Only present if there are more results."
},
"events": {
"type": "array",
"items": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#event"
}
}
}
}
}
}
}
}

View File

@ -1,82 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.safelink.queryRules",
"defs": {
"main": {
"type": "procedure",
"description": "Query URL safety rules",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"properties": {
"cursor": {
"type": "string",
"description": "Cursor for pagination"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum number of results to return"
},
"urls": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by specific URLs or domains"
},
"patternType": {
"type": "string",
"description": "Filter by pattern type"
},
"actions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by action types"
},
"reason": {
"type": "string",
"description": "Filter by reason type"
},
"createdBy": {
"type": "string",
"format": "did",
"description": "Filter by rule creator"
},
"sortDirection": {
"type": "string",
"knownValues": ["asc", "desc"],
"default": "desc",
"description": "Sort direction"
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["rules"],
"properties": {
"cursor": {
"type": "string",
"description": "Next cursor for pagination. Only present if there are more results."
},
"rules": {
"type": "array",
"items": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#urlRule"
}
}
}
}
}
}
}
}

View File

@ -1,49 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.safelink.removeRule",
"defs": {
"main": {
"type": "procedure",
"description": "Remove an existing URL safety rule",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["url", "pattern"],
"properties": {
"url": {
"type": "string",
"description": "The URL or domain to remove the rule for"
},
"pattern": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#patternType"
},
"comment": {
"type": "string",
"description": "Optional comment about why the rule is being removed"
},
"createdBy": {
"type": "string",
"format": "did",
"description": "Optional DID of the user. Only respected when using admin auth."
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#event"
}
},
"errors": [
{
"name": "RuleNotFound",
"description": "No active rule found for this URL/domain"
}
]
}
}
}

View File

@ -1,57 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.safelink.updateRule",
"defs": {
"main": {
"type": "procedure",
"description": "Update an existing URL safety rule",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["url", "pattern", "action", "reason"],
"properties": {
"url": {
"type": "string",
"description": "The URL or domain to update the rule for"
},
"pattern": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#patternType"
},
"action": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#actionType"
},
"reason": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#reasonType"
},
"comment": {
"type": "string",
"description": "Optional comment about the update"
},
"createdBy": {
"type": "string",
"format": "did",
"description": "Optional DID to credit as the creator. Only respected for admin_token authentication."
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "ref",
"ref": "tools.ozone.safelink.defs#event"
}
},
"errors": [
{
"name": "RuleNotFound",
"description": "No active rule found for this URL/domain"
}
]
}
}
}

View File

@ -29,11 +29,6 @@
"viewer": { "viewer": {
"type": "ref", "type": "ref",
"ref": "#viewerConfig" "ref": "#viewerConfig"
},
"verifierDid": {
"type": "string",
"format": "did",
"description": "The did of the verifier used for verification."
} }
} }
} }
@ -56,8 +51,7 @@
"knownValues": [ "knownValues": [
"tools.ozone.team.defs#roleAdmin", "tools.ozone.team.defs#roleAdmin",
"tools.ozone.team.defs#roleModerator", "tools.ozone.team.defs#roleModerator",
"tools.ozone.team.defs#roleTriage", "tools.ozone.team.defs#roleTriage"
"tools.ozone.team.defs#roleVerifier"
] ]
} }
} }

View File

@ -42,8 +42,7 @@
"knownValues": [ "knownValues": [
"tools.ozone.team.defs#roleModerator", "tools.ozone.team.defs#roleModerator",
"tools.ozone.team.defs#roleTriage", "tools.ozone.team.defs#roleTriage",
"tools.ozone.team.defs#roleAdmin", "tools.ozone.team.defs#roleAdmin"
"tools.ozone.team.defs#roleVerifier"
] ]
}, },
"scope": { "scope": {

View File

@ -31,7 +31,6 @@
"knownValues": [ "knownValues": [
"tools.ozone.team.defs#roleModerator", "tools.ozone.team.defs#roleModerator",
"tools.ozone.team.defs#roleTriage", "tools.ozone.team.defs#roleTriage",
"tools.ozone.team.defs#roleVerifier",
"tools.ozone.team.defs#roleAdmin" "tools.ozone.team.defs#roleAdmin"
] ]
} }

View File

@ -17,7 +17,6 @@
"knownValues": [ "knownValues": [
"tools.ozone.team.defs#roleAdmin", "tools.ozone.team.defs#roleAdmin",
"tools.ozone.team.defs#roleModerator", "tools.ozone.team.defs#roleModerator",
"tools.ozone.team.defs#roleVerifier",
"tools.ozone.team.defs#roleTriage" "tools.ozone.team.defs#roleTriage"
] ]
} }

View File

@ -17,12 +17,7 @@
"lastUpdatedBy": { "type": "string" }, "lastUpdatedBy": { "type": "string" },
"role": { "role": {
"type": "string", "type": "string",
"knownValues": [ "knownValues": ["#roleAdmin", "#roleModerator", "#roleTriage"]
"#roleAdmin",
"#roleModerator",
"#roleTriage",
"#roleVerifier"
]
} }
} }
}, },
@ -37,10 +32,6 @@
"roleTriage": { "roleTriage": {
"type": "token", "type": "token",
"description": "Triage role. Mostly intended for monitoring and escalating issues." "description": "Triage role. Mostly intended for monitoring and escalating issues."
},
"roleVerifier": {
"type": "token",
"description": "Verifier role. Only allowed to issue verifications."
} }
} }
} }

View File

@ -18,7 +18,6 @@
"knownValues": [ "knownValues": [
"tools.ozone.team.defs#roleAdmin", "tools.ozone.team.defs#roleAdmin",
"tools.ozone.team.defs#roleModerator", "tools.ozone.team.defs#roleModerator",
"tools.ozone.team.defs#roleVerifier",
"tools.ozone.team.defs#roleTriage" "tools.ozone.team.defs#roleTriage"
] ]
} }

View File

@ -1,85 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.verification.defs",
"defs": {
"verificationView": {
"type": "object",
"description": "Verification data for the associated subject.",
"required": [
"issuer",
"uri",
"subject",
"handle",
"displayName",
"createdAt"
],
"properties": {
"issuer": {
"type": "string",
"description": "The user who issued this verification.",
"format": "did"
},
"uri": {
"type": "string",
"description": "The AT-URI of the verification record.",
"format": "at-uri"
},
"subject": {
"type": "string",
"format": "did",
"description": "The subject of the verification."
},
"handle": {
"type": "string",
"description": "Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying.",
"format": "handle"
},
"displayName": {
"type": "string",
"description": "Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying."
},
"createdAt": {
"type": "string",
"description": "Timestamp when the verification was created.",
"format": "datetime"
},
"revokeReason": {
"type": "string",
"description": "Describes the reason for revocation, also indicating that the verification is no longer valid."
},
"revokedAt": {
"type": "string",
"description": "Timestamp when the verification was revoked.",
"format": "datetime"
},
"revokedBy": {
"type": "string",
"description": "The user who revoked this verification.",
"format": "did"
},
"subjectProfile": {
"type": "union",
"refs": []
},
"issuerProfile": {
"type": "union",
"refs": []
},
"subjectRepo": {
"type": "union",
"refs": [
"tools.ozone.moderation.defs#repoViewDetail",
"tools.ozone.moderation.defs#repoViewNotFound"
]
},
"issuerRepo": {
"type": "union",
"refs": [
"tools.ozone.moderation.defs#repoViewDetail",
"tools.ozone.moderation.defs#repoViewNotFound"
]
}
}
}
}
}

View File

@ -1,92 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.verification.grantVerifications",
"defs": {
"main": {
"type": "procedure",
"description": "Grant verifications to multiple subjects. Allows batch processing of up to 100 verifications at once.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["verifications"],
"properties": {
"verifications": {
"type": "array",
"description": "Array of verification requests to process",
"maxLength": 100,
"items": {
"type": "ref",
"ref": "#verificationInput"
}
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["verifications", "failedVerifications"],
"properties": {
"verifications": {
"type": "array",
"items": {
"type": "ref",
"ref": "tools.ozone.verification.defs#verificationView"
}
},
"failedVerifications": {
"type": "array",
"items": {
"type": "ref",
"ref": "#grantError"
}
}
}
}
}
},
"verificationInput": {
"type": "object",
"required": ["subject", "handle", "displayName"],
"properties": {
"subject": {
"type": "string",
"description": "The did of the subject being verified",
"format": "did"
},
"handle": {
"type": "string",
"description": "Handle of the subject the verification applies to at the moment of verifying.",
"format": "handle"
},
"displayName": {
"type": "string",
"description": "Display name of the subject the verification applies to at the moment of verifying."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp for verification record. Defaults to current time when not specified."
}
}
},
"grantError": {
"type": "object",
"description": "Error object for failed verifications.",
"required": ["error", "subject"],
"properties": {
"error": {
"type": "string",
"description": "Error message describing the reason for failure."
},
"subject": {
"type": "string",
"description": "The did of the subject being verified",
"format": "did"
}
}
}
}
}

View File

@ -1,83 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.verification.listVerifications",
"defs": {
"main": {
"type": "query",
"description": "List verifications",
"parameters": {
"type": "params",
"properties": {
"cursor": {
"type": "string",
"description": "Pagination cursor"
},
"limit": {
"type": "integer",
"description": "Maximum number of results to return",
"minimum": 1,
"maximum": 100,
"default": 50
},
"createdAfter": {
"type": "string",
"format": "datetime",
"description": "Filter to verifications created after this timestamp"
},
"createdBefore": {
"type": "string",
"format": "datetime",
"description": "Filter to verifications created before this timestamp"
},
"issuers": {
"type": "array",
"maxLength": 100,
"description": "Filter to verifications from specific issuers",
"items": {
"type": "string",
"format": "did"
}
},
"subjects": {
"type": "array",
"description": "Filter to specific verified DIDs",
"maxLength": 100,
"items": {
"type": "string",
"format": "did"
}
},
"sortDirection": {
"type": "string",
"description": "Sort direction for creation date",
"enum": ["asc", "desc"],
"default": "desc"
},
"isRevoked": {
"type": "boolean",
"description": "Filter to verifications that are revoked or not. By default, includes both."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["verifications"],
"properties": {
"cursor": {
"type": "string"
},
"verifications": {
"type": "array",
"items": {
"type": "ref",
"ref": "tools.ozone.verification.defs#verificationView"
}
}
}
}
}
}
}
}

View File

@ -1,75 +0,0 @@
{
"lexicon": 1,
"id": "tools.ozone.verification.revokeVerifications",
"defs": {
"main": {
"type": "procedure",
"description": "Revoke previously granted verifications in batches of up to 100.",
"input": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["uris"],
"properties": {
"uris": {
"type": "array",
"description": "Array of verification record uris to revoke",
"maxLength": 100,
"items": {
"type": "string",
"description": "The AT-URI of the verification record to revoke.",
"format": "at-uri"
}
},
"revokeReason": {
"type": "string",
"description": "Reason for revoking the verification. This is optional and can be omitted if not needed.",
"maxLength": 1000
}
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": ["revokedVerifications", "failedRevocations"],
"properties": {
"revokedVerifications": {
"type": "array",
"description": "List of verification uris successfully revoked",
"items": {
"type": "string",
"format": "at-uri"
}
},
"failedRevocations": {
"type": "array",
"description": "List of verification uris that couldn't be revoked, including failure reasons",
"items": {
"type": "ref",
"ref": "#revokeError"
}
}
}
}
}
},
"revokeError": {
"type": "object",
"description": "Error object for failed revocations",
"required": ["uri", "error"],
"properties": {
"uri": {
"type": "string",
"description": "The AT-URI of the verification record that failed to revoke.",
"format": "at-uri"
},
"error": {
"type": "string",
"description": "Description of the error that occurred during revocation."
}
}
}
}
}

View File

@ -2,7 +2,7 @@
"name": "atp", "name": "atp",
"version": "0.0.1", "version": "0.0.1",
"repository": "git@github.com:bluesky-social/atproto.git", "repository": "git@github.com:bluesky-social/atproto.git",
"author": "Bluesky Social PBC <hello@blueskyweb.xyz>", "author": "Bluesky PBC <hello@blueskyweb.xyz>",
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"engines": { "engines": {
@ -22,7 +22,6 @@
"precodegen": "pnpm run --recursive --stream --filter '@atproto/lex-cli...' build --force", "precodegen": "pnpm run --recursive --stream --filter '@atproto/lex-cli...' build --force",
"codegen": "pnpm run --sort --recursive --stream --parallel codegen", "codegen": "pnpm run --sort --recursive --stream --parallel codegen",
"build": "pnpm run --sort --recursive --stream '/^(build|build:.+)$/'", "build": "pnpm run --sort --recursive --stream '/^(build|build:.+)$/'",
"i18n": "pnpm run --parallel i18n:extract",
"dev": "NODE_ENV=development pnpm run --recursive --parallel --stream '/^(dev|dev:.+)$/'", "dev": "NODE_ENV=development pnpm run --recursive --parallel --stream '/^(dev|dev:.+)$/'",
"dev:tsc": "tsc --build tsconfig.json --preserveWatchOutput --watch", "dev:tsc": "tsc --build tsconfig.json --preserveWatchOutput --watch",
"test": "LOG_ENABLED=false ./packages/dev-infra/with-test-redis-and-db.sh pnpm test --stream --recursive", "test": "LOG_ENABLED=false ./packages/dev-infra/with-test-redis-and-db.sh pnpm test --stream --recursive",
@ -54,12 +53,7 @@
"prettier": "^3.2.5", "prettier": "^3.2.5",
"prettier-config-standard": "^7.0.0", "prettier-config-standard": "^7.0.0",
"prettier-plugin-tailwindcss": "^0.6.11", "prettier-plugin-tailwindcss": "^0.6.11",
"typescript": "^5.8.3" "typescript": "^5.8.2"
},
"pnpm": {
"overrides": {
"cookie": "^0.7.2"
}
}, },
"workspaces": { "workspaces": {
"packages": [ "packages": [

View File

@ -1,262 +1,5 @@
# @atproto/api # @atproto/api
## 0.16.9
### Patch Changes
- [#4189](https://github.com/bluesky-social/atproto/pull/4189) [`ff30786af`](https://github.com/bluesky-social/atproto/commit/ff30786af6f72ad6506939bfca01a3f55a096c1c) Thanks [@foysalit](https://github.com/foysalit)! - Add revoke credentials moderation event type to lexicons
## 0.16.8
### Patch Changes
- [#3881](https://github.com/bluesky-social/atproto/pull/3881) [`a5b20f021`](https://github.com/bluesky-social/atproto/commit/a5b20f0218bd13e3c5d7681de2263dcc850b7523) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Add expanded moderation report reasons as outlined in
[RFC-0009](https://github.com/bluesky-social/proposals/tree/main/0009-mod-report-granularity)
- Updated dependencies [[`055a413fb`](https://github.com/bluesky-social/atproto/commit/055a413fba4fab510ec899377154f1204ab12099)]:
- @atproto/common-web@0.4.3
- @atproto/lexicon@0.5.1
- @atproto/xrpc@0.7.5
## 0.16.7
### Patch Changes
- [#4164](https://github.com/bluesky-social/atproto/pull/4164) [`09717f29a`](https://github.com/bluesky-social/atproto/commit/09717f29ac7ca742c9c3310980dbe4d112b7597f) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add bookmarks lexicons
## 0.16.6
### Patch Changes
- Updated dependencies [[`f9dc9aa4c`](https://github.com/bluesky-social/atproto/commit/f9dc9aa4c9eaf2f82d140fbf011a9015e7f1a00d), [`f9dc9aa4c`](https://github.com/bluesky-social/atproto/commit/f9dc9aa4c9eaf2f82d140fbf011a9015e7f1a00d), [`f9dc9aa4c`](https://github.com/bluesky-social/atproto/commit/f9dc9aa4c9eaf2f82d140fbf011a9015e7f1a00d), [`f9dc9aa4c`](https://github.com/bluesky-social/atproto/commit/f9dc9aa4c9eaf2f82d140fbf011a9015e7f1a00d)]:
- @atproto/lexicon@0.5.0
- @atproto/syntax@0.4.1
- @atproto/xrpc@0.7.4
## 0.16.5
### Patch Changes
- [#4142](https://github.com/bluesky-social/atproto/pull/4142) [`66dbf8db6`](https://github.com/bluesky-social/atproto/commit/66dbf8db6dd9defeee140accd2e7b25d13feb8b6) Thanks [@DavidBuchanan314](https://github.com/DavidBuchanan314)! - add com.atproto.temp.revokeAccountCredentials lexicon schema
## 0.16.4
### Patch Changes
- Updated dependencies [[`2104d9033`](https://github.com/bluesky-social/atproto/commit/2104d9033e2e1a3a7b821c1f0c5c8ffac5832d59)]:
- @atproto/lexicon@0.4.14
- @atproto/xrpc@0.7.3
## 0.16.3
### Patch Changes
- [#4109](https://github.com/bluesky-social/atproto/pull/4109) [`3156ddf61`](https://github.com/bluesky-social/atproto/commit/3156ddf61519fede9ed148478f082184a1e3242e) Thanks [@foysalit](https://github.com/foysalit)! - Add batchId filter to tools.ozone.moderation.queryEvents endpoint
- Updated dependencies [[`331a356ce`](https://github.com/bluesky-social/atproto/commit/331a356ce27ff1d0b24747b0c16f3b54b07a0a12)]:
- @atproto/lexicon@0.4.13
- @atproto/xrpc@0.7.2
## 0.16.2
### Patch Changes
- [#4081](https://github.com/bluesky-social/atproto/pull/4081) [`c370d933b`](https://github.com/bluesky-social/atproto/commit/c370d933b76b4e15b83a82b40d1b6a32bd54add6) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Adds `purpose` filtering to `app.bsky.graph.getLists`.
Adds `app.bsky.graph.getListsWithMembership`.
Adds `app.bsky.graph.getStarterPacksWithMembership`.
## 0.16.1
### Patch Changes
- [#3927](https://github.com/bluesky-social/atproto/pull/3927) [`171efadb4`](https://github.com/bluesky-social/atproto/commit/171efadb49f842aa8ff3bf9d790caa6e0e0456ef) Thanks [@foysalit](https://github.com/foysalit)! - Introduces ozone event timeline lexicons
## 0.16.0
### Minor Changes
- [#4072](https://github.com/bluesky-social/atproto/pull/4072) [`9751eebd7`](https://github.com/bluesky-social/atproto/commit/9751eebd718066984a91046b63e410caecd64022) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Remove app.bsky.unspecced.checkHandleAvailability, add com.atproto.temp.checkHandleAvailability
## 0.15.27
### Patch Changes
- [#4058](https://github.com/bluesky-social/atproto/pull/4058) [`8787fd9de`](https://github.com/bluesky-social/atproto/commit/8787fd9dea769716412c9883e355cd496664bc6e) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Only allow initiating age assurance flow from certain states, return `InvalidInitiation` error if violated.
- [#4049](https://github.com/bluesky-social/atproto/pull/4049) [`dc84906c8`](https://github.com/bluesky-social/atproto/commit/dc84906c865e8a97939a909dd3f75decde538363) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - app.bsky.unspecced.checkHandleAvailability lexicon
## 0.15.26
### Patch Changes
- [#4041](https://github.com/bluesky-social/atproto/pull/4041) [`083566ddf`](https://github.com/bluesky-social/atproto/commit/083566ddfc3c9263423ebd5e59bfdbfe7b091c82) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add `unregisterPush` API
- [#4048](https://github.com/bluesky-social/atproto/pull/4048) [`3b356c509`](https://github.com/bluesky-social/atproto/commit/3b356c5096a269f1be6c4e69bdee7f5d14eb5d7e) Thanks [@foysalit](https://github.com/foysalit)! - Add externalId to ozone events for deduping events per subject and event type
## 0.15.25
### Patch Changes
- [#4028](https://github.com/bluesky-social/atproto/pull/4028) [`88c136427`](https://github.com/bluesky-social/atproto/commit/88c136427451a20d21812a1aa88a70cf21904138) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Age assurance compliance
## 0.15.24
### Patch Changes
- [#4034](https://github.com/bluesky-social/atproto/pull/4034) [`34d7a0846`](https://github.com/bluesky-social/atproto/commit/34d7a0846bb14bb36a8cc2747fb7ce73005e59d1) Thanks [@foysalit](https://github.com/foysalit)! - Add age assurance event types to ozone lexicons
- Updated dependencies [[`8ef976d38`](https://github.com/bluesky-social/atproto/commit/8ef976d3852df4bfa376e515e131cc0810a42f20)]:
- @atproto/lexicon@0.4.12
- @atproto/xrpc@0.7.1
## 0.15.23
### Patch Changes
- [#3991](https://github.com/bluesky-social/atproto/pull/3991) [`0c0381a2b`](https://github.com/bluesky-social/atproto/commit/0c0381a2bb9b9dc14ca6c1c8c4a6b966f0d516e8) Thanks [@foysalit](https://github.com/foysalit)! - Add modTool parameter to ozone events
## 0.15.22
### Patch Changes
- [#3945](https://github.com/bluesky-social/atproto/pull/3945) [`02c358d0c`](https://github.com/bluesky-social/atproto/commit/02c358d0ca280922c20da5be1e23b4aa9e90a30b) Thanks [@foysalit](https://github.com/foysalit)! - Add safelink module in ozone
## 0.15.21
### Patch Changes
- [#4010](https://github.com/bluesky-social/atproto/pull/4010) [`d344723a1`](https://github.com/bluesky-social/atproto/commit/d344723a1018b2436b5453526397936bd587a2e2) Thanks [@mozzius](https://github.com/mozzius)! - Loosen constraints for saved feed preferences
## 0.15.20
### Patch Changes
- [#4005](https://github.com/bluesky-social/atproto/pull/4005) [`bb65f7a6e`](https://github.com/bluesky-social/atproto/commit/bb65f7a6e22ceedb57c74a18cf0539c1dd04c0a7) Thanks [@mozzius](https://github.com/mozzius)! - add `subscribed-post` notification reason
## 0.15.19
### Patch Changes
- [#3997](https://github.com/bluesky-social/atproto/pull/3997) [`376778a92`](https://github.com/bluesky-social/atproto/commit/376778a92f08fb6709c4cde736bfaca7393a72e1) Thanks [@mozzius](https://github.com/mozzius)! - Add put method for AppBskyNotificationDeclarationRecord
## 0.15.18
### Patch Changes
- [#3995](https://github.com/bluesky-social/atproto/pull/3995) [`e3e31b2b9`](https://github.com/bluesky-social/atproto/commit/e3e31b2b9bf8c4de6b2d7fa992c3b3795686ea72) Thanks [@mozzius](https://github.com/mozzius)! - Add put method to record utility classes
## 0.15.17
### Patch Changes
- [#3990](https://github.com/bluesky-social/atproto/pull/3990) [`6cd120206`](https://github.com/bluesky-social/atproto/commit/6cd12020657bfb5f87e97cd16e4abb379b64f60b) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add activity subscription lexicons
## 0.15.16
### Patch Changes
- [#3966](https://github.com/bluesky-social/atproto/pull/3966) [`97ef11657`](https://github.com/bluesky-social/atproto/commit/97ef116571909c95713017bcd7b621c8afbc90ef) Thanks [@mozzius](https://github.com/mozzius)! - Rename notification preference lexicon "filter" key to "include"
## 0.15.15
### Patch Changes
- [#2934](https://github.com/bluesky-social/atproto/pull/2934) [`7f1316748`](https://github.com/bluesky-social/atproto/commit/7f1316748dedb512ae739ad51b95644baa39fe80) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Fix bug where fuzzy matching mute words was over-zealous e.g. `Andor` matching `and/or`.
- [#2934](https://github.com/bluesky-social/atproto/pull/2934) [`7f1316748`](https://github.com/bluesky-social/atproto/commit/7f1316748dedb512ae739ad51b95644baa39fe80) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Updates mute word matching to include a `matches: MuteWordMatch[]` property on the `muted-word` `cause` type returned as part of a `ModerationDecision`.
## 0.15.14
### Patch Changes
- [#3901](https://github.com/bluesky-social/atproto/pull/3901) [`a48671e73`](https://github.com/bluesky-social/atproto/commit/a48671e730681f692a88053e8f137bd9e2aed5f1) Thanks [@mozzius](https://github.com/mozzius)! - Add notification preferences V2 lexicons
## 0.15.13
### Patch Changes
- [#3929](https://github.com/bluesky-social/atproto/pull/3929) [`c6eb8a12e`](https://github.com/bluesky-social/atproto/commit/c6eb8a12e291c88fea79da447f9da8608d02300d) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Rename `getPostThreadHiddenV2` to `getPostThreadOtherV2` to better reflect the intent of the API.
## 0.15.12
### Patch Changes
- [#3912](https://github.com/bluesky-social/atproto/pull/3912) [`a5cd018bd`](https://github.com/bluesky-social/atproto/commit/a5cd018bd5f237221902ab1b6956b46233c92187) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Unify `getPostThreadV2` and `getPostThreadHiddenV2` responses under `app.bsky.unspecced.defs` namespace and a single interface via `threadItemPost`.
## 0.15.11
### Patch Changes
- [#3910](https://github.com/bluesky-social/atproto/pull/3910) [`a978681fd`](https://github.com/bluesky-social/atproto/commit/a978681fde1c138a5298bae77e5dc36ce155f955) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Updates to app.bsky.unspecced.getPostThreadHiddenV2 done in f6d5a467e71fb54996754cce7747b1e98a34442b (https://github.com/bluesky-social/atproto/pull/3909)
## 0.15.10
### Patch Changes
- [#3825](https://github.com/bluesky-social/atproto/pull/3825) [`1dae6c59a`](https://github.com/bluesky-social/atproto/commit/1dae6c59abe0e5aa4a7b7d0cc1dfee88f458d4b9) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add app.bsky.unspecced.getPostThreadV2
- [#3825](https://github.com/bluesky-social/atproto/pull/3825) [`1dae6c59a`](https://github.com/bluesky-social/atproto/commit/1dae6c59abe0e5aa4a7b7d0cc1dfee88f458d4b9) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add app.bsky.unspecced.getPostThreadHiddenV2
## 0.15.9
### Patch Changes
- [#3882](https://github.com/bluesky-social/atproto/pull/3882) [`79a75bb1e`](https://github.com/bluesky-social/atproto/commit/79a75bb1ed8fc14cefa246621fe1faeebf3fc159) Thanks [@mozzius](https://github.com/mozzius)! - add a "via" field to reposts and likes allowing a reference a repost, and then give a notification when a repost is liked or reposted.
## 0.15.8
### Patch Changes
- [#3869](https://github.com/bluesky-social/atproto/pull/3869) [`80f402f36`](https://github.com/bluesky-social/atproto/commit/80f402f3663af08fd048300738d04c67aa2b9cb8) Thanks [@haileyok](https://github.com/haileyok)! - add `reqId` to feed interactions
## 0.15.7
### Patch Changes
- [#3860](https://github.com/bluesky-social/atproto/pull/3860) [`86b315388`](https://github.com/bluesky-social/atproto/commit/86b3153884099ceeb0cfdb9d2bfdd447c39fb35a) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add liveNow to app.bsky.unspecced.getConfig
## 0.15.6
### Patch Changes
- [#3824](https://github.com/bluesky-social/atproto/pull/3824) [`3a65b68f7`](https://github.com/bluesky-social/atproto/commit/3a65b68f7dc63c8bfbea0ae615f8ae984272f2e4) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add app.bsky.actor.status lexicon
- Updated dependencies [[`cc485d296`](https://github.com/bluesky-social/atproto/commit/cc485d29638488928b5efec3d4b0627040589812), [`f36ab48d9`](https://github.com/bluesky-social/atproto/commit/f36ab48d910fc4a3afcd22138ba014c814beb93b), [`f36ab48d9`](https://github.com/bluesky-social/atproto/commit/f36ab48d910fc4a3afcd22138ba014c814beb93b), [`f36ab48d9`](https://github.com/bluesky-social/atproto/commit/f36ab48d910fc4a3afcd22138ba014c814beb93b), [`cc485d296`](https://github.com/bluesky-social/atproto/commit/cc485d29638488928b5efec3d4b0627040589812)]:
- @atproto/common-web@0.4.2
- @atproto/xrpc@0.7.0
- @atproto/lexicon@0.4.11
## 0.15.5
### Patch Changes
- [#3765](https://github.com/bluesky-social/atproto/pull/3765) [`45354c84f`](https://github.com/bluesky-social/atproto/commit/45354c84f898d79f58c14b5c0da3661beb7353f9) Thanks [@foysalit](https://github.com/foysalit)! - Add verification lexicons to ozone
## 0.15.4
### Patch Changes
- [#3768](https://github.com/bluesky-social/atproto/pull/3768) [`7af77f3ed`](https://github.com/bluesky-social/atproto/commit/7af77f3edfe52f77729f61de4188e8375f03b4ef) Thanks [@devinivy](https://github.com/devinivy)! - Support tools.ozone.hosting.getAccountHistory
## 0.15.3
### Patch Changes
- [#3773](https://github.com/bluesky-social/atproto/pull/3773) [`0087dc1c0`](https://github.com/bluesky-social/atproto/commit/0087dc1c0bafad1d0a0a1a16683d250dea031bf9) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add verification notifications
## 0.15.2
### Patch Changes
- [#3770](https://github.com/bluesky-social/atproto/pull/3770) [`553c988f1`](https://github.com/bluesky-social/atproto/commit/553c988f1d226b3d2fbe94c117b088f5c82db794) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Add `verificationPrefs` and `hideBadges` setting to user prefs.
## 0.15.1
### Patch Changes
- [#3761](https://github.com/bluesky-social/atproto/pull/3761) [`688268b6a`](https://github.com/bluesky-social/atproto/commit/688268b6a5ee30f0922ee152ffbd26583d164ae4) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Add verification state to profile view lexicons
- [#3766](https://github.com/bluesky-social/atproto/pull/3766) [`8d99915ce`](https://github.com/bluesky-social/atproto/commit/8d99915ce02c73b9b37bf121ccd2703fa14a906a) Thanks [@rafaelbsky](https://github.com/rafaelbsky)! - Update chat verification lexicon
## 0.15.0 ## 0.15.0
### Minor Changes ### Minor Changes

View File

@ -1,6 +1,6 @@
{ {
"name": "@atproto/api", "name": "@atproto/api",
"version": "0.16.9", "version": "0.15.0",
"license": "MIT", "license": "MIT",
"description": "Client library for atproto and Bluesky", "description": "Client library for atproto and Bluesky",
"keywords": [ "keywords": [

View File

@ -385,13 +385,12 @@ export class Agent extends XrpcClient {
}) })
} }
async like(uri: string, cid: string, via?: { uri: string; cid: string }) { async like(uri: string, cid: string) {
return this.app.bsky.feed.like.create( return this.app.bsky.feed.like.create(
{ repo: this.accountDid }, { repo: this.accountDid },
{ {
subject: { uri, cid }, subject: { uri, cid },
createdAt: new Date().toISOString(), createdAt: new Date().toISOString(),
via,
}, },
) )
} }
@ -406,13 +405,12 @@ export class Agent extends XrpcClient {
}) })
} }
async repost(uri: string, cid: string, via?: { uri: string; cid: string }) { async repost(uri: string, cid: string) {
return this.app.bsky.feed.repost.create( return this.app.bsky.feed.repost.create(
{ repo: this.accountDid }, { repo: this.accountDid },
{ {
subject: { uri, cid }, subject: { uri, cid },
createdAt: new Date().toISOString(), createdAt: new Date().toISOString(),
via,
}, },
) )
} }
@ -584,9 +582,6 @@ export class Agent extends XrpcClient {
threadgateAllowRules: undefined, threadgateAllowRules: undefined,
postgateEmbeddingRules: undefined, postgateEmbeddingRules: undefined,
}, },
verificationPrefs: {
hideBadges: false,
},
} }
const res = await this.app.bsky.actor.getPreferences({}) const res = await this.app.bsky.actor.getPreferences({})
const labelPrefs: AppBskyActorDefs.ContentLabelPref[] = [] const labelPrefs: AppBskyActorDefs.ContentLabelPref[] = []
@ -651,10 +646,6 @@ export class Agent extends XrpcClient {
pref.threadgateAllowRules pref.threadgateAllowRules
prefs.postInteractionSettings.postgateEmbeddingRules = prefs.postInteractionSettings.postgateEmbeddingRules =
pref.postgateEmbeddingRules pref.postgateEmbeddingRules
} else if (predicate.isValidVerificationPrefs(pref)) {
prefs.verificationPrefs = {
hideBadges: pref.hideBadges,
}
} }
} }
@ -1343,25 +1334,6 @@ export class Agent extends XrpcClient {
}) })
} }
async setVerificationPrefs(settings: AppBskyActorDefs.VerificationPrefs) {
const result = AppBskyActorDefs.validateVerificationPrefs(settings)
// Fool-proofing (should not be needed because of type safety)
if (!result.success) throw result.error
await this.updatePreferences((prefs) => {
const pref = prefs.findLast(predicate.isValidVerificationPrefs) || {
$type: 'app.bsky.actor.defs#verificationPrefs',
hideBadges: false,
}
pref.hideBadges = settings.hideBadges
return prefs
.filter((p) => !AppBskyActorDefs.isVerificationPrefs(p))
.concat(pref)
})
}
//- Private methods //- Private methods
#prefsLock = new AwaitLock() #prefsLock = new AwaitLock()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -12,10 +12,8 @@ import {
import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js'
import type * as AppBskyGraphDefs from '../graph/defs.js' import type * as AppBskyGraphDefs from '../graph/defs.js'
import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js' import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js'
import type * as AppBskyNotificationDefs from '../notification/defs.js'
import type * as AppBskyFeedThreadgate from '../feed/threadgate.js' import type * as AppBskyFeedThreadgate from '../feed/threadgate.js'
import type * as AppBskyFeedPostgate from '../feed/postgate.js' import type * as AppBskyFeedPostgate from '../feed/postgate.js'
import type * as AppBskyEmbedExternal from '../embed/external.js'
const is$typed = _is$typed, const is$typed = _is$typed,
validate = _validate validate = _validate
@ -32,7 +30,6 @@ export interface ProfileViewBasic {
labels?: ComAtprotoLabelDefs.Label[] labels?: ComAtprotoLabelDefs.Label[]
createdAt?: string createdAt?: string
verification?: VerificationState verification?: VerificationState
status?: StatusView
} }
const hashProfileViewBasic = 'profileViewBasic' const hashProfileViewBasic = 'profileViewBasic'
@ -58,7 +55,6 @@ export interface ProfileView {
viewer?: ViewerState viewer?: ViewerState
labels?: ComAtprotoLabelDefs.Label[] labels?: ComAtprotoLabelDefs.Label[]
verification?: VerificationState verification?: VerificationState
status?: StatusView
} }
const hashProfileView = 'profileView' const hashProfileView = 'profileView'
@ -90,7 +86,6 @@ export interface ProfileViewDetailed {
labels?: ComAtprotoLabelDefs.Label[] labels?: ComAtprotoLabelDefs.Label[]
pinnedPost?: ComAtprotoRepoStrongRef.Main pinnedPost?: ComAtprotoRepoStrongRef.Main
verification?: VerificationState verification?: VerificationState
status?: StatusView
} }
const hashProfileViewDetailed = 'profileViewDetailed' const hashProfileViewDetailed = 'profileViewDetailed'
@ -110,7 +105,6 @@ export interface ProfileAssociated {
starterPacks?: number starterPacks?: number
labeler?: boolean labeler?: boolean
chat?: ProfileAssociatedChat chat?: ProfileAssociatedChat
activitySubscription?: ProfileAssociatedActivitySubscription
} }
const hashProfileAssociated = 'profileAssociated' const hashProfileAssociated = 'profileAssociated'
@ -138,26 +132,6 @@ export function validateProfileAssociatedChat<V>(v: V) {
return validate<ProfileAssociatedChat & V>(v, id, hashProfileAssociatedChat) return validate<ProfileAssociatedChat & V>(v, id, hashProfileAssociatedChat)
} }
export interface ProfileAssociatedActivitySubscription {
$type?: 'app.bsky.actor.defs#profileAssociatedActivitySubscription'
allowSubscriptions: 'followers' | 'mutuals' | 'none' | (string & {})
}
const hashProfileAssociatedActivitySubscription =
'profileAssociatedActivitySubscription'
export function isProfileAssociatedActivitySubscription<V>(v: V) {
return is$typed(v, id, hashProfileAssociatedActivitySubscription)
}
export function validateProfileAssociatedActivitySubscription<V>(v: V) {
return validate<ProfileAssociatedActivitySubscription & V>(
v,
id,
hashProfileAssociatedActivitySubscription,
)
}
/** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. */ /** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. */
export interface ViewerState { export interface ViewerState {
$type?: 'app.bsky.actor.defs#viewerState' $type?: 'app.bsky.actor.defs#viewerState'
@ -169,7 +143,6 @@ export interface ViewerState {
following?: string following?: string
followedBy?: string followedBy?: string
knownFollowers?: KnownFollowers knownFollowers?: KnownFollowers
activitySubscription?: AppBskyNotificationDefs.ActivitySubscription
} }
const hashViewerState = 'viewerState' const hashViewerState = 'viewerState'
@ -257,7 +230,6 @@ export type Preferences = (
| $Typed<BskyAppStatePref> | $Typed<BskyAppStatePref>
| $Typed<LabelersPref> | $Typed<LabelersPref>
| $Typed<PostInteractionSettingsPref> | $Typed<PostInteractionSettingsPref>
| $Typed<VerificationPrefs>
| { $type: string } | { $type: string }
)[] )[]
@ -571,23 +543,6 @@ export function validateNux<V>(v: V) {
return validate<Nux & V>(v, id, hashNux) return validate<Nux & V>(v, id, hashNux)
} }
/** Preferences for how verified accounts appear in the app. */
export interface VerificationPrefs {
$type?: 'app.bsky.actor.defs#verificationPrefs'
/** Hide the blue check badges for verified accounts and trusted verifiers. */
hideBadges: boolean
}
const hashVerificationPrefs = 'verificationPrefs'
export function isVerificationPrefs<V>(v: V) {
return is$typed(v, id, hashVerificationPrefs)
}
export function validateVerificationPrefs<V>(v: V) {
return validate<VerificationPrefs & V>(v, id, hashVerificationPrefs)
}
/** Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly. */ /** Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly. */
export interface PostInteractionSettingsPref { export interface PostInteractionSettingsPref {
$type?: 'app.bsky.actor.defs#postInteractionSettingsPref' $type?: 'app.bsky.actor.defs#postInteractionSettingsPref'
@ -619,25 +574,3 @@ export function validatePostInteractionSettingsPref<V>(v: V) {
hashPostInteractionSettingsPref, hashPostInteractionSettingsPref,
) )
} }
export interface StatusView {
$type?: 'app.bsky.actor.defs#statusView'
/** The status for the account. */
status: 'app.bsky.actor.status#live' | (string & {})
record: { [_ in string]: unknown }
embed?: $Typed<AppBskyEmbedExternal.View> | { $type: string }
/** The date when this status will expire. The application might choose to no longer return the status after expiration. */
expiresAt?: string
/** True if the status is not expired, false if it is expired. Only present if expiration was set. */
isActive?: boolean
}
const hashStatusView = 'statusView'
export function isStatusView<V>(v: V) {
return is$typed(v, id, hashStatusView)
}
export function validateStatusView<V>(v: V) {
return validate<StatusView & V>(v, id, hashStatusView)
}

View File

@ -16,7 +16,8 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.actor.getPreferences' const id = 'app.bsky.actor.getPreferences'
export type QueryParams = {} export interface QueryParams {}
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,10 +16,11 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.actor.getProfile' const id = 'app.bsky.actor.getProfile'
export type QueryParams = { export interface QueryParams {
/** Handle or DID of account to fetch profile of. */ /** Handle or DID of account to fetch profile of. */
actor: string actor: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export type OutputSchema = AppBskyActorDefs.ProfileViewDetailed export type OutputSchema = AppBskyActorDefs.ProfileViewDetailed

View File

@ -16,9 +16,10 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.actor.getProfiles' const id = 'app.bsky.actor.getProfiles'
export type QueryParams = { export interface QueryParams {
actors: string[] actors: string[]
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,10 +16,11 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.actor.getSuggestions' const id = 'app.bsky.actor.getSuggestions'
export type QueryParams = { export interface QueryParams {
limit?: number limit?: number
cursor?: string cursor?: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,7 +16,7 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.actor.putPreferences' const id = 'app.bsky.actor.putPreferences'
export type QueryParams = {} export interface QueryParams {}
export interface InputSchema { export interface InputSchema {
preferences: AppBskyActorDefs.Preferences preferences: AppBskyActorDefs.Preferences

View File

@ -16,7 +16,7 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.actor.searchActors' const id = 'app.bsky.actor.searchActors'
export type QueryParams = { export interface QueryParams {
/** DEPRECATED: use 'q' instead. */ /** DEPRECATED: use 'q' instead. */
term?: string term?: string
/** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ /** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */
@ -24,6 +24,7 @@ export type QueryParams = {
limit?: number limit?: number
cursor?: string cursor?: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,13 +16,14 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.actor.searchActorsTypeahead' const id = 'app.bsky.actor.searchActorsTypeahead'
export type QueryParams = { export interface QueryParams {
/** DEPRECATED: use 'q' instead. */ /** DEPRECATED: use 'q' instead. */
term?: string term?: string
/** Search query prefix; not a full query string. */ /** Search query prefix; not a full query string. */
q?: string q?: string
limit?: number limit?: number
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -1,40 +0,0 @@
/**
* GENERATED CODE - DO NOT MODIFY
*/
import { type ValidationResult, BlobRef } from '@atproto/lexicon'
import { CID } from 'multiformats/cid'
import { validate as _validate } from '../../../../lexicons'
import {
type $Typed,
is$typed as _is$typed,
type OmitKey,
} from '../../../../util'
import type * as AppBskyEmbedExternal from '../embed/external.js'
const is$typed = _is$typed,
validate = _validate
const id = 'app.bsky.actor.status'
export interface Record {
$type: 'app.bsky.actor.status'
/** The status for the account. */
status: 'app.bsky.actor.status#live' | (string & {})
embed?: $Typed<AppBskyEmbedExternal.Main> | { $type: string }
/** The duration of the status in minutes. Applications can choose to impose minimum and maximum limits. */
durationMinutes?: number
createdAt: string
[k: string]: unknown
}
const hashRecord = 'main'
export function isRecord<V>(v: V) {
return is$typed(v, id, hashRecord)
}
export function validateRecord<V>(v: V) {
return validate<Record & V>(v, id, hashRecord, true)
}
/** Advertises an account as currently offering live content. */
export const LIVE = `${id}#live`

View File

@ -1,50 +0,0 @@
/**
* GENERATED CODE - DO NOT MODIFY
*/
import { HeadersMap, XRPCError } from '@atproto/xrpc'
import { type ValidationResult, BlobRef } from '@atproto/lexicon'
import { CID } from 'multiformats/cid'
import { validate as _validate } from '../../../../lexicons'
import {
type $Typed,
is$typed as _is$typed,
type OmitKey,
} from '../../../../util'
const is$typed = _is$typed,
validate = _validate
const id = 'app.bsky.bookmark.createBookmark'
export type QueryParams = {}
export interface InputSchema {
uri: string
cid: string
}
export interface CallOptions {
signal?: AbortSignal
headers?: HeadersMap
qp?: QueryParams
encoding?: 'application/json'
}
export interface Response {
success: boolean
headers: HeadersMap
}
export class UnsupportedCollectionError extends XRPCError {
constructor(src: XRPCError) {
super(src.status, src.error, src.message, src.headers, { cause: src })
}
}
export function toKnownErr(e: any) {
if (e instanceof XRPCError) {
if (e.error === 'UnsupportedCollection')
return new UnsupportedCollectionError(e)
}
return e
}

View File

@ -1,54 +0,0 @@
/**
* GENERATED CODE - DO NOT MODIFY
*/
import { type ValidationResult, BlobRef } from '@atproto/lexicon'
import { CID } from 'multiformats/cid'
import { validate as _validate } from '../../../../lexicons'
import {
type $Typed,
is$typed as _is$typed,
type OmitKey,
} from '../../../../util'
import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js'
import type * as AppBskyFeedDefs from '../feed/defs.js'
const is$typed = _is$typed,
validate = _validate
const id = 'app.bsky.bookmark.defs'
/** Object used to store bookmark data in stash. */
export interface Bookmark {
$type?: 'app.bsky.bookmark.defs#bookmark'
subject: ComAtprotoRepoStrongRef.Main
}
const hashBookmark = 'bookmark'
export function isBookmark<V>(v: V) {
return is$typed(v, id, hashBookmark)
}
export function validateBookmark<V>(v: V) {
return validate<Bookmark & V>(v, id, hashBookmark)
}
export interface BookmarkView {
$type?: 'app.bsky.bookmark.defs#bookmarkView'
subject: ComAtprotoRepoStrongRef.Main
createdAt?: string
item:
| $Typed<AppBskyFeedDefs.BlockedPost>
| $Typed<AppBskyFeedDefs.NotFoundPost>
| $Typed<AppBskyFeedDefs.PostView>
| { $type: string }
}
const hashBookmarkView = 'bookmarkView'
export function isBookmarkView<V>(v: V) {
return is$typed(v, id, hashBookmarkView)
}
export function validateBookmarkView<V>(v: V) {
return validate<BookmarkView & V>(v, id, hashBookmarkView)
}

View File

@ -1,49 +0,0 @@
/**
* GENERATED CODE - DO NOT MODIFY
*/
import { HeadersMap, XRPCError } from '@atproto/xrpc'
import { type ValidationResult, BlobRef } from '@atproto/lexicon'
import { CID } from 'multiformats/cid'
import { validate as _validate } from '../../../../lexicons'
import {
type $Typed,
is$typed as _is$typed,
type OmitKey,
} from '../../../../util'
const is$typed = _is$typed,
validate = _validate
const id = 'app.bsky.bookmark.deleteBookmark'
export type QueryParams = {}
export interface InputSchema {
uri: string
}
export interface CallOptions {
signal?: AbortSignal
headers?: HeadersMap
qp?: QueryParams
encoding?: 'application/json'
}
export interface Response {
success: boolean
headers: HeadersMap
}
export class UnsupportedCollectionError extends XRPCError {
constructor(src: XRPCError) {
super(src.status, src.error, src.message, src.headers, { cause: src })
}
}
export function toKnownErr(e: any) {
if (e instanceof XRPCError) {
if (e.error === 'UnsupportedCollection')
return new UnsupportedCollectionError(e)
}
return e
}

View File

@ -1,43 +0,0 @@
/**
* GENERATED CODE - DO NOT MODIFY
*/
import { HeadersMap, XRPCError } from '@atproto/xrpc'
import { type ValidationResult, BlobRef } from '@atproto/lexicon'
import { CID } from 'multiformats/cid'
import { validate as _validate } from '../../../../lexicons'
import {
type $Typed,
is$typed as _is$typed,
type OmitKey,
} from '../../../../util'
import type * as AppBskyBookmarkDefs from './defs.js'
const is$typed = _is$typed,
validate = _validate
const id = 'app.bsky.bookmark.getBookmarks'
export type QueryParams = {
limit?: number
cursor?: string
}
export type InputSchema = undefined
export interface OutputSchema {
cursor?: string
bookmarks: AppBskyBookmarkDefs.BookmarkView[]
}
export interface CallOptions {
signal?: AbortSignal
headers?: HeadersMap
}
export interface Response {
success: boolean
headers: HeadersMap
data: OutputSchema
}
export function toKnownErr(e: any) {
return e
}

View File

@ -36,7 +36,6 @@ export interface PostView {
| $Typed<AppBskyEmbedRecord.View> | $Typed<AppBskyEmbedRecord.View>
| $Typed<AppBskyEmbedRecordWithMedia.View> | $Typed<AppBskyEmbedRecordWithMedia.View>
| { $type: string } | { $type: string }
bookmarkCount?: number
replyCount?: number replyCount?: number
repostCount?: number repostCount?: number
likeCount?: number likeCount?: number
@ -62,7 +61,6 @@ export interface ViewerState {
$type?: 'app.bsky.feed.defs#viewerState' $type?: 'app.bsky.feed.defs#viewerState'
repost?: string repost?: string
like?: string like?: string
bookmarked?: boolean
threadMuted?: boolean threadMuted?: boolean
replyDisabled?: boolean replyDisabled?: boolean
embeddingDisabled?: boolean embeddingDisabled?: boolean
@ -102,8 +100,6 @@ export interface FeedViewPost {
reason?: $Typed<ReasonRepost> | $Typed<ReasonPin> | { $type: string } reason?: $Typed<ReasonRepost> | $Typed<ReasonPin> | { $type: string }
/** Context provided by feed generator that may be passed back alongside interactions. */ /** Context provided by feed generator that may be passed back alongside interactions. */
feedContext?: string feedContext?: string
/** Unique identifier per request that may be passed back alongside interactions. */
reqId?: string
} }
const hashFeedViewPost = 'feedViewPost' const hashFeedViewPost = 'feedViewPost'
@ -144,8 +140,6 @@ export function validateReplyRef<V>(v: V) {
export interface ReasonRepost { export interface ReasonRepost {
$type?: 'app.bsky.feed.defs#reasonRepost' $type?: 'app.bsky.feed.defs#reasonRepost'
by: AppBskyActorDefs.ProfileViewBasic by: AppBskyActorDefs.ProfileViewBasic
uri?: string
cid?: string
indexedAt: string indexedAt: string
} }
@ -382,8 +376,6 @@ export interface Interaction {
| (string & {}) | (string & {})
/** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. */ /** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. */
feedContext?: string feedContext?: string
/** Unique identifier per request that may be passed back alongside interactions. */
reqId?: string
} }
const hashInteraction = 'interaction' const hashInteraction = 'interaction'

View File

@ -15,7 +15,8 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.describeFeedGenerator' const id = 'app.bsky.feed.describeFeedGenerator'
export type QueryParams = {} export interface QueryParams {}
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,11 +16,12 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getActorFeeds' const id = 'app.bsky.feed.getActorFeeds'
export type QueryParams = { export interface QueryParams {
actor: string actor: string
limit?: number limit?: number
cursor?: string cursor?: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,11 +16,12 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getActorLikes' const id = 'app.bsky.feed.getActorLikes'
export type QueryParams = { export interface QueryParams {
actor: string actor: string
limit?: number limit?: number
cursor?: string cursor?: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,7 +16,7 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getAuthorFeed' const id = 'app.bsky.feed.getAuthorFeed'
export type QueryParams = { export interface QueryParams {
actor: string actor: string
limit?: number limit?: number
cursor?: string cursor?: string
@ -30,6 +30,7 @@ export type QueryParams = {
| (string & {}) | (string & {})
includePins?: boolean includePins?: boolean
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,11 +16,12 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getFeed' const id = 'app.bsky.feed.getFeed'
export type QueryParams = { export interface QueryParams {
feed: string feed: string
limit?: number limit?: number
cursor?: string cursor?: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,10 +16,11 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getFeedGenerator' const id = 'app.bsky.feed.getFeedGenerator'
export type QueryParams = { export interface QueryParams {
/** AT-URI of the feed generator record. */ /** AT-URI of the feed generator record. */
feed: string feed: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,9 +16,10 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getFeedGenerators' const id = 'app.bsky.feed.getFeedGenerators'
export type QueryParams = { export interface QueryParams {
feeds: string[] feeds: string[]
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,19 +16,18 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getFeedSkeleton' const id = 'app.bsky.feed.getFeedSkeleton'
export type QueryParams = { export interface QueryParams {
/** Reference to feed generator record describing the specific feed being requested. */ /** Reference to feed generator record describing the specific feed being requested. */
feed: string feed: string
limit?: number limit?: number
cursor?: string cursor?: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {
cursor?: string cursor?: string
feed: AppBskyFeedDefs.SkeletonFeedPost[] feed: AppBskyFeedDefs.SkeletonFeedPost[]
/** Unique identifier per request that may be passed back alongside interactions. */
reqId?: string
} }
export interface CallOptions { export interface CallOptions {

View File

@ -16,7 +16,7 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getLikes' const id = 'app.bsky.feed.getLikes'
export type QueryParams = { export interface QueryParams {
/** AT-URI of the subject (eg, a post record). */ /** AT-URI of the subject (eg, a post record). */
uri: string uri: string
/** CID of the subject record (aka, specific version of record), to filter likes. */ /** CID of the subject record (aka, specific version of record), to filter likes. */
@ -24,6 +24,7 @@ export type QueryParams = {
limit?: number limit?: number
cursor?: string cursor?: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,12 +16,13 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getListFeed' const id = 'app.bsky.feed.getListFeed'
export type QueryParams = { export interface QueryParams {
/** Reference (AT-URI) to the list record. */ /** Reference (AT-URI) to the list record. */
list: string list: string
limit?: number limit?: number
cursor?: string cursor?: string
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

View File

@ -16,7 +16,7 @@ const is$typed = _is$typed,
validate = _validate validate = _validate
const id = 'app.bsky.feed.getPostThread' const id = 'app.bsky.feed.getPostThread'
export type QueryParams = { export interface QueryParams {
/** Reference (AT-URI) to post record. */ /** Reference (AT-URI) to post record. */
uri: string uri: string
/** How many levels of reply depth should be included in response. */ /** How many levels of reply depth should be included in response. */
@ -24,6 +24,7 @@ export type QueryParams = {
/** How many levels of parent (and grandparent, etc) post to include. */ /** How many levels of parent (and grandparent, etc) post to include. */
parentHeight?: number parentHeight?: number
} }
export type InputSchema = undefined export type InputSchema = undefined
export interface OutputSchema { export interface OutputSchema {

Some files were not shown because too many files have changed in this diff Show More