@atproto/bsky 0.0.199 → 0.0.200

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.
Files changed (145) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/api/app/bsky/contact/dismissMatch.d.ts +4 -0
  3. package/dist/api/app/bsky/contact/dismissMatch.d.ts.map +1 -0
  4. package/dist/api/app/bsky/contact/dismissMatch.js +23 -0
  5. package/dist/api/app/bsky/contact/dismissMatch.js.map +1 -0
  6. package/dist/api/app/bsky/contact/getMatches.d.ts +4 -0
  7. package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -0
  8. package/dist/api/app/bsky/contact/getMatches.js +59 -0
  9. package/dist/api/app/bsky/contact/getMatches.js.map +1 -0
  10. package/dist/api/app/bsky/contact/getSyncStatus.d.ts +4 -0
  11. package/dist/api/app/bsky/contact/getSyncStatus.d.ts.map +1 -0
  12. package/dist/api/app/bsky/contact/getSyncStatus.js +32 -0
  13. package/dist/api/app/bsky/contact/getSyncStatus.js.map +1 -0
  14. package/dist/api/app/bsky/contact/importContacts.d.ts +4 -0
  15. package/dist/api/app/bsky/contact/importContacts.d.ts.map +1 -0
  16. package/dist/api/app/bsky/contact/importContacts.js +62 -0
  17. package/dist/api/app/bsky/contact/importContacts.js.map +1 -0
  18. package/dist/api/app/bsky/contact/removeData.d.ts +4 -0
  19. package/dist/api/app/bsky/contact/removeData.d.ts.map +1 -0
  20. package/dist/api/app/bsky/contact/removeData.js +22 -0
  21. package/dist/api/app/bsky/contact/removeData.js.map +1 -0
  22. package/dist/api/app/bsky/contact/startPhoneVerification.d.ts +4 -0
  23. package/dist/api/app/bsky/contact/startPhoneVerification.d.ts.map +1 -0
  24. package/dist/api/app/bsky/contact/startPhoneVerification.js +23 -0
  25. package/dist/api/app/bsky/contact/startPhoneVerification.js.map +1 -0
  26. package/dist/api/app/bsky/contact/util.d.ts +6 -0
  27. package/dist/api/app/bsky/contact/util.d.ts.map +1 -0
  28. package/dist/api/app/bsky/contact/util.js +10 -0
  29. package/dist/api/app/bsky/contact/util.js.map +1 -0
  30. package/dist/api/app/bsky/contact/verifyPhone.d.ts +4 -0
  31. package/dist/api/app/bsky/contact/verifyPhone.d.ts.map +1 -0
  32. package/dist/api/app/bsky/contact/verifyPhone.js +26 -0
  33. package/dist/api/app/bsky/contact/verifyPhone.js.map +1 -0
  34. package/dist/api/app/bsky/graph/getRelationships.d.ts.map +1 -1
  35. package/dist/api/app/bsky/graph/getRelationships.js +4 -0
  36. package/dist/api/app/bsky/graph/getRelationships.js.map +1 -1
  37. package/dist/api/index.d.ts.map +1 -1
  38. package/dist/api/index.js +14 -0
  39. package/dist/api/index.js.map +1 -1
  40. package/dist/config.d.ts +8 -0
  41. package/dist/config.d.ts.map +1 -1
  42. package/dist/config.js +21 -0
  43. package/dist/config.js.map +1 -1
  44. package/dist/context.d.ts +3 -0
  45. package/dist/context.d.ts.map +1 -1
  46. package/dist/context.js +3 -0
  47. package/dist/context.js.map +1 -1
  48. package/dist/hydration/actor.js +1 -1
  49. package/dist/hydration/actor.js.map +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +12 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/lexicon/index.d.ts +19 -0
  54. package/dist/lexicon/index.d.ts.map +1 -1
  55. package/dist/lexicon/index.js +48 -1
  56. package/dist/lexicon/index.js.map +1 -1
  57. package/dist/lexicon/lexicons.d.ts +664 -0
  58. package/dist/lexicon/lexicons.d.ts.map +1 -1
  59. package/dist/lexicon/lexicons.js +354 -0
  60. package/dist/lexicon/lexicons.js.map +1 -1
  61. package/dist/lexicon/types/app/bsky/contact/defs.d.ts +24 -0
  62. package/dist/lexicon/types/app/bsky/contact/defs.d.ts.map +1 -0
  63. package/dist/lexicon/types/app/bsky/contact/defs.js +25 -0
  64. package/dist/lexicon/types/app/bsky/contact/defs.js.map +1 -0
  65. package/dist/lexicon/types/app/bsky/contact/dismissMatch.d.ts +25 -0
  66. package/dist/lexicon/types/app/bsky/contact/dismissMatch.d.ts.map +1 -0
  67. package/dist/lexicon/types/app/bsky/contact/dismissMatch.js +7 -0
  68. package/dist/lexicon/types/app/bsky/contact/dismissMatch.js.map +1 -0
  69. package/dist/lexicon/types/app/bsky/contact/getMatches.d.ts +25 -0
  70. package/dist/lexicon/types/app/bsky/contact/getMatches.d.ts.map +1 -0
  71. package/dist/lexicon/types/app/bsky/contact/getMatches.js +7 -0
  72. package/dist/lexicon/types/app/bsky/contact/getMatches.js.map +1 -0
  73. package/dist/lexicon/types/app/bsky/contact/getSyncStatus.d.ts +21 -0
  74. package/dist/lexicon/types/app/bsky/contact/getSyncStatus.d.ts.map +1 -0
  75. package/dist/lexicon/types/app/bsky/contact/getSyncStatus.js +7 -0
  76. package/dist/lexicon/types/app/bsky/contact/getSyncStatus.js.map +1 -0
  77. package/dist/lexicon/types/app/bsky/contact/importContacts.d.ts +30 -0
  78. package/dist/lexicon/types/app/bsky/contact/importContacts.d.ts.map +1 -0
  79. package/dist/lexicon/types/app/bsky/contact/importContacts.js +7 -0
  80. package/dist/lexicon/types/app/bsky/contact/importContacts.js.map +1 -0
  81. package/dist/lexicon/types/app/bsky/contact/removeData.d.ts +23 -0
  82. package/dist/lexicon/types/app/bsky/contact/removeData.d.ts.map +1 -0
  83. package/dist/lexicon/types/app/bsky/contact/removeData.js +7 -0
  84. package/dist/lexicon/types/app/bsky/contact/removeData.js.map +1 -0
  85. package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.d.ts +25 -0
  86. package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.d.ts.map +1 -0
  87. package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.js +7 -0
  88. package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.js.map +1 -0
  89. package/dist/lexicon/types/app/bsky/contact/verifyPhone.d.ts +29 -0
  90. package/dist/lexicon/types/app/bsky/contact/verifyPhone.d.ts.map +1 -0
  91. package/dist/lexicon/types/app/bsky/contact/verifyPhone.js +7 -0
  92. package/dist/lexicon/types/app/bsky/contact/verifyPhone.js.map +1 -0
  93. package/dist/lexicon/types/app/bsky/graph/defs.d.ts +8 -0
  94. package/dist/lexicon/types/app/bsky/graph/defs.d.ts.map +1 -1
  95. package/dist/lexicon/types/app/bsky/graph/defs.js.map +1 -1
  96. package/dist/proto/bsky_pb.d.ts +0 -4
  97. package/dist/proto/bsky_pb.d.ts.map +1 -1
  98. package/dist/proto/bsky_pb.js +0 -10
  99. package/dist/proto/bsky_pb.js.map +1 -1
  100. package/dist/proto/rolodex_connect.d.ts +83 -0
  101. package/dist/proto/rolodex_connect.d.ts.map +1 -0
  102. package/dist/proto/rolodex_connect.js +90 -0
  103. package/dist/proto/rolodex_connect.js.map +1 -0
  104. package/dist/proto/rolodex_pb.d.ts +363 -0
  105. package/dist/proto/rolodex_pb.d.ts.map +1 -0
  106. package/dist/proto/rolodex_pb.js +1032 -0
  107. package/dist/proto/rolodex_pb.js.map +1 -0
  108. package/dist/rolodex.d.ts +9 -0
  109. package/dist/rolodex.d.ts.map +1 -0
  110. package/dist/rolodex.js +25 -0
  111. package/dist/rolodex.js.map +1 -0
  112. package/package.json +13 -13
  113. package/proto/rolodex.proto +116 -0
  114. package/src/api/app/bsky/contact/dismissMatch.ts +24 -0
  115. package/src/api/app/bsky/contact/getMatches.ts +111 -0
  116. package/src/api/app/bsky/contact/getSyncStatus.ts +35 -0
  117. package/src/api/app/bsky/contact/importContacts.ts +118 -0
  118. package/src/api/app/bsky/contact/removeData.ts +23 -0
  119. package/src/api/app/bsky/contact/startPhoneVerification.ts +24 -0
  120. package/src/api/app/bsky/contact/util.ts +13 -0
  121. package/src/api/app/bsky/contact/verifyPhone.ts +27 -0
  122. package/src/api/app/bsky/graph/getRelationships.ts +4 -0
  123. package/src/api/index.ts +14 -0
  124. package/src/config.ts +27 -0
  125. package/src/context.ts +6 -0
  126. package/src/hydration/actor.ts +1 -1
  127. package/src/index.ts +13 -0
  128. package/src/lexicon/index.ts +101 -0
  129. package/src/lexicon/lexicons.ts +375 -0
  130. package/src/lexicon/types/app/bsky/contact/defs.ts +52 -0
  131. package/src/lexicon/types/app/bsky/contact/dismissMatch.ts +43 -0
  132. package/src/lexicon/types/app/bsky/contact/getMatches.ts +43 -0
  133. package/src/lexicon/types/app/bsky/contact/getSyncStatus.ts +39 -0
  134. package/src/lexicon/types/app/bsky/contact/importContacts.ts +49 -0
  135. package/src/lexicon/types/app/bsky/contact/removeData.ts +40 -0
  136. package/src/lexicon/types/app/bsky/contact/startPhoneVerification.ts +43 -0
  137. package/src/lexicon/types/app/bsky/contact/verifyPhone.ts +48 -0
  138. package/src/lexicon/types/app/bsky/graph/defs.ts +8 -0
  139. package/src/proto/bsky_pb.ts +0 -6
  140. package/src/proto/rolodex_connect.ts +89 -0
  141. package/src/proto/rolodex_pb.ts +746 -0
  142. package/src/rolodex.ts +42 -0
  143. package/tests/views/__snapshots__/profile.test.ts.snap +103 -0
  144. package/tests/views/profile.test.ts +39 -0
  145. package/tsconfig.build.tsbuildinfo +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolodex_pb.js","sourceRoot":"","sources":["../../src/proto/rolodex_pb.ts"],"names":[],"mappings":"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","sourcesContent":["// @generated by protoc-gen-es v1.6.0 with parameter \"target=ts,import_extension=\"\n// @generated from file rolodex.proto (package rolodex, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from \"@bufbuild/protobuf\";\nimport { Message, proto3, Timestamp } from \"@bufbuild/protobuf\";\n\n/**\n * Ping\n *\n * @generated from message rolodex.PingRequest\n */\nexport class PingRequest extends Message<PingRequest> {\n constructor(data?: PartialMessage<PingRequest>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.PingRequest\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): PingRequest {\n return new PingRequest().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): PingRequest {\n return new PingRequest().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): PingRequest {\n return new PingRequest().fromJsonString(jsonString, options);\n }\n\n static equals(a: PingRequest | PlainMessage<PingRequest> | undefined, b: PingRequest | PlainMessage<PingRequest> | undefined): boolean {\n return proto3.util.equals(PingRequest, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.PingResponse\n */\nexport class PingResponse extends Message<PingResponse> {\n constructor(data?: PartialMessage<PingResponse>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.PingResponse\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): PingResponse {\n return new PingResponse().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): PingResponse {\n return new PingResponse().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): PingResponse {\n return new PingResponse().fromJsonString(jsonString, options);\n }\n\n static equals(a: PingResponse | PlainMessage<PingResponse> | undefined, b: PingResponse | PlainMessage<PingResponse> | undefined): boolean {\n return proto3.util.equals(PingResponse, a, b);\n }\n}\n\n/**\n * GetSyncStatus\n *\n * @generated from message rolodex.GetSyncStatusRequest\n */\nexport class GetSyncStatusRequest extends Message<GetSyncStatusRequest> {\n /**\n * @generated from field: string actor = 1;\n */\n actor = \"\";\n\n constructor(data?: PartialMessage<GetSyncStatusRequest>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.GetSyncStatusRequest\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"actor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetSyncStatusRequest {\n return new GetSyncStatusRequest().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetSyncStatusRequest {\n return new GetSyncStatusRequest().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetSyncStatusRequest {\n return new GetSyncStatusRequest().fromJsonString(jsonString, options);\n }\n\n static equals(a: GetSyncStatusRequest | PlainMessage<GetSyncStatusRequest> | undefined, b: GetSyncStatusRequest | PlainMessage<GetSyncStatusRequest> | undefined): boolean {\n return proto3.util.equals(GetSyncStatusRequest, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.SyncStatus\n */\nexport class SyncStatus extends Message<SyncStatus> {\n /**\n * @generated from field: google.protobuf.Timestamp synced_at = 1;\n */\n syncedAt?: Timestamp;\n\n /**\n * @generated from field: int32 matches_count = 2;\n */\n matchesCount = 0;\n\n constructor(data?: PartialMessage<SyncStatus>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.SyncStatus\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"synced_at\", kind: \"message\", T: Timestamp },\n { no: 2, name: \"matches_count\", kind: \"scalar\", T: 5 /* ScalarType.INT32 */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SyncStatus {\n return new SyncStatus().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SyncStatus {\n return new SyncStatus().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SyncStatus {\n return new SyncStatus().fromJsonString(jsonString, options);\n }\n\n static equals(a: SyncStatus | PlainMessage<SyncStatus> | undefined, b: SyncStatus | PlainMessage<SyncStatus> | undefined): boolean {\n return proto3.util.equals(SyncStatus, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.GetSyncStatusResponse\n */\nexport class GetSyncStatusResponse extends Message<GetSyncStatusResponse> {\n /**\n * @generated from field: rolodex.SyncStatus status = 1;\n */\n status?: SyncStatus;\n\n constructor(data?: PartialMessage<GetSyncStatusResponse>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.GetSyncStatusResponse\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"status\", kind: \"message\", T: SyncStatus },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetSyncStatusResponse {\n return new GetSyncStatusResponse().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetSyncStatusResponse {\n return new GetSyncStatusResponse().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetSyncStatusResponse {\n return new GetSyncStatusResponse().fromJsonString(jsonString, options);\n }\n\n static equals(a: GetSyncStatusResponse | PlainMessage<GetSyncStatusResponse> | undefined, b: GetSyncStatusResponse | PlainMessage<GetSyncStatusResponse> | undefined): boolean {\n return proto3.util.equals(GetSyncStatusResponse, a, b);\n }\n}\n\n/**\n * StartPhoneVerification\n *\n * @generated from message rolodex.StartPhoneVerificationRequest\n */\nexport class StartPhoneVerificationRequest extends Message<StartPhoneVerificationRequest> {\n /**\n * @generated from field: string actor = 1;\n */\n actor = \"\";\n\n /**\n * @generated from field: string phone = 2;\n */\n phone = \"\";\n\n constructor(data?: PartialMessage<StartPhoneVerificationRequest>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.StartPhoneVerificationRequest\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"actor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n { no: 2, name: \"phone\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StartPhoneVerificationRequest {\n return new StartPhoneVerificationRequest().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StartPhoneVerificationRequest {\n return new StartPhoneVerificationRequest().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StartPhoneVerificationRequest {\n return new StartPhoneVerificationRequest().fromJsonString(jsonString, options);\n }\n\n static equals(a: StartPhoneVerificationRequest | PlainMessage<StartPhoneVerificationRequest> | undefined, b: StartPhoneVerificationRequest | PlainMessage<StartPhoneVerificationRequest> | undefined): boolean {\n return proto3.util.equals(StartPhoneVerificationRequest, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.StartPhoneVerificationResponse\n */\nexport class StartPhoneVerificationResponse extends Message<StartPhoneVerificationResponse> {\n constructor(data?: PartialMessage<StartPhoneVerificationResponse>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.StartPhoneVerificationResponse\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StartPhoneVerificationResponse {\n return new StartPhoneVerificationResponse().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StartPhoneVerificationResponse {\n return new StartPhoneVerificationResponse().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StartPhoneVerificationResponse {\n return new StartPhoneVerificationResponse().fromJsonString(jsonString, options);\n }\n\n static equals(a: StartPhoneVerificationResponse | PlainMessage<StartPhoneVerificationResponse> | undefined, b: StartPhoneVerificationResponse | PlainMessage<StartPhoneVerificationResponse> | undefined): boolean {\n return proto3.util.equals(StartPhoneVerificationResponse, a, b);\n }\n}\n\n/**\n * VerifyPhone\n *\n * @generated from message rolodex.VerifyPhoneRequest\n */\nexport class VerifyPhoneRequest extends Message<VerifyPhoneRequest> {\n /**\n * @generated from field: string actor = 1;\n */\n actor = \"\";\n\n /**\n * @generated from field: string phone = 2;\n */\n phone = \"\";\n\n /**\n * @generated from field: string verification_code = 3;\n */\n verificationCode = \"\";\n\n constructor(data?: PartialMessage<VerifyPhoneRequest>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.VerifyPhoneRequest\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"actor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n { no: 2, name: \"phone\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n { no: 3, name: \"verification_code\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VerifyPhoneRequest {\n return new VerifyPhoneRequest().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VerifyPhoneRequest {\n return new VerifyPhoneRequest().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VerifyPhoneRequest {\n return new VerifyPhoneRequest().fromJsonString(jsonString, options);\n }\n\n static equals(a: VerifyPhoneRequest | PlainMessage<VerifyPhoneRequest> | undefined, b: VerifyPhoneRequest | PlainMessage<VerifyPhoneRequest> | undefined): boolean {\n return proto3.util.equals(VerifyPhoneRequest, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.VerifyPhoneResponse\n */\nexport class VerifyPhoneResponse extends Message<VerifyPhoneResponse> {\n /**\n * @generated from field: string token = 1;\n */\n token = \"\";\n\n constructor(data?: PartialMessage<VerifyPhoneResponse>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.VerifyPhoneResponse\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"token\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VerifyPhoneResponse {\n return new VerifyPhoneResponse().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VerifyPhoneResponse {\n return new VerifyPhoneResponse().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VerifyPhoneResponse {\n return new VerifyPhoneResponse().fromJsonString(jsonString, options);\n }\n\n static equals(a: VerifyPhoneResponse | PlainMessage<VerifyPhoneResponse> | undefined, b: VerifyPhoneResponse | PlainMessage<VerifyPhoneResponse> | undefined): boolean {\n return proto3.util.equals(VerifyPhoneResponse, a, b);\n }\n}\n\n/**\n * ImportContacts\n *\n * @generated from message rolodex.ImportContactsRequest\n */\nexport class ImportContactsRequest extends Message<ImportContactsRequest> {\n /**\n * @generated from field: string actor = 1;\n */\n actor = \"\";\n\n /**\n * @generated from field: string token = 2;\n */\n token = \"\";\n\n /**\n * @generated from field: repeated string contacts = 3;\n */\n contacts: string[] = [];\n\n constructor(data?: PartialMessage<ImportContactsRequest>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.ImportContactsRequest\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"actor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n { no: 2, name: \"token\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n { no: 3, name: \"contacts\", kind: \"scalar\", T: 9 /* ScalarType.STRING */, repeated: true },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ImportContactsRequest {\n return new ImportContactsRequest().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ImportContactsRequest {\n return new ImportContactsRequest().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ImportContactsRequest {\n return new ImportContactsRequest().fromJsonString(jsonString, options);\n }\n\n static equals(a: ImportContactsRequest | PlainMessage<ImportContactsRequest> | undefined, b: ImportContactsRequest | PlainMessage<ImportContactsRequest> | undefined): boolean {\n return proto3.util.equals(ImportContactsRequest, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.ImportContactsMatch\n */\nexport class ImportContactsMatch extends Message<ImportContactsMatch> {\n /**\n * To which index of the input contacts this contact corresponds.\n *\n * @generated from field: int32 input_index = 1;\n */\n inputIndex = 0;\n\n /**\n * @generated from field: string subject = 2;\n */\n subject = \"\";\n\n constructor(data?: PartialMessage<ImportContactsMatch>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.ImportContactsMatch\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"input_index\", kind: \"scalar\", T: 5 /* ScalarType.INT32 */ },\n { no: 2, name: \"subject\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ImportContactsMatch {\n return new ImportContactsMatch().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ImportContactsMatch {\n return new ImportContactsMatch().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ImportContactsMatch {\n return new ImportContactsMatch().fromJsonString(jsonString, options);\n }\n\n static equals(a: ImportContactsMatch | PlainMessage<ImportContactsMatch> | undefined, b: ImportContactsMatch | PlainMessage<ImportContactsMatch> | undefined): boolean {\n return proto3.util.equals(ImportContactsMatch, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.ImportContactsResponse\n */\nexport class ImportContactsResponse extends Message<ImportContactsResponse> {\n /**\n * @generated from field: repeated rolodex.ImportContactsMatch matches = 1;\n */\n matches: ImportContactsMatch[] = [];\n\n constructor(data?: PartialMessage<ImportContactsResponse>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.ImportContactsResponse\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"matches\", kind: \"message\", T: ImportContactsMatch, repeated: true },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ImportContactsResponse {\n return new ImportContactsResponse().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ImportContactsResponse {\n return new ImportContactsResponse().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ImportContactsResponse {\n return new ImportContactsResponse().fromJsonString(jsonString, options);\n }\n\n static equals(a: ImportContactsResponse | PlainMessage<ImportContactsResponse> | undefined, b: ImportContactsResponse | PlainMessage<ImportContactsResponse> | undefined): boolean {\n return proto3.util.equals(ImportContactsResponse, a, b);\n }\n}\n\n/**\n * GetMatches\n *\n * @generated from message rolodex.GetMatchesRequest\n */\nexport class GetMatchesRequest extends Message<GetMatchesRequest> {\n /**\n * @generated from field: string actor = 1;\n */\n actor = \"\";\n\n /**\n * @generated from field: int32 limit = 2;\n */\n limit = 0;\n\n /**\n * @generated from field: string cursor = 3;\n */\n cursor = \"\";\n\n constructor(data?: PartialMessage<GetMatchesRequest>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.GetMatchesRequest\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"actor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n { no: 2, name: \"limit\", kind: \"scalar\", T: 5 /* ScalarType.INT32 */ },\n { no: 3, name: \"cursor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetMatchesRequest {\n return new GetMatchesRequest().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetMatchesRequest {\n return new GetMatchesRequest().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetMatchesRequest {\n return new GetMatchesRequest().fromJsonString(jsonString, options);\n }\n\n static equals(a: GetMatchesRequest | PlainMessage<GetMatchesRequest> | undefined, b: GetMatchesRequest | PlainMessage<GetMatchesRequest> | undefined): boolean {\n return proto3.util.equals(GetMatchesRequest, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.GetMatchesResponse\n */\nexport class GetMatchesResponse extends Message<GetMatchesResponse> {\n /**\n * @generated from field: repeated string subjects = 1;\n */\n subjects: string[] = [];\n\n /**\n * @generated from field: string cursor = 2;\n */\n cursor = \"\";\n\n constructor(data?: PartialMessage<GetMatchesResponse>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.GetMatchesResponse\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"subjects\", kind: \"scalar\", T: 9 /* ScalarType.STRING */, repeated: true },\n { no: 2, name: \"cursor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetMatchesResponse {\n return new GetMatchesResponse().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetMatchesResponse {\n return new GetMatchesResponse().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetMatchesResponse {\n return new GetMatchesResponse().fromJsonString(jsonString, options);\n }\n\n static equals(a: GetMatchesResponse | PlainMessage<GetMatchesResponse> | undefined, b: GetMatchesResponse | PlainMessage<GetMatchesResponse> | undefined): boolean {\n return proto3.util.equals(GetMatchesResponse, a, b);\n }\n}\n\n/**\n * DismissMatch\n *\n * @generated from message rolodex.DismissMatchRequest\n */\nexport class DismissMatchRequest extends Message<DismissMatchRequest> {\n /**\n * @generated from field: string actor = 1;\n */\n actor = \"\";\n\n /**\n * @generated from field: string subject = 2;\n */\n subject = \"\";\n\n constructor(data?: PartialMessage<DismissMatchRequest>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.DismissMatchRequest\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"actor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n { no: 2, name: \"subject\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DismissMatchRequest {\n return new DismissMatchRequest().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DismissMatchRequest {\n return new DismissMatchRequest().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DismissMatchRequest {\n return new DismissMatchRequest().fromJsonString(jsonString, options);\n }\n\n static equals(a: DismissMatchRequest | PlainMessage<DismissMatchRequest> | undefined, b: DismissMatchRequest | PlainMessage<DismissMatchRequest> | undefined): boolean {\n return proto3.util.equals(DismissMatchRequest, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.DismissMatchResponse\n */\nexport class DismissMatchResponse extends Message<DismissMatchResponse> {\n /**\n * @generated from field: int32 matches_count = 1;\n */\n matchesCount = 0;\n\n constructor(data?: PartialMessage<DismissMatchResponse>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.DismissMatchResponse\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"matches_count\", kind: \"scalar\", T: 5 /* ScalarType.INT32 */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DismissMatchResponse {\n return new DismissMatchResponse().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DismissMatchResponse {\n return new DismissMatchResponse().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DismissMatchResponse {\n return new DismissMatchResponse().fromJsonString(jsonString, options);\n }\n\n static equals(a: DismissMatchResponse | PlainMessage<DismissMatchResponse> | undefined, b: DismissMatchResponse | PlainMessage<DismissMatchResponse> | undefined): boolean {\n return proto3.util.equals(DismissMatchResponse, a, b);\n }\n}\n\n/**\n * RemoveData\n *\n * @generated from message rolodex.RemoveDataRequest\n */\nexport class RemoveDataRequest extends Message<RemoveDataRequest> {\n /**\n * @generated from field: string actor = 1;\n */\n actor = \"\";\n\n constructor(data?: PartialMessage<RemoveDataRequest>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.RemoveDataRequest\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"actor\", kind: \"scalar\", T: 9 /* ScalarType.STRING */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RemoveDataRequest {\n return new RemoveDataRequest().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RemoveDataRequest {\n return new RemoveDataRequest().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RemoveDataRequest {\n return new RemoveDataRequest().fromJsonString(jsonString, options);\n }\n\n static equals(a: RemoveDataRequest | PlainMessage<RemoveDataRequest> | undefined, b: RemoveDataRequest | PlainMessage<RemoveDataRequest> | undefined): boolean {\n return proto3.util.equals(RemoveDataRequest, a, b);\n }\n}\n\n/**\n * @generated from message rolodex.RemoveDataResponse\n */\nexport class RemoveDataResponse extends Message<RemoveDataResponse> {\n /**\n * @generated from field: int32 contacts_count = 1;\n */\n contactsCount = 0;\n\n /**\n * @generated from field: int32 matches_count = 2;\n */\n matchesCount = 0;\n\n constructor(data?: PartialMessage<RemoveDataResponse>) {\n super();\n proto3.util.initPartial(data, this);\n }\n\n static readonly runtime: typeof proto3 = proto3;\n static readonly typeName = \"rolodex.RemoveDataResponse\";\n static readonly fields: FieldList = proto3.util.newFieldList(() => [\n { no: 1, name: \"contacts_count\", kind: \"scalar\", T: 5 /* ScalarType.INT32 */ },\n { no: 2, name: \"matches_count\", kind: \"scalar\", T: 5 /* ScalarType.INT32 */ },\n ]);\n\n static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RemoveDataResponse {\n return new RemoveDataResponse().fromBinary(bytes, options);\n }\n\n static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RemoveDataResponse {\n return new RemoveDataResponse().fromJson(jsonValue, options);\n }\n\n static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RemoveDataResponse {\n return new RemoveDataResponse().fromJsonString(jsonString, options);\n }\n\n static equals(a: RemoveDataResponse | PlainMessage<RemoveDataResponse> | undefined, b: RemoveDataResponse | PlainMessage<RemoveDataResponse> | undefined): boolean {\n return proto3.util.equals(RemoveDataResponse, a, b);\n }\n}\n\n"]}
@@ -0,0 +1,9 @@
1
+ import { Code, ConnectError, Interceptor, PromiseClient } from '@connectrpc/connect';
2
+ import { ConnectTransportOptions } from '@connectrpc/connect-node';
3
+ import { RolodexService } from './proto/rolodex_connect';
4
+ export type RolodexClient = PromiseClient<typeof RolodexService>;
5
+ export declare const createRolodexClient: (opts: ConnectTransportOptions) => RolodexClient;
6
+ export { Code };
7
+ export declare const isRolodexError: (err: unknown, code?: Code) => err is ConnectError;
8
+ export declare const authWithApiKey: (apiKey: string) => Interceptor;
9
+ //# sourceMappingURL=rolodex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolodex.d.ts","sourceRoot":"","sources":["../src/rolodex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,aAAa,EAEd,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,uBAAuB,EAExB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,cAAc,CAAC,CAAA;AAEhE,eAAO,MAAM,mBAAmB,GAC9B,MAAM,uBAAuB,KAC5B,aAGF,CAAA;AAED,OAAO,EAAE,IAAI,EAAE,CAAA;AAEf,eAAO,MAAM,cAAc,GACzB,KAAK,OAAO,EACZ,OAAO,IAAI,KACV,GAAG,IAAI,YAKT,CAAA;AAED,eAAO,MAAM,cAAc,GACxB,QAAQ,MAAM,KAAG,WAKjB,CAAA"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authWithApiKey = exports.isRolodexError = exports.Code = exports.createRolodexClient = void 0;
4
+ const connect_1 = require("@connectrpc/connect");
5
+ Object.defineProperty(exports, "Code", { enumerable: true, get: function () { return connect_1.Code; } });
6
+ const connect_node_1 = require("@connectrpc/connect-node");
7
+ const rolodex_connect_1 = require("./proto/rolodex_connect");
8
+ const createRolodexClient = (opts) => {
9
+ const transport = (0, connect_node_1.createConnectTransport)(opts);
10
+ return (0, connect_1.createPromiseClient)(rolodex_connect_1.RolodexService, transport);
11
+ };
12
+ exports.createRolodexClient = createRolodexClient;
13
+ const isRolodexError = (err, code) => {
14
+ if (err instanceof connect_1.ConnectError) {
15
+ return !code || err.code === code;
16
+ }
17
+ return false;
18
+ };
19
+ exports.isRolodexError = isRolodexError;
20
+ const authWithApiKey = (apiKey) => (next) => (req) => {
21
+ req.header.set('authorization', `Bearer ${apiKey}`);
22
+ return next(req);
23
+ };
24
+ exports.authWithApiKey = authWithApiKey;
25
+ //# sourceMappingURL=rolodex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolodex.js","sourceRoot":"","sources":["../src/rolodex.ts"],"names":[],"mappings":";;;AAAA,iDAM4B;AAiBnB,qFAtBP,cAAI,OAsBO;AAhBb,2DAGiC;AACjC,6DAAwD;AAKjD,MAAM,mBAAmB,GAAG,CACjC,IAA6B,EACd,EAAE;IACjB,MAAM,SAAS,GAAG,IAAA,qCAAsB,EAAC,IAAI,CAAC,CAAA;IAC9C,OAAO,IAAA,6BAAmB,EAAC,gCAAc,EAAE,SAAS,CAAC,CAAA;AACvD,CAAC,CAAA;AALY,QAAA,mBAAmB,uBAK/B;AAIM,MAAM,cAAc,GAAG,CAC5B,GAAY,EACZ,IAAW,EACU,EAAE;IACvB,IAAI,GAAG,YAAY,sBAAY,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAA;IACnC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AARY,QAAA,cAAc,kBAQ1B;AAEM,MAAM,cAAc,GACzB,CAAC,MAAc,EAAe,EAAE,CAChC,CAAC,IAAI,EAAE,EAAE,CACT,CAAC,GAAG,EAAE,EAAE;IACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,MAAM,EAAE,CAAC,CAAA;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC,CAAA;AANU,QAAA,cAAc,kBAMxB","sourcesContent":["import {\n Code,\n ConnectError,\n Interceptor,\n PromiseClient,\n createPromiseClient,\n} from '@connectrpc/connect'\nimport {\n ConnectTransportOptions,\n createConnectTransport,\n} from '@connectrpc/connect-node'\nimport { RolodexService } from './proto/rolodex_connect'\n\n// Rolodex is the service that does contact imports following https://docs.bsky.app/blog/contact-import-rfc.\nexport type RolodexClient = PromiseClient<typeof RolodexService>\n\nexport const createRolodexClient = (\n opts: ConnectTransportOptions,\n): RolodexClient => {\n const transport = createConnectTransport(opts)\n return createPromiseClient(RolodexService, transport)\n}\n\nexport { Code }\n\nexport const isRolodexError = (\n err: unknown,\n code?: Code,\n): err is ConnectError => {\n if (err instanceof ConnectError) {\n return !code || err.code === code\n }\n return false\n}\n\nexport const authWithApiKey =\n (apiKey: string): Interceptor =>\n (next) =>\n (req) => {\n req.header.set('authorization', `Bearer ${apiKey}`)\n return next(req)\n }\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/bsky",
3
- "version": "0.0.199",
3
+ "version": "0.0.200",
4
4
  "license": "MIT",
5
5
  "description": "Reference implementation of app.bsky App View (Bluesky API)",
6
6
  "keywords": [
@@ -51,18 +51,18 @@
51
51
  "uint8arrays": "3.0.0",
52
52
  "undici": "^6.19.8",
53
53
  "zod": "3.23.8",
54
- "@atproto-labs/fetch-node": "0.2.0",
55
54
  "@atproto-labs/xrpc-utils": "0.0.24",
56
- "@atproto/api": "^0.18.4",
57
- "@atproto/common": "^0.5.2",
55
+ "@atproto-labs/fetch-node": "0.2.0",
56
+ "@atproto/api": "^0.18.5",
57
+ "@atproto/common": "^0.5.3",
58
58
  "@atproto/crypto": "^0.4.5",
59
59
  "@atproto/did": "^0.2.3",
60
60
  "@atproto/identity": "^0.4.10",
61
- "@atproto/lexicon": "^0.5.2",
62
- "@atproto/repo": "^0.8.11",
63
- "@atproto/sync": "^0.1.38",
64
- "@atproto/syntax": "^0.4.2",
65
- "@atproto/xrpc-server": "^0.10.2"
61
+ "@atproto/lexicon": "^0.6.0",
62
+ "@atproto/repo": "^0.8.12",
63
+ "@atproto/sync": "^0.1.39",
64
+ "@atproto/xrpc-server": "^0.10.3",
65
+ "@atproto/syntax": "^0.4.2"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@bufbuild/buf": "^1.28.1",
@@ -78,10 +78,10 @@
78
78
  "jest": "^28.1.2",
79
79
  "ts-node": "^10.8.2",
80
80
  "typescript": "^5.6.3",
81
- "@atproto/api": "^0.18.4",
82
- "@atproto/lex-cli": "^0.9.7",
83
- "@atproto/pds": "^0.4.197",
84
- "@atproto/xrpc": "^0.7.6"
81
+ "@atproto/api": "^0.18.5",
82
+ "@atproto/lex-cli": "^0.9.8",
83
+ "@atproto/pds": "^0.4.198",
84
+ "@atproto/xrpc": "^0.7.7"
85
85
  },
86
86
  "scripts": {
87
87
  "codegen": "lex gen-server --yes ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/* ../../lexicons/chat/bsky/*/*",
@@ -0,0 +1,116 @@
1
+ syntax = "proto3";
2
+
3
+ package rolodex;
4
+ option go_package = "./;rolodex";
5
+
6
+ import "google/protobuf/timestamp.proto";
7
+
8
+ //
9
+ // Messages
10
+ //
11
+
12
+ // Ping
13
+ message PingRequest {}
14
+
15
+ message PingResponse {}
16
+
17
+ // GetSyncStatus
18
+ message GetSyncStatusRequest {
19
+ string actor = 1;
20
+ }
21
+
22
+ message SyncStatus {
23
+ google.protobuf.Timestamp synced_at = 1;
24
+ int32 matches_count = 2;
25
+ }
26
+
27
+ message GetSyncStatusResponse {
28
+ SyncStatus status = 1;
29
+ }
30
+
31
+ // StartPhoneVerification
32
+ message StartPhoneVerificationRequest {
33
+ string actor = 1;
34
+ string phone = 2;
35
+ }
36
+
37
+ message StartPhoneVerificationResponse {}
38
+
39
+ // VerifyPhone
40
+ message VerifyPhoneRequest {
41
+ string actor = 1;
42
+ string phone = 2;
43
+ string verification_code = 3;
44
+ }
45
+
46
+ message VerifyPhoneResponse {
47
+ string token = 1;
48
+ }
49
+
50
+ // ImportContacts
51
+ message ImportContactsRequest {
52
+ string actor = 1;
53
+ string token = 2;
54
+ repeated string contacts = 3;
55
+ }
56
+
57
+ message ImportContactsMatch {
58
+ // To which index of the input contacts this contact corresponds.
59
+ int32 input_index = 1;
60
+ string subject = 2;
61
+ }
62
+
63
+ message ImportContactsResponse {
64
+ repeated ImportContactsMatch matches = 1;
65
+ }
66
+
67
+ // GetMatches
68
+ message GetMatchesRequest {
69
+ string actor = 1;
70
+ int32 limit = 2;
71
+ string cursor = 3;
72
+ }
73
+
74
+ message GetMatchesResponse {
75
+ repeated string subjects = 1;
76
+ string cursor = 2;
77
+ }
78
+
79
+ // DismissMatch
80
+ message DismissMatchRequest {
81
+ string actor = 1;
82
+ string subject = 2;
83
+ }
84
+
85
+ message DismissMatchResponse {
86
+ int32 matches_count = 1;
87
+ }
88
+
89
+ // RemoveData
90
+ message RemoveDataRequest {
91
+ string actor = 1;
92
+ }
93
+
94
+ message RemoveDataResponse {
95
+ int32 contacts_count = 1;
96
+ int32 matches_count = 2;
97
+ }
98
+
99
+ //
100
+ // Service
101
+ //
102
+
103
+ service RolodexService {
104
+ rpc Ping(PingRequest) returns (PingResponse);
105
+
106
+ rpc GetSyncStatus(GetSyncStatusRequest) returns (GetSyncStatusResponse);
107
+
108
+ rpc StartPhoneVerification(StartPhoneVerificationRequest) returns (StartPhoneVerificationResponse);
109
+ rpc VerifyPhone(VerifyPhoneRequest) returns (VerifyPhoneResponse);
110
+ rpc ImportContacts(ImportContactsRequest) returns (ImportContactsResponse);
111
+
112
+ rpc GetMatches(GetMatchesRequest) returns (GetMatchesResponse);
113
+ rpc DismissMatch(DismissMatchRequest) returns (DismissMatchResponse);
114
+
115
+ rpc RemoveData(RemoveDataRequest) returns (RemoveDataResponse);
116
+ }
@@ -0,0 +1,24 @@
1
+ import { AppContext } from '../../../../context'
2
+ import { Server } from '../../../../lexicon'
3
+ import { assertRolodexOrThrowUnimplemented } from './util'
4
+
5
+ export default function (server: Server, ctx: AppContext) {
6
+ server.app.bsky.contact.dismissMatch({
7
+ auth: ctx.authVerifier.standard,
8
+ handler: async ({ input, auth }) => {
9
+ assertRolodexOrThrowUnimplemented(ctx)
10
+
11
+ const actor = auth.credentials.iss
12
+ // TODO: Error handling.
13
+ await ctx.rolodexClient.dismissMatch({
14
+ actor,
15
+ subject: input.body.subject,
16
+ })
17
+
18
+ return {
19
+ encoding: 'application/json',
20
+ body: {},
21
+ }
22
+ },
23
+ })
24
+ }
@@ -0,0 +1,111 @@
1
+ import { mapDefined } from '@atproto/common'
2
+ import { AppContext } from '../../../../context'
3
+ import {
4
+ HydrateCtx,
5
+ HydrationState,
6
+ Hydrator,
7
+ } from '../../../../hydration/hydrator'
8
+ import { Server } from '../../../../lexicon'
9
+ import { QueryParams } from '../../../../lexicon/types/app/bsky/contact/getMatches'
10
+ import {
11
+ HydrationFnInput,
12
+ SkeletonFnInput,
13
+ createPipeline,
14
+ } from '../../../../pipeline'
15
+ import { RolodexClient } from '../../../../rolodex'
16
+ import { Views } from '../../../../views'
17
+ import { assertRolodexOrThrowUnimplemented } from './util'
18
+
19
+ export default function (server: Server, ctx: AppContext) {
20
+ const getMatches = createPipeline(skeleton, hydration, noBlocks, presentation)
21
+ server.app.bsky.contact.getMatches({
22
+ auth: ctx.authVerifier.standard,
23
+ handler: async ({ params, auth, req }) => {
24
+ assertRolodexOrThrowUnimplemented(ctx)
25
+
26
+ const viewer = auth.credentials.iss
27
+ const labelers = ctx.reqLabelers(req)
28
+ const hydrateCtx = await ctx.hydrator.createContext({
29
+ labelers,
30
+ viewer,
31
+ })
32
+
33
+ const result = await getMatches(
34
+ { ...params, hydrateCtx: hydrateCtx.copy({ viewer }) },
35
+ ctx,
36
+ )
37
+
38
+ return {
39
+ encoding: 'application/json',
40
+ body: result,
41
+ }
42
+ },
43
+ })
44
+ }
45
+
46
+ const skeleton = async (
47
+ input: SkeletonFnInput<Context, Params>,
48
+ ): Promise<SkeletonState> => {
49
+ const { params, ctx } = input
50
+ const actor = params.hydrateCtx.viewer
51
+ // TODO: Error handling.
52
+ const { cursor, subjects } = await ctx.rolodexClient.getMatches({
53
+ actor: params.hydrateCtx.viewer,
54
+ limit: params.limit,
55
+ cursor: params.cursor,
56
+ })
57
+ return {
58
+ actor,
59
+ subjects,
60
+ cursor: cursor || undefined,
61
+ }
62
+ }
63
+
64
+ const hydration = async (
65
+ input: HydrationFnInput<Context, Params, SkeletonState>,
66
+ ) => {
67
+ const { ctx, params, skeleton } = input
68
+ const { subjects } = skeleton
69
+ return ctx.hydrator.hydrateProfiles(subjects, params.hydrateCtx)
70
+ }
71
+
72
+ const noBlocks = (inputs: {
73
+ ctx: Context
74
+ skeleton: SkeletonState
75
+ hydration: HydrationState
76
+ }) => {
77
+ const { ctx, skeleton, hydration } = inputs
78
+ skeleton.subjects = skeleton.subjects.filter((subject) => {
79
+ return !ctx.views.viewerBlockExists(subject, hydration)
80
+ })
81
+ return skeleton
82
+ }
83
+
84
+ const presentation = (input: {
85
+ ctx: Context
86
+ params: Params
87
+ skeleton: SkeletonState
88
+ hydration: HydrationState
89
+ }) => {
90
+ const { ctx, skeleton, hydration } = input
91
+ const matches = mapDefined(skeleton.subjects, (did) =>
92
+ ctx.views.profile(did, hydration),
93
+ )
94
+ return { matches }
95
+ }
96
+
97
+ type Context = {
98
+ hydrator: Hydrator
99
+ rolodexClient: RolodexClient
100
+ views: Views
101
+ }
102
+
103
+ type Params = QueryParams & {
104
+ hydrateCtx: HydrateCtx & { viewer: string }
105
+ }
106
+
107
+ type SkeletonState = {
108
+ actor: string
109
+ subjects: string[]
110
+ cursor?: string
111
+ }
@@ -0,0 +1,35 @@
1
+ import { AppContext } from '../../../../context'
2
+ import { Server } from '../../../../lexicon'
3
+ import { SyncStatus } from '../../../../lexicon/types/app/bsky/contact/defs'
4
+ import { assertRolodexOrThrowUnimplemented } from './util'
5
+
6
+ export default function (server: Server, ctx: AppContext) {
7
+ server.app.bsky.contact.getSyncStatus({
8
+ auth: ctx.authVerifier.standard,
9
+ handler: async ({ auth }) => {
10
+ assertRolodexOrThrowUnimplemented(ctx)
11
+
12
+ const actor = auth.credentials.iss
13
+ // TODO: Error handling.
14
+ const res = await ctx.rolodexClient.getSyncStatus({
15
+ actor,
16
+ })
17
+
18
+ let syncStatus: SyncStatus | undefined
19
+ if (res.status && res.status.syncedAt) {
20
+ const syncedAt = res.status?.syncedAt?.toDate().toISOString()
21
+ syncStatus = {
22
+ matchesCount: res.status.matchesCount,
23
+ syncedAt,
24
+ }
25
+ }
26
+
27
+ return {
28
+ encoding: 'application/json',
29
+ body: {
30
+ syncStatus,
31
+ },
32
+ }
33
+ },
34
+ })
35
+ }
@@ -0,0 +1,118 @@
1
+ import { mapDefined } from '@atproto/common'
2
+ import { AppContext } from '../../../../context'
3
+ import {
4
+ HydrateCtx,
5
+ HydrationState,
6
+ Hydrator,
7
+ } from '../../../../hydration/hydrator'
8
+ import { Server } from '../../../../lexicon'
9
+ import { MatchAndContactIndex } from '../../../../lexicon/types/app/bsky/contact/defs'
10
+ import { InputSchema } from '../../../../lexicon/types/app/bsky/contact/importContacts'
11
+ import {
12
+ HydrationFnInput,
13
+ SkeletonFnInput,
14
+ createPipeline,
15
+ noRules,
16
+ } from '../../../../pipeline'
17
+ import { ImportContactsMatch } from '../../../../proto/rolodex_pb'
18
+ import { RolodexClient } from '../../../../rolodex'
19
+ import { Views } from '../../../../views'
20
+ import { assertRolodexOrThrowUnimplemented } from './util'
21
+
22
+ export default function (server: Server, ctx: AppContext) {
23
+ const importContacts = createPipeline(
24
+ skeleton,
25
+ hydration,
26
+ noRules, //
27
+ presentation,
28
+ )
29
+ server.app.bsky.contact.importContacts({
30
+ auth: ctx.authVerifier.standard,
31
+ handler: async ({ input, auth, req }) => {
32
+ assertRolodexOrThrowUnimplemented(ctx)
33
+
34
+ const viewer = auth.credentials.iss
35
+ const labelers = ctx.reqLabelers(req)
36
+ const hydrateCtx = await ctx.hydrator.createContext({
37
+ labelers,
38
+ viewer,
39
+ })
40
+
41
+ const result = await importContacts(
42
+ { ...input.body, hydrateCtx: hydrateCtx.copy({ viewer }) },
43
+ ctx,
44
+ )
45
+
46
+ return {
47
+ encoding: 'application/json',
48
+ body: result,
49
+ }
50
+ },
51
+ })
52
+ }
53
+
54
+ const skeleton = async (
55
+ input: SkeletonFnInput<Context, Params>,
56
+ ): Promise<SkeletonState> => {
57
+ const { params, ctx } = input
58
+ const actor = params.hydrateCtx.viewer
59
+ // TODO: Error handling.
60
+ const { matches } = await ctx.rolodexClient.importContacts({
61
+ actor: params.hydrateCtx.viewer,
62
+ contacts: params.contacts,
63
+ token: params.token,
64
+ })
65
+ return {
66
+ actor,
67
+ matches,
68
+ }
69
+ }
70
+
71
+ const hydration = async (
72
+ input: HydrationFnInput<Context, Params, SkeletonState>,
73
+ ) => {
74
+ const { ctx, params, skeleton } = input
75
+ const { matches } = skeleton
76
+ const subjects = matches.map((m) => m.subject)
77
+ return ctx.hydrator.hydrateProfiles(subjects, params.hydrateCtx)
78
+ }
79
+
80
+ const presentation = (input: {
81
+ ctx: Context
82
+ params: Params
83
+ skeleton: SkeletonState
84
+ hydration: HydrationState
85
+ }) => {
86
+ const { ctx, skeleton, hydration } = input
87
+ const matchesAndContactIndexes = mapDefined(
88
+ skeleton.matches,
89
+ ({ subject, inputIndex }): MatchAndContactIndex | undefined => {
90
+ const profile = ctx.views.profile(subject, hydration)
91
+
92
+ if (!profile) {
93
+ return undefined
94
+ }
95
+
96
+ return {
97
+ contactIndex: inputIndex,
98
+ match: profile,
99
+ }
100
+ },
101
+ )
102
+ return { matchesAndContactIndexes }
103
+ }
104
+
105
+ type Context = {
106
+ hydrator: Hydrator
107
+ rolodexClient: RolodexClient
108
+ views: Views
109
+ }
110
+
111
+ type Params = InputSchema & {
112
+ hydrateCtx: HydrateCtx & { viewer: string }
113
+ }
114
+
115
+ type SkeletonState = {
116
+ actor: string
117
+ matches: ImportContactsMatch[]
118
+ }
@@ -0,0 +1,23 @@
1
+ import { AppContext } from '../../../../context'
2
+ import { Server } from '../../../../lexicon'
3
+ import { assertRolodexOrThrowUnimplemented } from './util'
4
+
5
+ export default function (server: Server, ctx: AppContext) {
6
+ server.app.bsky.contact.removeData({
7
+ auth: ctx.authVerifier.standard,
8
+ handler: async ({ auth }) => {
9
+ assertRolodexOrThrowUnimplemented(ctx)
10
+
11
+ const actor = auth.credentials.iss
12
+ // TODO: Error handling.
13
+ await ctx.rolodexClient.removeData({
14
+ actor,
15
+ })
16
+
17
+ return {
18
+ encoding: 'application/json',
19
+ body: {},
20
+ }
21
+ },
22
+ })
23
+ }
@@ -0,0 +1,24 @@
1
+ import { AppContext } from '../../../../context'
2
+ import { Server } from '../../../../lexicon'
3
+ import { assertRolodexOrThrowUnimplemented } from './util'
4
+
5
+ export default function (server: Server, ctx: AppContext) {
6
+ server.app.bsky.contact.startPhoneVerification({
7
+ auth: ctx.authVerifier.standard,
8
+ handler: async ({ auth, input }) => {
9
+ assertRolodexOrThrowUnimplemented(ctx)
10
+
11
+ const actor = auth.credentials.iss
12
+ // TODO: Error handling.
13
+ await ctx.rolodexClient.startPhoneVerification({
14
+ actor,
15
+ phone: input.body.phone,
16
+ })
17
+
18
+ return {
19
+ encoding: 'application/json',
20
+ body: {},
21
+ }
22
+ },
23
+ })
24
+ }