@atproto/bsky 0.0.200 → 0.0.202
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/api/app/bsky/ageassurance/begin.d.ts.map +1 -1
- package/dist/api/app/bsky/ageassurance/begin.js +15 -9
- package/dist/api/app/bsky/ageassurance/begin.js.map +1 -1
- package/dist/api/app/bsky/contact/sendNotification.d.ts +4 -0
- package/dist/api/app/bsky/contact/sendNotification.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/sendNotification.js +30 -0
- package/dist/api/app/bsky/contact/sendNotification.js.map +1 -0
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/sitemap.d.ts +4 -0
- package/dist/api/sitemap.d.ts.map +1 -0
- package/dist/api/sitemap.js +67 -0
- package/dist/api/sitemap.js.map +1 -0
- package/dist/data-plane/server/routes/index.d.ts.map +1 -1
- package/dist/data-plane/server/routes/index.js +2 -0
- package/dist/data-plane/server/routes/index.js.map +1 -1
- package/dist/data-plane/server/routes/profile.d.ts.map +1 -1
- package/dist/data-plane/server/routes/profile.js +10 -8
- package/dist/data-plane/server/routes/profile.js.map +1 -1
- package/dist/data-plane/server/routes/sitemap.d.ts +5 -0
- package/dist/data-plane/server/routes/sitemap.d.ts.map +1 -0
- package/dist/data-plane/server/routes/sitemap.js +38 -0
- package/dist/data-plane/server/routes/sitemap.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lexicon/index.d.ts +2 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +4 -0
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +146 -4
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +74 -0
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/app/bsky/actor/defs.d.ts +13 -1
- package/dist/lexicon/types/app/bsky/actor/defs.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/actor/defs.js +9 -0
- package/dist/lexicon/types/app/bsky/actor/defs.js.map +1 -1
- package/dist/lexicon/types/app/bsky/contact/defs.d.ts +10 -0
- package/dist/lexicon/types/app/bsky/contact/defs.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/contact/defs.js +9 -0
- package/dist/lexicon/types/app/bsky/contact/defs.js.map +1 -1
- package/dist/lexicon/types/app/bsky/contact/sendNotification.d.ts +26 -0
- package/dist/lexicon/types/app/bsky/contact/sendNotification.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/sendNotification.js +7 -0
- package/dist/lexicon/types/app/bsky/contact/sendNotification.js.map +1 -0
- package/dist/lexicon/types/app/bsky/notification/listNotifications.d.ts +1 -1
- package/dist/lexicon/types/app/bsky/notification/listNotifications.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/notification/listNotifications.js.map +1 -1
- package/dist/proto/bsky_connect.d.ts +21 -1
- package/dist/proto/bsky_connect.d.ts.map +1 -1
- package/dist/proto/bsky_connect.js +20 -0
- package/dist/proto/bsky_connect.js.map +1 -1
- package/dist/proto/bsky_pb.d.ts +97 -0
- package/dist/proto/bsky_pb.d.ts.map +1 -1
- package/dist/proto/bsky_pb.js +256 -5
- package/dist/proto/bsky_pb.js.map +1 -1
- package/dist/stash.d.ts +2 -1
- package/dist/stash.d.ts.map +1 -1
- package/dist/stash.js +2 -1
- package/dist/stash.js.map +1 -1
- package/package.json +9 -9
- package/proto/bsky.proto +31 -0
- package/src/api/app/bsky/ageassurance/begin.ts +21 -14
- package/src/api/app/bsky/contact/sendNotification.ts +32 -0
- package/src/api/index.ts +2 -0
- package/src/api/sitemap.ts +76 -0
- package/src/data-plane/server/routes/index.ts +2 -0
- package/src/data-plane/server/routes/profile.ts +8 -6
- package/src/data-plane/server/routes/sitemap.ts +43 -0
- package/src/index.ts +6 -1
- package/src/lexicon/index.ts +13 -0
- package/src/lexicon/lexicons.ts +80 -0
- package/src/lexicon/types/app/bsky/actor/defs.ts +22 -0
- package/src/lexicon/types/app/bsky/contact/defs.ts +19 -0
- package/src/lexicon/types/app/bsky/contact/sendNotification.ts +44 -0
- package/src/lexicon/types/app/bsky/notification/listNotifications.ts +1 -0
- package/src/proto/bsky_connect.ts +21 -1
- package/src/proto/bsky_pb.ts +188 -0
- package/src/stash.ts +5 -2
- package/tests/sitemap.test.ts +75 -0
- package/tests/views/age-assurance-v2.test.ts +59 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/tsconfig.tests.tsbuildinfo +1 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED CODE - DO NOT MODIFY
|
|
3
|
+
*/
|
|
4
|
+
import { type ValidationResult, BlobRef } from '@atproto/lexicon'
|
|
5
|
+
import { CID } from 'multiformats/cid'
|
|
6
|
+
import { validate as _validate } from '../../../../lexicons'
|
|
7
|
+
import {
|
|
8
|
+
type $Typed,
|
|
9
|
+
is$typed as _is$typed,
|
|
10
|
+
type OmitKey,
|
|
11
|
+
} from '../../../../util'
|
|
12
|
+
|
|
13
|
+
const is$typed = _is$typed,
|
|
14
|
+
validate = _validate
|
|
15
|
+
const id = 'app.bsky.contact.sendNotification'
|
|
16
|
+
|
|
17
|
+
export type QueryParams = {}
|
|
18
|
+
|
|
19
|
+
export interface InputSchema {
|
|
20
|
+
/** The DID of who this notification comes from. */
|
|
21
|
+
from: string
|
|
22
|
+
/** The DID of who this notification should go to. */
|
|
23
|
+
to: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface OutputSchema {}
|
|
27
|
+
|
|
28
|
+
export interface HandlerInput {
|
|
29
|
+
encoding: 'application/json'
|
|
30
|
+
body: InputSchema
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface HandlerSuccess {
|
|
34
|
+
encoding: 'application/json'
|
|
35
|
+
body: OutputSchema
|
|
36
|
+
headers?: { [key: string]: string }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface HandlerError {
|
|
40
|
+
status: number
|
|
41
|
+
message?: string
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export type HandlerOutput = HandlerError | HandlerSuccess
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* eslint-disable */
|
|
4
4
|
// @ts-nocheck
|
|
5
5
|
|
|
6
|
-
import { ClearActorMutelistSubscriptionsRequest, ClearActorMutelistSubscriptionsResponse, ClearActorMutesRequest, ClearActorMutesResponse, ClearThreadMutesRequest, ClearThreadMutesResponse, CreateActorMutelistSubscriptionRequest, CreateActorMutelistSubscriptionResponse, CreateActorMuteRequest, CreateActorMuteResponse, CreateThreadMuteRequest, CreateThreadMuteResponse, DeleteActorMutelistSubscriptionRequest, DeleteActorMutelistSubscriptionResponse, DeleteActorMuteRequest, DeleteActorMuteResponse, DeleteThreadMuteRequest, DeleteThreadMuteResponse, GetActivitySubscriptionDidsRequest, GetActivitySubscriptionDidsResponse, GetActivitySubscriptionsByActorAndSubjectsRequest, GetActivitySubscriptionsByActorAndSubjectsResponse, GetActorBookmarksRequest, GetActorBookmarksResponse, GetActorChatDeclarationRecordsRequest, GetActorChatDeclarationRecordsResponse, GetActorFeedsRequest, GetActorFeedsResponse, GetActorFollowsActorsRequest, GetActorFollowsActorsResponse, GetActorLikesRequest, GetActorLikesResponse, GetActorListsRequest, GetActorListsResponse, GetActorMutesActorRequest, GetActorMutesActorResponse, GetActorMutesActorViaListRequest, GetActorMutesActorViaListResponse, GetActorRepostsRequest, GetActorRepostsResponse, GetActorsRequest, GetActorsResponse, GetActorStarterPacksRequest, GetActorStarterPacksResponse, GetActorTakedownRequest, GetActorTakedownResponse, GetAllLabelersRequest, GetAllLabelersResponse, GetAuthorFeedRequest, GetAuthorFeedResponse, GetBidirectionalBlockRequest, GetBidirectionalBlockResponse, GetBidirectionalBlockViaListRequest, GetBidirectionalBlockViaListResponse, GetBlobTakedownRequest, GetBlobTakedownResponse, GetBlockExistenceRequest, GetBlockExistenceResponse, GetBlocklistSubscriptionRequest, GetBlocklistSubscriptionResponse, GetBlocklistSubscriptionsRequest, GetBlocklistSubscriptionsResponse, GetBlockRecordsRequest, GetBlockRecordsResponse, GetBlocksRequest, GetBlocksResponse, GetBookmarksByActorAndSubjectsRequest, GetBookmarksByActorAndSubjectsResponse, GetCountsForUsersRequest, GetCountsForUsersResponse, GetDidsByHandlesRequest, GetDidsByHandlesResponse, GetFeedGeneratorRecordsRequest, GetFeedGeneratorRecordsResponse, GetFeedGeneratorStatusRequest, GetFeedGeneratorStatusResponse, GetFollowersRequest, GetFollowersResponse, GetFollowRecordsRequest, GetFollowRecordsResponse, GetFollowsFollowingRequest, GetFollowsFollowingResponse, GetFollowsRequest, GetFollowsResponse, GetFollowSuggestionsRequest, GetFollowSuggestionsResponse, GetIdentityByDidRequest, GetIdentityByDidResponse, GetIdentityByHandleRequest, GetIdentityByHandleResponse, GetInteractionCountsRequest, GetInteractionCountsResponse, GetLabelerRecordsRequest, GetLabelerRecordsResponse, GetLabelsRequest, GetLabelsResponse, GetLatestRevRequest, GetLatestRevResponse, GetLikeRecordsRequest, GetLikeRecordsResponse, GetLikesByActorAndSubjectsRequest, GetLikesByActorAndSubjectsResponse, GetLikesBySubjectRequest, GetLikesBySubjectResponse, GetLikesBySubjectSortedRequest, GetLikesBySubjectSortedResponse, GetListBlockRecordsRequest, GetListBlockRecordsResponse, GetListCountRequest, GetListCountResponse, GetListCountsRequest, GetListCountsResponse, GetListFeedRequest, GetListFeedResponse, GetListItemRecordsRequest, GetListItemRecordsResponse, GetListMembershipRequest, GetListMembershipResponse, GetListMembersRequest, GetListMembersResponse, GetListRecordsRequest, GetListRecordsResponse, GetMutelistSubscriptionRequest, GetMutelistSubscriptionResponse, GetMutelistSubscriptionsRequest, GetMutelistSubscriptionsResponse, GetMutesRequest, GetMutesResponse, GetNewUserCountForRangeRequest, GetNewUserCountForRangeResponse, GetNotificationDeclarationRecordsRequest, GetNotificationDeclarationRecordsResponse, GetNotificationPreferencesRequest, GetNotificationPreferencesResponse, GetNotificationSeenRequest, GetNotificationSeenResponse, GetNotificationsRequest, GetNotificationsResponse, GetPostgateRecordsRequest, GetPostgateRecordsResponse, GetPostRecordsRequest, GetPostRecordsResponse, GetProfileRecordsRequest, GetProfileRecordsResponse, GetQuotesBySubjectSortedRequest, GetQuotesBySubjectSortedResponse, GetRecordTakedownRequest, GetRecordTakedownResponse, GetRelationshipsRequest, GetRelationshipsResponse, GetRepostRecordsRequest, GetRepostRecordsResponse, GetRepostsByActorAndSubjectsRequest, GetRepostsByActorAndSubjectsResponse, GetRepostsBySubjectRequest, GetRepostsBySubjectResponse, GetStarterPackCountsRequest, GetStarterPackCountsResponse, GetStarterPackRecordsRequest, GetStarterPackRecordsResponse, GetStatusRecordsRequest, GetStatusRecordsResponse, GetSuggestedEntitiesRequest, GetSuggestedEntitiesResponse, GetSuggestedFeedsRequest, GetSuggestedFeedsResponse, GetThreadGateRecordsRequest, GetThreadGateRecordsResponse, GetThreadMutesOnSubjectsRequest, GetThreadMutesOnSubjectsResponse, GetThreadRequest, GetThreadResponse, GetTimelineRequest, GetTimelineResponse, GetUnreadNotificationCountRequest, GetUnreadNotificationCountResponse, GetVerificationRecordsRequest, GetVerificationRecordsResponse, GetVerificationsIssuedRequest, GetVerificationsIssuedResponse, GetVerificationsReceivedRequest, GetVerificationsReceivedResponse, PingRequest, PingResponse, SearchActorsRequest, SearchActorsResponse, SearchFeedGeneratorsRequest, SearchFeedGeneratorsResponse, SearchPostsRequest, SearchPostsResponse, SearchStarterPacksRequest, SearchStarterPacksResponse, TakedownActorRequest, TakedownActorResponse, TakedownBlobRequest, TakedownBlobResponse, TakedownRecordRequest, TakedownRecordResponse, UntakedownActorRequest, UntakedownActorResponse, UntakedownBlobRequest, UntakedownBlobResponse, UntakedownRecordRequest, UntakedownRecordResponse, UpdateActorUpstreamStatusRequest, UpdateActorUpstreamStatusResponse, UpdateNotificationSeenRequest, UpdateNotificationSeenResponse } from "./bsky_pb";
|
|
6
|
+
import { ClearActorMutelistSubscriptionsRequest, ClearActorMutelistSubscriptionsResponse, ClearActorMutesRequest, ClearActorMutesResponse, ClearThreadMutesRequest, ClearThreadMutesResponse, CreateActorMutelistSubscriptionRequest, CreateActorMutelistSubscriptionResponse, CreateActorMuteRequest, CreateActorMuteResponse, CreateThreadMuteRequest, CreateThreadMuteResponse, DeleteActorMutelistSubscriptionRequest, DeleteActorMutelistSubscriptionResponse, DeleteActorMuteRequest, DeleteActorMuteResponse, DeleteThreadMuteRequest, DeleteThreadMuteResponse, GetActivitySubscriptionDidsRequest, GetActivitySubscriptionDidsResponse, GetActivitySubscriptionsByActorAndSubjectsRequest, GetActivitySubscriptionsByActorAndSubjectsResponse, GetActorBookmarksRequest, GetActorBookmarksResponse, GetActorChatDeclarationRecordsRequest, GetActorChatDeclarationRecordsResponse, GetActorFeedsRequest, GetActorFeedsResponse, GetActorFollowsActorsRequest, GetActorFollowsActorsResponse, GetActorLikesRequest, GetActorLikesResponse, GetActorListsRequest, GetActorListsResponse, GetActorMutesActorRequest, GetActorMutesActorResponse, GetActorMutesActorViaListRequest, GetActorMutesActorViaListResponse, GetActorRepostsRequest, GetActorRepostsResponse, GetActorsRequest, GetActorsResponse, GetActorStarterPacksRequest, GetActorStarterPacksResponse, GetActorTakedownRequest, GetActorTakedownResponse, GetAllLabelersRequest, GetAllLabelersResponse, GetAuthorFeedRequest, GetAuthorFeedResponse, GetBidirectionalBlockRequest, GetBidirectionalBlockResponse, GetBidirectionalBlockViaListRequest, GetBidirectionalBlockViaListResponse, GetBlobTakedownRequest, GetBlobTakedownResponse, GetBlockExistenceRequest, GetBlockExistenceResponse, GetBlocklistSubscriptionRequest, GetBlocklistSubscriptionResponse, GetBlocklistSubscriptionsRequest, GetBlocklistSubscriptionsResponse, GetBlockRecordsRequest, GetBlockRecordsResponse, GetBlocksRequest, GetBlocksResponse, GetBookmarksByActorAndSubjectsRequest, GetBookmarksByActorAndSubjectsResponse, GetCountsForUsersRequest, GetCountsForUsersResponse, GetDidsByHandlesRequest, GetDidsByHandlesResponse, GetFeedGeneratorRecordsRequest, GetFeedGeneratorRecordsResponse, GetFeedGeneratorStatusRequest, GetFeedGeneratorStatusResponse, GetFollowersRequest, GetFollowersResponse, GetFollowRecordsRequest, GetFollowRecordsResponse, GetFollowsFollowingRequest, GetFollowsFollowingResponse, GetFollowsRequest, GetFollowsResponse, GetFollowSuggestionsRequest, GetFollowSuggestionsResponse, GetIdentityByDidRequest, GetIdentityByDidResponse, GetIdentityByHandleRequest, GetIdentityByHandleResponse, GetInteractionCountsRequest, GetInteractionCountsResponse, GetLabelerRecordsRequest, GetLabelerRecordsResponse, GetLabelsRequest, GetLabelsResponse, GetLatestRevRequest, GetLatestRevResponse, GetLikeRecordsRequest, GetLikeRecordsResponse, GetLikesByActorAndSubjectsRequest, GetLikesByActorAndSubjectsResponse, GetLikesBySubjectRequest, GetLikesBySubjectResponse, GetLikesBySubjectSortedRequest, GetLikesBySubjectSortedResponse, GetListBlockRecordsRequest, GetListBlockRecordsResponse, GetListCountRequest, GetListCountResponse, GetListCountsRequest, GetListCountsResponse, GetListFeedRequest, GetListFeedResponse, GetListItemRecordsRequest, GetListItemRecordsResponse, GetListMembershipRequest, GetListMembershipResponse, GetListMembersRequest, GetListMembersResponse, GetListRecordsRequest, GetListRecordsResponse, GetMutelistSubscriptionRequest, GetMutelistSubscriptionResponse, GetMutelistSubscriptionsRequest, GetMutelistSubscriptionsResponse, GetMutesRequest, GetMutesResponse, GetNewUserCountForRangeRequest, GetNewUserCountForRangeResponse, GetNotificationDeclarationRecordsRequest, GetNotificationDeclarationRecordsResponse, GetNotificationPreferencesRequest, GetNotificationPreferencesResponse, GetNotificationSeenRequest, GetNotificationSeenResponse, GetNotificationsRequest, GetNotificationsResponse, GetPostgateRecordsRequest, GetPostgateRecordsResponse, GetPostRecordsRequest, GetPostRecordsResponse, GetProfileRecordsRequest, GetProfileRecordsResponse, GetQuotesBySubjectSortedRequest, GetQuotesBySubjectSortedResponse, GetRecordTakedownRequest, GetRecordTakedownResponse, GetRelationshipsRequest, GetRelationshipsResponse, GetRepostRecordsRequest, GetRepostRecordsResponse, GetRepostsByActorAndSubjectsRequest, GetRepostsByActorAndSubjectsResponse, GetRepostsBySubjectRequest, GetRepostsBySubjectResponse, GetSitemapIndexRequest, GetSitemapIndexResponse, GetSitemapPageRequest, GetSitemapPageResponse, GetStarterPackCountsRequest, GetStarterPackCountsResponse, GetStarterPackRecordsRequest, GetStarterPackRecordsResponse, GetStatusRecordsRequest, GetStatusRecordsResponse, GetSuggestedEntitiesRequest, GetSuggestedEntitiesResponse, GetSuggestedFeedsRequest, GetSuggestedFeedsResponse, GetThreadGateRecordsRequest, GetThreadGateRecordsResponse, GetThreadMutesOnSubjectsRequest, GetThreadMutesOnSubjectsResponse, GetThreadRequest, GetThreadResponse, GetTimelineRequest, GetTimelineResponse, GetUnreadNotificationCountRequest, GetUnreadNotificationCountResponse, GetVerificationRecordsRequest, GetVerificationRecordsResponse, GetVerificationsIssuedRequest, GetVerificationsIssuedResponse, GetVerificationsReceivedRequest, GetVerificationsReceivedResponse, PingRequest, PingResponse, SearchActorsRequest, SearchActorsResponse, SearchFeedGeneratorsRequest, SearchFeedGeneratorsResponse, SearchPostsRequest, SearchPostsResponse, SearchStarterPacksRequest, SearchStarterPacksResponse, TakedownActorRequest, TakedownActorResponse, TakedownBlobRequest, TakedownBlobResponse, TakedownRecordRequest, TakedownRecordResponse, UntakedownActorRequest, UntakedownActorResponse, UntakedownBlobRequest, UntakedownBlobResponse, UntakedownRecordRequest, UntakedownRecordResponse, UpdateActorUpstreamStatusRequest, UpdateActorUpstreamStatusResponse, UpdateNotificationSeenRequest, UpdateNotificationSeenResponse } from "./bsky_pb";
|
|
7
7
|
import { MethodKind } from "@bufbuild/protobuf";
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -858,6 +858,26 @@ export const Service = {
|
|
|
858
858
|
O: GetFollowsFollowingResponse,
|
|
859
859
|
kind: MethodKind.Unary,
|
|
860
860
|
},
|
|
861
|
+
/**
|
|
862
|
+
* Sitemaps
|
|
863
|
+
*
|
|
864
|
+
* @generated from rpc bsky.Service.GetSitemapIndex
|
|
865
|
+
*/
|
|
866
|
+
getSitemapIndex: {
|
|
867
|
+
name: "GetSitemapIndex",
|
|
868
|
+
I: GetSitemapIndexRequest,
|
|
869
|
+
O: GetSitemapIndexResponse,
|
|
870
|
+
kind: MethodKind.Unary,
|
|
871
|
+
},
|
|
872
|
+
/**
|
|
873
|
+
* @generated from rpc bsky.Service.GetSitemapPage
|
|
874
|
+
*/
|
|
875
|
+
getSitemapPage: {
|
|
876
|
+
name: "GetSitemapPage",
|
|
877
|
+
I: GetSitemapPageRequest,
|
|
878
|
+
O: GetSitemapPageResponse,
|
|
879
|
+
kind: MethodKind.Unary,
|
|
880
|
+
},
|
|
861
881
|
/**
|
|
862
882
|
* Ping
|
|
863
883
|
*
|
package/src/proto/bsky_pb.ts
CHANGED
|
@@ -96,6 +96,26 @@ proto3.util.setEnumType(FeedType, "bsky.FeedType", [
|
|
|
96
96
|
{ no: 4, name: "FEED_TYPE_POSTS_WITH_VIDEO" },
|
|
97
97
|
]);
|
|
98
98
|
|
|
99
|
+
/**
|
|
100
|
+
* @generated from enum bsky.SitemapPageType
|
|
101
|
+
*/
|
|
102
|
+
export enum SitemapPageType {
|
|
103
|
+
/**
|
|
104
|
+
* @generated from enum value: SITEMAP_PAGE_TYPE_UNSPECIFIED = 0;
|
|
105
|
+
*/
|
|
106
|
+
UNSPECIFIED = 0,
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @generated from enum value: SITEMAP_PAGE_TYPE_USER = 1;
|
|
110
|
+
*/
|
|
111
|
+
USER = 1,
|
|
112
|
+
}
|
|
113
|
+
// Retrieve enum metadata with: proto3.getEnumType(SitemapPageType)
|
|
114
|
+
proto3.util.setEnumType(SitemapPageType, "bsky.SitemapPageType", [
|
|
115
|
+
{ no: 0, name: "SITEMAP_PAGE_TYPE_UNSPECIFIED" },
|
|
116
|
+
{ no: 1, name: "SITEMAP_PAGE_TYPE_USER" },
|
|
117
|
+
]);
|
|
118
|
+
|
|
99
119
|
/**
|
|
100
120
|
* @generated from message bsky.Record
|
|
101
121
|
*/
|
|
@@ -9391,6 +9411,174 @@ export class GetFollowsFollowingResponse extends Message<GetFollowsFollowingResp
|
|
|
9391
9411
|
}
|
|
9392
9412
|
}
|
|
9393
9413
|
|
|
9414
|
+
/**
|
|
9415
|
+
* @generated from message bsky.GetSitemapIndexRequest
|
|
9416
|
+
*/
|
|
9417
|
+
export class GetSitemapIndexRequest extends Message<GetSitemapIndexRequest> {
|
|
9418
|
+
/**
|
|
9419
|
+
* @generated from field: bsky.SitemapPageType type = 1;
|
|
9420
|
+
*/
|
|
9421
|
+
type = SitemapPageType.UNSPECIFIED;
|
|
9422
|
+
|
|
9423
|
+
constructor(data?: PartialMessage<GetSitemapIndexRequest>) {
|
|
9424
|
+
super();
|
|
9425
|
+
proto3.util.initPartial(data, this);
|
|
9426
|
+
}
|
|
9427
|
+
|
|
9428
|
+
static readonly runtime: typeof proto3 = proto3;
|
|
9429
|
+
static readonly typeName = "bsky.GetSitemapIndexRequest";
|
|
9430
|
+
static readonly fields: FieldList = proto3.util.newFieldList(() => [
|
|
9431
|
+
{ no: 1, name: "type", kind: "enum", T: proto3.getEnumType(SitemapPageType) },
|
|
9432
|
+
]);
|
|
9433
|
+
|
|
9434
|
+
static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetSitemapIndexRequest {
|
|
9435
|
+
return new GetSitemapIndexRequest().fromBinary(bytes, options);
|
|
9436
|
+
}
|
|
9437
|
+
|
|
9438
|
+
static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetSitemapIndexRequest {
|
|
9439
|
+
return new GetSitemapIndexRequest().fromJson(jsonValue, options);
|
|
9440
|
+
}
|
|
9441
|
+
|
|
9442
|
+
static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetSitemapIndexRequest {
|
|
9443
|
+
return new GetSitemapIndexRequest().fromJsonString(jsonString, options);
|
|
9444
|
+
}
|
|
9445
|
+
|
|
9446
|
+
static equals(a: GetSitemapIndexRequest | PlainMessage<GetSitemapIndexRequest> | undefined, b: GetSitemapIndexRequest | PlainMessage<GetSitemapIndexRequest> | undefined): boolean {
|
|
9447
|
+
return proto3.util.equals(GetSitemapIndexRequest, a, b);
|
|
9448
|
+
}
|
|
9449
|
+
}
|
|
9450
|
+
|
|
9451
|
+
/**
|
|
9452
|
+
* @generated from message bsky.GetSitemapIndexResponse
|
|
9453
|
+
*/
|
|
9454
|
+
export class GetSitemapIndexResponse extends Message<GetSitemapIndexResponse> {
|
|
9455
|
+
/**
|
|
9456
|
+
* GZIP compressed XML sitemap
|
|
9457
|
+
*
|
|
9458
|
+
* @generated from field: bytes sitemap = 1;
|
|
9459
|
+
*/
|
|
9460
|
+
sitemap = new Uint8Array(0);
|
|
9461
|
+
|
|
9462
|
+
constructor(data?: PartialMessage<GetSitemapIndexResponse>) {
|
|
9463
|
+
super();
|
|
9464
|
+
proto3.util.initPartial(data, this);
|
|
9465
|
+
}
|
|
9466
|
+
|
|
9467
|
+
static readonly runtime: typeof proto3 = proto3;
|
|
9468
|
+
static readonly typeName = "bsky.GetSitemapIndexResponse";
|
|
9469
|
+
static readonly fields: FieldList = proto3.util.newFieldList(() => [
|
|
9470
|
+
{ no: 1, name: "sitemap", kind: "scalar", T: 12 /* ScalarType.BYTES */ },
|
|
9471
|
+
]);
|
|
9472
|
+
|
|
9473
|
+
static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetSitemapIndexResponse {
|
|
9474
|
+
return new GetSitemapIndexResponse().fromBinary(bytes, options);
|
|
9475
|
+
}
|
|
9476
|
+
|
|
9477
|
+
static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetSitemapIndexResponse {
|
|
9478
|
+
return new GetSitemapIndexResponse().fromJson(jsonValue, options);
|
|
9479
|
+
}
|
|
9480
|
+
|
|
9481
|
+
static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetSitemapIndexResponse {
|
|
9482
|
+
return new GetSitemapIndexResponse().fromJsonString(jsonString, options);
|
|
9483
|
+
}
|
|
9484
|
+
|
|
9485
|
+
static equals(a: GetSitemapIndexResponse | PlainMessage<GetSitemapIndexResponse> | undefined, b: GetSitemapIndexResponse | PlainMessage<GetSitemapIndexResponse> | undefined): boolean {
|
|
9486
|
+
return proto3.util.equals(GetSitemapIndexResponse, a, b);
|
|
9487
|
+
}
|
|
9488
|
+
}
|
|
9489
|
+
|
|
9490
|
+
/**
|
|
9491
|
+
* Sitemap HTTP paths are typically of the form `/type/yyyy-mm-dd/N.xml.gz`, i.e. `/users/2025-01-01/1.xml.gz`
|
|
9492
|
+
*
|
|
9493
|
+
* @generated from message bsky.GetSitemapPageRequest
|
|
9494
|
+
*/
|
|
9495
|
+
export class GetSitemapPageRequest extends Message<GetSitemapPageRequest> {
|
|
9496
|
+
/**
|
|
9497
|
+
* @generated from field: bsky.SitemapPageType type = 1;
|
|
9498
|
+
*/
|
|
9499
|
+
type = SitemapPageType.UNSPECIFIED;
|
|
9500
|
+
|
|
9501
|
+
/**
|
|
9502
|
+
* @generated from field: google.protobuf.Timestamp date = 2;
|
|
9503
|
+
*/
|
|
9504
|
+
date?: Timestamp;
|
|
9505
|
+
|
|
9506
|
+
/**
|
|
9507
|
+
* One-indexed
|
|
9508
|
+
*
|
|
9509
|
+
* @generated from field: int32 bucket = 3;
|
|
9510
|
+
*/
|
|
9511
|
+
bucket = 0;
|
|
9512
|
+
|
|
9513
|
+
constructor(data?: PartialMessage<GetSitemapPageRequest>) {
|
|
9514
|
+
super();
|
|
9515
|
+
proto3.util.initPartial(data, this);
|
|
9516
|
+
}
|
|
9517
|
+
|
|
9518
|
+
static readonly runtime: typeof proto3 = proto3;
|
|
9519
|
+
static readonly typeName = "bsky.GetSitemapPageRequest";
|
|
9520
|
+
static readonly fields: FieldList = proto3.util.newFieldList(() => [
|
|
9521
|
+
{ no: 1, name: "type", kind: "enum", T: proto3.getEnumType(SitemapPageType) },
|
|
9522
|
+
{ no: 2, name: "date", kind: "message", T: Timestamp },
|
|
9523
|
+
{ no: 3, name: "bucket", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
|
|
9524
|
+
]);
|
|
9525
|
+
|
|
9526
|
+
static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetSitemapPageRequest {
|
|
9527
|
+
return new GetSitemapPageRequest().fromBinary(bytes, options);
|
|
9528
|
+
}
|
|
9529
|
+
|
|
9530
|
+
static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetSitemapPageRequest {
|
|
9531
|
+
return new GetSitemapPageRequest().fromJson(jsonValue, options);
|
|
9532
|
+
}
|
|
9533
|
+
|
|
9534
|
+
static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetSitemapPageRequest {
|
|
9535
|
+
return new GetSitemapPageRequest().fromJsonString(jsonString, options);
|
|
9536
|
+
}
|
|
9537
|
+
|
|
9538
|
+
static equals(a: GetSitemapPageRequest | PlainMessage<GetSitemapPageRequest> | undefined, b: GetSitemapPageRequest | PlainMessage<GetSitemapPageRequest> | undefined): boolean {
|
|
9539
|
+
return proto3.util.equals(GetSitemapPageRequest, a, b);
|
|
9540
|
+
}
|
|
9541
|
+
}
|
|
9542
|
+
|
|
9543
|
+
/**
|
|
9544
|
+
* @generated from message bsky.GetSitemapPageResponse
|
|
9545
|
+
*/
|
|
9546
|
+
export class GetSitemapPageResponse extends Message<GetSitemapPageResponse> {
|
|
9547
|
+
/**
|
|
9548
|
+
* GZIP compressed XML sitemap
|
|
9549
|
+
*
|
|
9550
|
+
* @generated from field: bytes sitemap = 1;
|
|
9551
|
+
*/
|
|
9552
|
+
sitemap = new Uint8Array(0);
|
|
9553
|
+
|
|
9554
|
+
constructor(data?: PartialMessage<GetSitemapPageResponse>) {
|
|
9555
|
+
super();
|
|
9556
|
+
proto3.util.initPartial(data, this);
|
|
9557
|
+
}
|
|
9558
|
+
|
|
9559
|
+
static readonly runtime: typeof proto3 = proto3;
|
|
9560
|
+
static readonly typeName = "bsky.GetSitemapPageResponse";
|
|
9561
|
+
static readonly fields: FieldList = proto3.util.newFieldList(() => [
|
|
9562
|
+
{ no: 1, name: "sitemap", kind: "scalar", T: 12 /* ScalarType.BYTES */ },
|
|
9563
|
+
]);
|
|
9564
|
+
|
|
9565
|
+
static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetSitemapPageResponse {
|
|
9566
|
+
return new GetSitemapPageResponse().fromBinary(bytes, options);
|
|
9567
|
+
}
|
|
9568
|
+
|
|
9569
|
+
static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetSitemapPageResponse {
|
|
9570
|
+
return new GetSitemapPageResponse().fromJson(jsonValue, options);
|
|
9571
|
+
}
|
|
9572
|
+
|
|
9573
|
+
static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetSitemapPageResponse {
|
|
9574
|
+
return new GetSitemapPageResponse().fromJsonString(jsonString, options);
|
|
9575
|
+
}
|
|
9576
|
+
|
|
9577
|
+
static equals(a: GetSitemapPageResponse | PlainMessage<GetSitemapPageResponse> | undefined, b: GetSitemapPageResponse | PlainMessage<GetSitemapPageResponse> | undefined): boolean {
|
|
9578
|
+
return proto3.util.equals(GetSitemapPageResponse, a, b);
|
|
9579
|
+
}
|
|
9580
|
+
}
|
|
9581
|
+
|
|
9394
9582
|
/**
|
|
9395
9583
|
* Ping
|
|
9396
9584
|
*
|
package/src/stash.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { BsyncClient } from './bsync'
|
|
|
5
5
|
import { lexicons } from './lexicon/lexicons'
|
|
6
6
|
import { Event as AgeAssuranceEventV2 } from './lexicon/types/app/bsky/ageassurance/defs'
|
|
7
7
|
import { Bookmark } from './lexicon/types/app/bsky/bookmark/defs'
|
|
8
|
+
import { Notification } from './lexicon/types/app/bsky/contact/defs'
|
|
8
9
|
import {
|
|
9
10
|
Preferences,
|
|
10
11
|
SubjectActivitySubscription,
|
|
@@ -15,16 +16,18 @@ import { Method } from './proto/bsync_pb'
|
|
|
15
16
|
type PickNSID<T extends { $type?: string }> = Exclude<T['$type'], undefined>
|
|
16
17
|
|
|
17
18
|
export const Namespaces = {
|
|
19
|
+
AppBskyAgeassuranceDefsEvent:
|
|
20
|
+
'app.bsky.ageassurance.defs#event' satisfies PickNSID<AgeAssuranceEventV2>,
|
|
18
21
|
AppBskyBookmarkDefsBookmark:
|
|
19
22
|
'app.bsky.bookmark.defs#bookmark' satisfies PickNSID<Bookmark>,
|
|
23
|
+
AppBskyContactDefsNotification:
|
|
24
|
+
'app.bsky.contact.defs#notification' satisfies PickNSID<Notification>,
|
|
20
25
|
AppBskyNotificationDefsPreferences:
|
|
21
26
|
'app.bsky.notification.defs#preferences' satisfies PickNSID<Preferences>,
|
|
22
27
|
AppBskyNotificationDefsSubjectActivitySubscription:
|
|
23
28
|
'app.bsky.notification.defs#subjectActivitySubscription' satisfies PickNSID<SubjectActivitySubscription>,
|
|
24
29
|
AppBskyUnspeccedDefsAgeAssuranceEvent:
|
|
25
30
|
'app.bsky.unspecced.defs#ageAssuranceEvent' satisfies PickNSID<AgeAssuranceEvent>,
|
|
26
|
-
AppBskyAgeassuranceDefsEvent:
|
|
27
|
-
'app.bsky.ageassurance.defs#event' satisfies PickNSID<AgeAssuranceEventV2>,
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
export type Namespace = (typeof Namespaces)[keyof typeof Namespaces]
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { TestNetwork } from '@atproto/dev-env'
|
|
2
|
+
|
|
3
|
+
describe('sitemap', () => {
|
|
4
|
+
let network: TestNetwork
|
|
5
|
+
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
network = await TestNetwork.create({
|
|
8
|
+
dbPostgresSchema: 'bsky_sitemap',
|
|
9
|
+
})
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
afterAll(async () => {
|
|
13
|
+
await network.close()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('returns sitemap index', async () => {
|
|
17
|
+
const response = await fetch(
|
|
18
|
+
`${network.bsky.url}/external/sitemap/users.xml.gz`,
|
|
19
|
+
)
|
|
20
|
+
expect(response.status).toEqual(200)
|
|
21
|
+
expect(response.headers.get('content-type')).toEqual('application/gzip')
|
|
22
|
+
expect(response.headers.get('content-encoding')).toEqual('gzip')
|
|
23
|
+
|
|
24
|
+
// fetch automatically decompresses gzip when Content-Encoding is set
|
|
25
|
+
const xml = await response.text()
|
|
26
|
+
|
|
27
|
+
expect(xml).toContain('<?xml version="1.0" encoding="UTF-8"?>')
|
|
28
|
+
expect(xml).toContain('<sitemapindex')
|
|
29
|
+
expect(xml).toContain('</sitemapindex>')
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('returns sitemap page', async () => {
|
|
33
|
+
const response = await fetch(
|
|
34
|
+
`${network.bsky.url}/external/sitemap/users/2025-01-01/1.xml.gz`,
|
|
35
|
+
)
|
|
36
|
+
expect(response.status).toEqual(200)
|
|
37
|
+
expect(response.headers.get('content-type')).toEqual('application/gzip')
|
|
38
|
+
expect(response.headers.get('content-encoding')).toEqual('gzip')
|
|
39
|
+
|
|
40
|
+
// fetch automatically decompresses gzip when Content-Encoding is set
|
|
41
|
+
const xml = await response.text()
|
|
42
|
+
|
|
43
|
+
expect(xml).toContain('<?xml version="1.0" encoding="UTF-8"?>')
|
|
44
|
+
expect(xml).toContain('<urlset')
|
|
45
|
+
expect(xml).toContain('</urlset>')
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('returns 400 for invalid date format', async () => {
|
|
49
|
+
const response = await fetch(
|
|
50
|
+
`${network.bsky.url}/external/sitemap/users/invalid-date/1.xml.gz`,
|
|
51
|
+
)
|
|
52
|
+
expect(response.status).toEqual(400)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
it('returns 400 for invalid bucket number', async () => {
|
|
56
|
+
const response = await fetch(
|
|
57
|
+
`${network.bsky.url}/external/sitemap/users/2025-01-01/0.xml.gz`,
|
|
58
|
+
)
|
|
59
|
+
expect(response.status).toEqual(400)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
it('returns 400 for non-numeric bucket', async () => {
|
|
63
|
+
const response = await fetch(
|
|
64
|
+
`${network.bsky.url}/external/sitemap/users/2025-01-01/abc.xml.gz`,
|
|
65
|
+
)
|
|
66
|
+
expect(response.status).toEqual(400)
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
it('returns 404 for non-existent sitemap page', async () => {
|
|
70
|
+
const response = await fetch(
|
|
71
|
+
`${network.bsky.url}/external/sitemap/users/2024-01-01/1.xml.gz`,
|
|
72
|
+
)
|
|
73
|
+
expect(response.status).toEqual(404)
|
|
74
|
+
})
|
|
75
|
+
})
|
|
@@ -519,7 +519,39 @@ describe('age assurance v2 views', () => {
|
|
|
519
519
|
})
|
|
520
520
|
|
|
521
521
|
describe('misc', () => {
|
|
522
|
-
|
|
522
|
+
/*
|
|
523
|
+
* This is a silly test, but it did help me uncover a local data-plane
|
|
524
|
+
* implementation bug. Let's leave it here for additional safety.
|
|
525
|
+
*/
|
|
526
|
+
it('expects access to be safe', async () => {
|
|
527
|
+
await kws.redirectV2({
|
|
528
|
+
externalPayload: serializeKWSExternalPayloadV2({
|
|
529
|
+
version: KWSExternalPayloadVersion.V2,
|
|
530
|
+
actorDid: actor.did,
|
|
531
|
+
attemptId: crypto.randomUUID(),
|
|
532
|
+
countryCode: 'AA',
|
|
533
|
+
}),
|
|
534
|
+
status: serializeKWSAgeVerifiedStatus({
|
|
535
|
+
verified: true,
|
|
536
|
+
verifiedMinimumAge: 16,
|
|
537
|
+
}),
|
|
538
|
+
})
|
|
539
|
+
await network.processAll()
|
|
540
|
+
const { state } = await getState({
|
|
541
|
+
countryCode: 'AA',
|
|
542
|
+
})
|
|
543
|
+
expect(state.status).toEqual('assured')
|
|
544
|
+
expect(state.access).toEqual('safe')
|
|
545
|
+
})
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* We only block re-init if the user is in a `blocked` state, which is not
|
|
549
|
+
* testable using the local dataplane at the moment. The test below
|
|
550
|
+
* reflects v1 handling.
|
|
551
|
+
*
|
|
552
|
+
* Skipping for now, but this handling is implemented in v2.
|
|
553
|
+
*/
|
|
554
|
+
it.skip('cannot re-init from terminal state', async () => {
|
|
523
555
|
await kws.redirectV2({
|
|
524
556
|
externalPayload: serializeKWSExternalPayloadV2({
|
|
525
557
|
version: KWSExternalPayloadVersion.V2,
|
|
@@ -539,6 +571,32 @@ describe('age assurance v2 views', () => {
|
|
|
539
571
|
await expect(call).rejects.toHaveProperty('error', 'InvalidInitiation')
|
|
540
572
|
})
|
|
541
573
|
|
|
574
|
+
it('re-init from terminal state retains existing status', async () => {
|
|
575
|
+
await kws.redirectV2({
|
|
576
|
+
externalPayload: serializeKWSExternalPayloadV2({
|
|
577
|
+
version: KWSExternalPayloadVersion.V2,
|
|
578
|
+
actorDid: actor.did,
|
|
579
|
+
attemptId: crypto.randomUUID(),
|
|
580
|
+
countryCode: 'AA',
|
|
581
|
+
}),
|
|
582
|
+
status: serializeKWSAgeVerifiedStatus({
|
|
583
|
+
verified: true,
|
|
584
|
+
verifiedMinimumAge: 16,
|
|
585
|
+
}),
|
|
586
|
+
})
|
|
587
|
+
await network.processAll()
|
|
588
|
+
const { state } = await getState({
|
|
589
|
+
countryCode: 'AA',
|
|
590
|
+
})
|
|
591
|
+
expect(state.status).toEqual('assured')
|
|
592
|
+
expect(state.access).toEqual('safe')
|
|
593
|
+
const res = await beginAgeAssurance({
|
|
594
|
+
countryCode: 'AA',
|
|
595
|
+
})
|
|
596
|
+
expect(res.status).toEqual('assured')
|
|
597
|
+
expect(res.access).toEqual('safe')
|
|
598
|
+
})
|
|
599
|
+
|
|
542
600
|
/*
|
|
543
601
|
* This tests local dataplane behavior, but the actual prod implementation
|
|
544
602
|
* lives in the dataplane repo, obviously.
|