At

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

share/lexicons/app/bsky/feed/getQuotes.json
share/lexicons/app/bsky/feed/getRepostedBy.json
share/lexicons/app/bsky/feed/getSuggestedFeeds.json
share/lexicons/app/bsky/feed/getTimeline.json
share/lexicons/app/bsky/feed/like.json
share/lexicons/app/bsky/feed/post.json
share/lexicons/app/bsky/feed/postgate.json
share/lexicons/app/bsky/feed/repost.json
share/lexicons/app/bsky/feed/searchPosts.json
share/lexicons/app/bsky/feed/sendInteractions.json
share/lexicons/app/bsky/feed/threadgate.json
share/lexicons/app/bsky/graph/block.json
share/lexicons/app/bsky/graph/defs.json
share/lexicons/app/bsky/graph/follow.json
share/lexicons/app/bsky/graph/getActorStarterPacks.json
share/lexicons/app/bsky/graph/getBlocks.json
share/lexicons/app/bsky/graph/getFollowers.json
share/lexicons/app/bsky/graph/getFollows.json
share/lexicons/app/bsky/graph/getKnownFollowers.json
share/lexicons/app/bsky/graph/getList.json
share/lexicons/app/bsky/graph/getListBlocks.json

share/lexicons/app/bsky/actor/defs.json  view on Meta::CPAN

      "items": {
        "type": "union",
        "refs": [
          "#adultContentPref",
          "#contentLabelPref",
          "#savedFeedsPref",
          "#savedFeedsPrefV2",
          "#personalDetailsPref",
          "#declaredAgePref",
          "#feedViewPref",
          "#threadViewPref",
          "#interestsPref",
          "#mutedWordsPref",
          "#hiddenPostsPref",
          "#bskyAppStatePref",
          "#labelersPref",
          "#postInteractionSettingsPref",
          "#verificationPrefs",
          "#liveEventPreferences"
        ]
      }

share/lexicons/app/bsky/actor/defs.json  view on Meta::CPAN

        "hideReposts": {
          "type": "boolean",
          "description": "Hide reposts in the feed."
        },
        "hideQuotePosts": {
          "type": "boolean",
          "description": "Hide quote posts in the feed."
        }
      }
    },
    "threadViewPref": {
      "type": "object",
      "properties": {
        "sort": {
          "type": "string",
          "description": "Sorting mode for threads.",
          "knownValues": ["oldest", "newest", "most-likes", "random", "hotness"]
        }
      }
    },
    "interestsPref": {
      "type": "object",
      "required": ["tags"],
      "properties": {
        "tags": {
          "type": "array",

share/lexicons/app/bsky/actor/defs.json  view on Meta::CPAN

        },
        "hideAllFeeds": {
          "description": "Whether to hide all feeds from live events.",
          "type": "boolean",
          "default": false
        }
      }
    },
    "postInteractionSettingsPref": {
      "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.",
      "required": [],
      "properties": {
        "threadgateAllowRules": {
          "description": "Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply.",
          "type": "array",
          "maxLength": 5,
          "items": {
            "type": "union",
            "refs": [
              "app.bsky.feed.threadgate#mentionRule",
              "app.bsky.feed.threadgate#followerRule",
              "app.bsky.feed.threadgate#followingRule",
              "app.bsky.feed.threadgate#listRule"
            ]
          }
        },
        "postgateEmbeddingRules": {
          "description": "Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed.",
          "type": "array",
          "maxLength": 5,
          "items": {
            "type": "union",
            "refs": ["app.bsky.feed.postgate#disableRule"]

share/lexicons/app/bsky/authCreatePosts.json  view on Meta::CPAN

            "app.bsky.video.getUploadLimits"
          ]
        },
        {
          "type": "permission",
          "resource": "repo",
          "action": ["create"],
          "collection": [
            "app.bsky.feed.post",
            "app.bsky.feed.postgate",
            "app.bsky.feed.threadgate"
          ]
        }
      ]
    }
  }
}

share/lexicons/app/bsky/authDeleteContent.json  view on Meta::CPAN

      "permissions": [
        {
          "type": "permission",
          "resource": "repo",
          "action": ["delete"],
          "collection": [
            "app.bsky.feed.like",
            "app.bsky.feed.post",
            "app.bsky.feed.postgate",
            "app.bsky.feed.repost",
            "app.bsky.feed.threadgate"
          ]
        }
      ]
    }
  }
}

share/lexicons/app/bsky/authFullApp.json  view on Meta::CPAN

          "type": "permission",
          "resource": "repo",
          "action": ["create", "update", "delete"],
          "collection": [
            "app.bsky.actor.profile",
            "app.bsky.actor.status",
            "app.bsky.feed.like",
            "app.bsky.feed.post",
            "app.bsky.feed.postgate",
            "app.bsky.feed.repost",
            "app.bsky.feed.threadgate",
            "app.bsky.graph.block",
            "app.bsky.graph.follow",
            "app.bsky.graph.list",
            "app.bsky.graph.listblock",
            "app.bsky.graph.listitem",
            "app.bsky.graph.starterpack",
            "app.bsky.notification.declaration"
          ]
        }
      ]

share/lexicons/app/bsky/draft/defs.json  view on Meta::CPAN

        },
        "postgateEmbeddingRules": {
          "description": "Embedding rules for the postgates to be created when this draft is published.",
          "type": "array",
          "maxLength": 5,
          "items": {
            "type": "union",
            "refs": ["app.bsky.feed.postgate#disableRule"]
          }
        },
        "threadgateAllow": {
          "description": "Allow-rules for the threadgate to be created when this draft is published.",
          "type": "array",
          "maxLength": 5,
          "items": {
            "type": "union",
            "refs": [
              "app.bsky.feed.threadgate#mentionRule",
              "app.bsky.feed.threadgate#followerRule",
              "app.bsky.feed.threadgate#followingRule",
              "app.bsky.feed.threadgate#listRule"
            ]
          }
        }
      }
    },
    "draftPost": {
      "description": "One of the posts that compose a draft.",
      "type": "object",
      "required": ["text"],
      "properties": {

share/lexicons/app/bsky/feed/defs.json  view on Meta::CPAN

        "replyCount": { "type": "integer" },
        "repostCount": { "type": "integer" },
        "likeCount": { "type": "integer" },
        "quoteCount": { "type": "integer" },
        "indexedAt": { "type": "string", "format": "datetime" },
        "viewer": { "type": "ref", "ref": "#viewerState" },
        "labels": {
          "type": "array",
          "items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
        },
        "threadgate": { "type": "ref", "ref": "#threadgateView" },
        "debug": {
          "type": "unknown",
          "description": "Debug information for internal development"
        }
      }
    },
    "viewerState": {
      "type": "object",
      "description": "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.",
      "properties": {
        "repost": { "type": "string", "format": "at-uri" },
        "like": { "type": "string", "format": "at-uri" },
        "bookmarked": { "type": "boolean" },
        "threadMuted": { "type": "boolean" },
        "replyDisabled": { "type": "boolean" },
        "embeddingDisabled": { "type": "boolean" },
        "pinned": { "type": "boolean" }
      }
    },
    "threadContext": {
      "type": "object",
      "description": "Metadata about this post within the context of the thread it is in.",
      "properties": {
        "rootAuthorLike": { "type": "string", "format": "at-uri" }
      }
    },
    "feedViewPost": {
      "type": "object",
      "required": ["post"],
      "properties": {
        "post": { "type": "ref", "ref": "#postView" },
        "reply": { "type": "ref", "ref": "#replyRef" },

share/lexicons/app/bsky/feed/defs.json  view on Meta::CPAN

        "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" }
      }
    },
    "reasonPin": {
      "type": "object",
      "properties": {}
    },
    "threadViewPost": {
      "type": "object",
      "required": ["post"],
      "properties": {
        "post": { "type": "ref", "ref": "#postView" },
        "parent": {
          "type": "union",
          "refs": ["#threadViewPost", "#notFoundPost", "#blockedPost"]
        },
        "replies": {
          "type": "array",
          "items": {
            "type": "union",
            "refs": ["#threadViewPost", "#notFoundPost", "#blockedPost"]
          }
        },
        "threadContext": { "type": "ref", "ref": "#threadContext" }
      }
    },
    "notFoundPost": {
      "type": "object",
      "required": ["uri", "notFound"],
      "properties": {
        "uri": { "type": "string", "format": "at-uri" },
        "notFound": { "type": "boolean", "const": true }
      }
    },

share/lexicons/app/bsky/feed/defs.json  view on Meta::CPAN

      "type": "object",
      "required": ["repost"],
      "properties": {
        "repost": { "type": "string", "format": "at-uri" }
      }
    },
    "skeletonReasonPin": {
      "type": "object",
      "properties": {}
    },
    "threadgateView": {
      "type": "object",
      "properties": {
        "uri": { "type": "string", "format": "at-uri" },
        "cid": { "type": "string", "format": "cid" },
        "record": { "type": "unknown" },
        "lists": {
          "type": "array",
          "items": { "type": "ref", "ref": "app.bsky.graph.defs#listViewBasic" }
        }
      }

share/lexicons/app/bsky/feed/getAuthorFeed.json  view on Meta::CPAN

            "default": 50
          },
          "cursor": { "type": "string" },
          "filter": {
            "type": "string",
            "description": "Combinations of post/repost types to include in response.",
            "knownValues": [
              "posts_with_replies",
              "posts_no_replies",
              "posts_with_media",
              "posts_and_author_threads",
              "posts_with_video"
            ],
            "default": "posts_with_replies"
          },
          "includePins": {
            "type": "boolean",
            "default": false
          }
        }
      },

share/lexicons/app/bsky/feed/getPostThread.json  view on Meta::CPAN

{
  "lexicon": 1,
  "id": "app.bsky.feed.getPostThread",
  "defs": {
    "main": {
      "type": "query",
      "description": "Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests.",
      "parameters": {
        "type": "params",
        "required": ["uri"],
        "properties": {
          "uri": {
            "type": "string",
            "format": "at-uri",
            "description": "Reference (AT-URI) to post record."
          },
          "depth": {

share/lexicons/app/bsky/feed/getPostThread.json  view on Meta::CPAN

            "default": 80,
            "minimum": 0,
            "maximum": 1000
          }
        }
      },
      "output": {
        "encoding": "application/json",
        "schema": {
          "type": "object",
          "required": ["thread"],
          "properties": {
            "thread": {
              "type": "union",
              "refs": [
                "app.bsky.feed.defs#threadViewPost",
                "app.bsky.feed.defs#notFoundPost",
                "app.bsky.feed.defs#blockedPost"
              ]
            },
            "threadgate": {
              "type": "ref",
              "ref": "app.bsky.feed.defs#threadgateView"
            }
          }
        }
      },
      "errors": [{ "name": "NotFound" }]
    }
  }
}

share/lexicons/app/bsky/feed/threadgate.json  view on Meta::CPAN

{
  "lexicon": 1,
  "id": "app.bsky.feed.threadgate",
  "defs": {
    "main": {
      "type": "record",
      "key": "tid",
      "description": "Record defining interaction gating rules for a thread (aka, reply controls). The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository.",
      "record": {
        "type": "object",
        "required": ["post", "createdAt"],
        "properties": {
          "post": {
            "type": "string",
            "format": "at-uri",
            "description": "Reference (AT-URI) to the post record."
          },
          "allow": {

share/lexicons/app/bsky/graph/muteThread.json  view on Meta::CPAN

{
  "lexicon": 1,
  "id": "app.bsky.graph.muteThread",
  "defs": {
    "main": {
      "type": "procedure",
      "description": "Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth.",
      "input": {
        "encoding": "application/json",
        "schema": {
          "type": "object",
          "required": ["root"],
          "properties": {
            "root": { "type": "string", "format": "at-uri" }
          }
        }
      }

share/lexicons/app/bsky/graph/unmuteThread.json  view on Meta::CPAN

{
  "lexicon": 1,
  "id": "app.bsky.graph.unmuteThread",
  "defs": {
    "main": {
      "type": "procedure",
      "description": "Unmutes the specified thread. Requires auth.",
      "input": {
        "encoding": "application/json",
        "schema": {
          "type": "object",
          "required": ["root"],
          "properties": {
            "root": { "type": "string", "format": "at-uri" }
          }
        }
      }

share/lexicons/app/bsky/unspecced/defs.json  view on Meta::CPAN

        "category": { "type": "string" },
        "actors": {
          "type": "array",
          "items": {
            "type": "ref",
            "ref": "app.bsky.actor.defs#profileViewBasic"
          }
        }
      }
    },
    "threadItemPost": {
      "type": "object",
      "required": [
        "post",
        "moreParents",
        "moreReplies",
        "opThread",
        "hiddenByThreadgate",
        "mutedByViewer"
      ],
      "properties": {

share/lexicons/app/bsky/unspecced/defs.json  view on Meta::CPAN

        "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"],

share/lexicons/app/bsky/unspecced/getPostThreadOtherV2.json  view on Meta::CPAN

{
  "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. B...
      "parameters": {
        "type": "params",
        "required": ["anchor"],
        "properties": {
          "anchor": {
            "type": "string",
            "format": "at-uri",
            "description": "Reference (AT-URI) to post record. This is the anchor post."
          }
        }
      },
      "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"]
        }
      }
    }
  }
}

share/lexicons/app/bsky/unspecced/getPostThreadV2.json  view on Meta::CPAN

{
  "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...
      "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
          },
          "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"
          ]
        }
      }
    }
  }
}

t/00_compile.t  view on Meta::CPAN

        is my $timeline = $bsky->get( 'app.bsky.feed.getTimeline' => { actor => $bsky->did } ), hash {
            field cursor => D();
            field feed   => D();    # Feed items are subject to change
            end;
        }, 'getTimeline( )';
    };
    subtest 'pull author feed' => sub {
        $login || skip_all "$login";
        is my $feed
            = $bsky->get(
            'app.bsky.feed.getAuthorFeed' => { actor => 'did:plc:z72i7hdynmk6r22z27h6tvur', filter => 'posts_and_author_threads', limit => 30 } ),
            hash {
            field cursor => D();
            field feed   => D();    # Feed items are subject to change
            end;
            }, 'getAuthorFeed( ... )';
    };
    subtest 'pull post thread' => sub {
        $login || skip_all "$login";
        is my $thread
            = $bsky->get( 'app.bsky.feed.getPostThread' => { uri => 'at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l2s5xxv2ze2c' } ),
            hash {
            field threadgate => E();
            field thread     => meta {    # Feed items are subject to change
                prop reftype => 'HASH';
            };
            end;
            }, 'getPostThread( ... )';
    };
    subtest 'pull post' => sub {
        $login || skip_all "$login";
        is my $post
            = $bsky->get( 'app.bsky.feed.getPosts' => { uris => ['at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l2s5xxv2ze2c'] } ), hash {
            field posts => array {



( run in 2.004 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )