@atproto/bsky 0.0.199 → 0.0.201
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 +21 -0
- package/dist/api/app/bsky/ageassurance/begin.d.ts.map +1 -1
- package/dist/api/app/bsky/ageassurance/begin.js +1 -2
- package/dist/api/app/bsky/ageassurance/begin.js.map +1 -1
- package/dist/api/app/bsky/contact/dismissMatch.d.ts +4 -0
- package/dist/api/app/bsky/contact/dismissMatch.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/dismissMatch.js +23 -0
- package/dist/api/app/bsky/contact/dismissMatch.js.map +1 -0
- package/dist/api/app/bsky/contact/getMatches.d.ts +4 -0
- package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/getMatches.js +59 -0
- package/dist/api/app/bsky/contact/getMatches.js.map +1 -0
- package/dist/api/app/bsky/contact/getSyncStatus.d.ts +4 -0
- package/dist/api/app/bsky/contact/getSyncStatus.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/getSyncStatus.js +32 -0
- package/dist/api/app/bsky/contact/getSyncStatus.js.map +1 -0
- package/dist/api/app/bsky/contact/importContacts.d.ts +4 -0
- package/dist/api/app/bsky/contact/importContacts.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/importContacts.js +62 -0
- package/dist/api/app/bsky/contact/importContacts.js.map +1 -0
- package/dist/api/app/bsky/contact/removeData.d.ts +4 -0
- package/dist/api/app/bsky/contact/removeData.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/removeData.js +22 -0
- package/dist/api/app/bsky/contact/removeData.js.map +1 -0
- 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/app/bsky/contact/startPhoneVerification.d.ts +4 -0
- package/dist/api/app/bsky/contact/startPhoneVerification.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/startPhoneVerification.js +23 -0
- package/dist/api/app/bsky/contact/startPhoneVerification.js.map +1 -0
- package/dist/api/app/bsky/contact/util.d.ts +6 -0
- package/dist/api/app/bsky/contact/util.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/util.js +10 -0
- package/dist/api/app/bsky/contact/util.js.map +1 -0
- package/dist/api/app/bsky/contact/verifyPhone.d.ts +4 -0
- package/dist/api/app/bsky/contact/verifyPhone.d.ts.map +1 -0
- package/dist/api/app/bsky/contact/verifyPhone.js +26 -0
- package/dist/api/app/bsky/contact/verifyPhone.js.map +1 -0
- package/dist/api/app/bsky/graph/getRelationships.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getRelationships.js +4 -0
- package/dist/api/app/bsky/graph/getRelationships.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +14 -0
- package/dist/api/index.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +3 -0
- package/dist/context.js.map +1 -1
- package/dist/hydration/actor.js +1 -1
- package/dist/hydration/actor.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/lexicon/index.d.ts +21 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +52 -1
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +908 -102
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +427 -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 +34 -0
- package/dist/lexicon/types/app/bsky/contact/defs.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/defs.js +34 -0
- package/dist/lexicon/types/app/bsky/contact/defs.js.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/dismissMatch.d.ts +25 -0
- package/dist/lexicon/types/app/bsky/contact/dismissMatch.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/dismissMatch.js +7 -0
- package/dist/lexicon/types/app/bsky/contact/dismissMatch.js.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/getMatches.d.ts +25 -0
- package/dist/lexicon/types/app/bsky/contact/getMatches.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/getMatches.js +7 -0
- package/dist/lexicon/types/app/bsky/contact/getMatches.js.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/getSyncStatus.d.ts +21 -0
- package/dist/lexicon/types/app/bsky/contact/getSyncStatus.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/getSyncStatus.js +7 -0
- package/dist/lexicon/types/app/bsky/contact/getSyncStatus.js.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/importContacts.d.ts +30 -0
- package/dist/lexicon/types/app/bsky/contact/importContacts.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/importContacts.js +7 -0
- package/dist/lexicon/types/app/bsky/contact/importContacts.js.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/removeData.d.ts +23 -0
- package/dist/lexicon/types/app/bsky/contact/removeData.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/removeData.js +7 -0
- package/dist/lexicon/types/app/bsky/contact/removeData.js.map +1 -0
- 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/contact/startPhoneVerification.d.ts +25 -0
- package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.js +7 -0
- package/dist/lexicon/types/app/bsky/contact/startPhoneVerification.js.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/verifyPhone.d.ts +29 -0
- package/dist/lexicon/types/app/bsky/contact/verifyPhone.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/contact/verifyPhone.js +7 -0
- package/dist/lexicon/types/app/bsky/contact/verifyPhone.js.map +1 -0
- package/dist/lexicon/types/app/bsky/graph/defs.d.ts +8 -0
- package/dist/lexicon/types/app/bsky/graph/defs.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/graph/defs.js.map +1 -1
- package/dist/proto/bsky_pb.d.ts +0 -4
- package/dist/proto/bsky_pb.d.ts.map +1 -1
- package/dist/proto/bsky_pb.js +0 -10
- package/dist/proto/bsky_pb.js.map +1 -1
- package/dist/proto/rolodex_connect.d.ts +83 -0
- package/dist/proto/rolodex_connect.d.ts.map +1 -0
- package/dist/proto/rolodex_connect.js +90 -0
- package/dist/proto/rolodex_connect.js.map +1 -0
- package/dist/proto/rolodex_pb.d.ts +363 -0
- package/dist/proto/rolodex_pb.d.ts.map +1 -0
- package/dist/proto/rolodex_pb.js +1032 -0
- package/dist/proto/rolodex_pb.js.map +1 -0
- package/dist/rolodex.d.ts +9 -0
- package/dist/rolodex.d.ts.map +1 -0
- package/dist/rolodex.js +25 -0
- package/dist/rolodex.js.map +1 -0
- 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 +11 -11
- package/proto/rolodex.proto +116 -0
- package/src/api/app/bsky/ageassurance/begin.ts +1 -4
- package/src/api/app/bsky/contact/dismissMatch.ts +24 -0
- package/src/api/app/bsky/contact/getMatches.ts +111 -0
- package/src/api/app/bsky/contact/getSyncStatus.ts +35 -0
- package/src/api/app/bsky/contact/importContacts.ts +118 -0
- package/src/api/app/bsky/contact/removeData.ts +23 -0
- package/src/api/app/bsky/contact/sendNotification.ts +32 -0
- package/src/api/app/bsky/contact/startPhoneVerification.ts +24 -0
- package/src/api/app/bsky/contact/util.ts +13 -0
- package/src/api/app/bsky/contact/verifyPhone.ts +27 -0
- package/src/api/app/bsky/graph/getRelationships.ts +4 -0
- package/src/api/index.ts +14 -0
- package/src/config.ts +27 -0
- package/src/context.ts +6 -0
- package/src/hydration/actor.ts +1 -1
- package/src/index.ts +13 -0
- package/src/lexicon/index.ts +114 -0
- package/src/lexicon/lexicons.ts +454 -0
- package/src/lexicon/types/app/bsky/actor/defs.ts +22 -0
- package/src/lexicon/types/app/bsky/contact/defs.ts +71 -0
- package/src/lexicon/types/app/bsky/contact/dismissMatch.ts +43 -0
- package/src/lexicon/types/app/bsky/contact/getMatches.ts +43 -0
- package/src/lexicon/types/app/bsky/contact/getSyncStatus.ts +39 -0
- package/src/lexicon/types/app/bsky/contact/importContacts.ts +49 -0
- package/src/lexicon/types/app/bsky/contact/removeData.ts +40 -0
- package/src/lexicon/types/app/bsky/contact/sendNotification.ts +44 -0
- package/src/lexicon/types/app/bsky/contact/startPhoneVerification.ts +43 -0
- package/src/lexicon/types/app/bsky/contact/verifyPhone.ts +48 -0
- package/src/lexicon/types/app/bsky/graph/defs.ts +8 -0
- package/src/proto/bsky_pb.ts +0 -6
- package/src/proto/rolodex_connect.ts +89 -0
- package/src/proto/rolodex_pb.ts +746 -0
- package/src/rolodex.ts +42 -0
- package/src/stash.ts +5 -2
- package/tests/views/__snapshots__/profile.test.ts.snap +103 -0
- package/tests/views/age-assurance-v2.test.ts +8 -1
- package/tests/views/profile.test.ts +39 -0
- package/tsconfig.build.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @atproto/bsky
|
|
2
2
|
|
|
3
|
+
## 0.0.201
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#4428](https://github.com/bluesky-social/atproto/pull/4428) [`6fab394`](https://github.com/bluesky-social/atproto/commit/6fab3940f6d09b4e9888e6c4140a70d3e4ebcb00) Thanks [@estrattonbailey](https://github.com/estrattonbailey)! - Allow users to re-initiate Age Assurance so long as they're not in a `blocked` state.
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`39fa570`](https://github.com/bluesky-social/atproto/commit/39fa57080fa04aa547b093cfeaaced3e2e62fc41), [`f4cef84`](https://github.com/bluesky-social/atproto/commit/f4cef84494114ca927c66428920ca3dc24ad2b1e)]:
|
|
10
|
+
- @atproto/api@0.18.6
|
|
11
|
+
|
|
12
|
+
## 0.0.200
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Updated dependencies [[`d551b0e`](https://github.com/bluesky-social/atproto/commit/d551b0e3527714c111c3ec6e4c90ad7f46369fab), [`380aa3b`](https://github.com/bluesky-social/atproto/commit/380aa3bfe73b5c4e59961c27ae988786b69c129d), [`308f432`](https://github.com/bluesky-social/atproto/commit/308f432f7aef196b4df0a6dc7c5367ab5a8b8964), [`a6e16cd`](https://github.com/bluesky-social/atproto/commit/a6e16cd0cd3029caf63ce2312dc5207532654763)]:
|
|
17
|
+
- @atproto/lexicon@0.6.0
|
|
18
|
+
- @atproto/api@0.18.5
|
|
19
|
+
- @atproto/common@0.5.3
|
|
20
|
+
- @atproto/xrpc-server@0.10.3
|
|
21
|
+
- @atproto/repo@0.8.12
|
|
22
|
+
- @atproto/sync@0.1.39
|
|
23
|
+
|
|
3
24
|
## 0.0.199
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"begin.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/ageassurance/begin.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAkB5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"begin.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/ageassurance/begin.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAkB5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAwGvD"}
|
|
@@ -26,8 +26,7 @@ function default_1(server, ctx) {
|
|
|
26
26
|
const actorDid = auth.credentials.iss;
|
|
27
27
|
const actorInfo = await getAgeVerificationState(ctx, actorDid);
|
|
28
28
|
if (actorInfo?.ageAssuranceStatus) {
|
|
29
|
-
if (actorInfo.ageAssuranceStatus.status
|
|
30
|
-
actorInfo.ageAssuranceStatus.status !== 'pending') {
|
|
29
|
+
if (actorInfo.ageAssuranceStatus.status === 'blocked') {
|
|
31
30
|
throw new xrpc_server_1.InvalidRequestError(`Cannot initiate age assurance flow from current state: ${actorInfo.ageAssuranceStatus.status}`, 'InvalidInitiation');
|
|
32
31
|
}
|
|
33
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"begin.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/ageassurance/begin.ts"],"names":[],"mappings":";;;;;AA2BA,
|
|
1
|
+
{"version":3,"file":"begin.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/ageassurance/begin.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto'\nimport { isEmailValid } from '@hapi/address'\nimport { isDisposableEmail } from 'disposable-email-domains-js'\nimport { getAgeAssuranceRegionConfig } from '@atproto/api'\nimport {\n InvalidRequestError,\n MethodNotImplementedError,\n} from '@atproto/xrpc-server'\nimport { AppContext } from '../../../../context'\nimport { Server } from '../../../../lexicon'\nimport { InputSchema } from '../../../../lexicon/types/app/bsky/ageassurance/begin'\nimport { httpLogger as log } from '../../../../logger'\nimport { ActorInfo } from '../../../../proto/bsky_pb'\nimport { AGE_ASSURANCE_CONFIG } from '../../../age-assurance/const'\nimport {\n KWS_SUPPORTED_LANGUAGES,\n KWS_V2_COUNTRIES,\n} from '../../../age-assurance/kws/const'\nimport {\n KWSExternalPayloadTooLargeError,\n KWSExternalPayloadVersion,\n serializeKWSExternalPayloadV2,\n} from '../../../age-assurance/kws/external-payload'\nimport { createEvent } from '../../../age-assurance/stash'\nimport { createLocationString } from '../../../age-assurance/util'\nimport { getClientUa } from '../../../kws/util'\n\nexport default function (server: Server, ctx: AppContext) {\n server.app.bsky.ageassurance.begin({\n auth: ctx.authVerifier.standard,\n handler: async ({ auth, input, req }) => {\n if (!ctx.kwsClient) {\n throw new MethodNotImplementedError(\n 'This service is not configured to support age assurance.',\n )\n }\n\n const actorDid = auth.credentials.iss\n const actorInfo = await getAgeVerificationState(ctx, actorDid)\n\n if (actorInfo?.ageAssuranceStatus) {\n if (actorInfo.ageAssuranceStatus.status === 'blocked') {\n throw new InvalidRequestError(\n `Cannot initiate age assurance flow from current state: ${actorInfo.ageAssuranceStatus.status}`,\n 'InvalidInitiation',\n )\n }\n }\n\n const attemptId = crypto.randomUUID()\n const { email, language, countryCode, regionCode } = validateInput(\n input.body,\n )\n\n let externalPayload: string\n try {\n externalPayload = serializeKWSExternalPayloadV2({\n version: KWSExternalPayloadVersion.V2,\n actorDid,\n attemptId,\n countryCode,\n regionCode,\n })\n } catch (err) {\n if (err instanceof KWSExternalPayloadTooLargeError) {\n log.error({ err, actorDid }, err.message)\n throw new InvalidRequestError(\n 'Age Assurance flow failed because DID is too long',\n 'DidTooLong',\n )\n }\n throw err\n }\n\n /*\n * Determine if age assurance config exists for this region. The calling\n * application should already have checked for this, so this is just a\n * safeguard.\n */\n const region = getAgeAssuranceRegionConfig(AGE_ASSURANCE_CONFIG, {\n countryCode,\n regionCode,\n })\n if (!region) {\n const message = 'Age Assurance is not required in this region'\n log.error({ actorDid, countryCode, regionCode }, message)\n throw new InvalidRequestError(message, 'RegionNotSupported')\n }\n\n const location = createLocationString(countryCode, regionCode)\n\n if (KWS_V2_COUNTRIES.has(region.countryCode)) {\n // `age-verified` flow\n await ctx.kwsClient.sendAgeVerifiedFlowEmail({\n location,\n email,\n externalPayload,\n language,\n })\n } else {\n // `adult-verified` flow is what we've been using prior to `age-verified`\n await ctx.kwsClient.sendAdultVerifiedFlowEmail({\n location,\n email,\n externalPayload,\n language,\n })\n }\n\n const event = await createEvent(ctx, actorDid, {\n attemptId,\n email,\n // Assumes `app.set('trust proxy', ...)` configured with `true` or specific values.\n initIp: req.ip,\n initUa: getClientUa(req),\n status: 'pending',\n access: 'unknown',\n countryCode,\n regionCode,\n })\n\n return {\n encoding: 'application/json',\n body: {\n lastInitiatedAt: event.createdAt,\n status: 'pending',\n access: 'unknown',\n },\n }\n },\n })\n}\n\nfunction validateInput({ email, language, ...rest }: InputSchema): InputSchema {\n if (!isEmailValid(email) || isDisposableEmail(email)) {\n throw new InvalidRequestError(\n 'This email address is not supported, please use a different email.',\n 'InvalidEmail',\n )\n }\n\n return {\n email,\n language: KWS_SUPPORTED_LANGUAGES.has(language) ? language : 'en',\n ...rest,\n }\n}\n\nasync function getAgeVerificationState(\n ctx: AppContext,\n actorDid: string,\n): Promise<ActorInfo | undefined> {\n try {\n const res = await ctx.dataplane.getActors({\n dids: [actorDid],\n returnAgeAssuranceForDids: [actorDid],\n skipCacheForDids: [actorDid],\n })\n\n return res.actors[0]\n } catch (err) {\n return undefined\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismissMatch.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/dismissMatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAmBvD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
function default_1(server, ctx) {
|
|
6
|
+
server.app.bsky.contact.dismissMatch({
|
|
7
|
+
auth: ctx.authVerifier.standard,
|
|
8
|
+
handler: async ({ input, auth }) => {
|
|
9
|
+
(0, util_1.assertRolodexOrThrowUnimplemented)(ctx);
|
|
10
|
+
const actor = auth.credentials.iss;
|
|
11
|
+
// TODO: Error handling.
|
|
12
|
+
await ctx.rolodexClient.dismissMatch({
|
|
13
|
+
actor,
|
|
14
|
+
subject: input.body.subject,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
encoding: 'application/json',
|
|
18
|
+
body: {},
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=dismissMatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismissMatch.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/dismissMatch.ts"],"names":[],"mappings":";;AAIA,4BAmBC;AArBD,iCAA0D;AAE1D,mBAAyB,MAAc,EAAE,GAAe;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACnC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;YACjC,IAAA,wCAAiC,EAAC,GAAG,CAAC,CAAA;YAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAA;YAClC,wBAAwB;YACxB,MAAM,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC;gBACnC,KAAK;gBACL,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;aAC5B,CAAC,CAAA;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,EAAE;aACT,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { AppContext } from '../../../../context'\nimport { Server } from '../../../../lexicon'\nimport { assertRolodexOrThrowUnimplemented } from './util'\n\nexport default function (server: Server, ctx: AppContext) {\n server.app.bsky.contact.dismissMatch({\n auth: ctx.authVerifier.standard,\n handler: async ({ input, auth }) => {\n assertRolodexOrThrowUnimplemented(ctx)\n\n const actor = auth.credentials.iss\n // TODO: Error handling.\n await ctx.rolodexClient.dismissMatch({\n actor,\n subject: input.body.subject,\n })\n\n return {\n encoding: 'application/json',\n body: {},\n }\n },\n })\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMatches.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/getMatches.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAMhD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAW5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAyBvD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
const common_1 = require("@atproto/common");
|
|
5
|
+
const pipeline_1 = require("../../../../pipeline");
|
|
6
|
+
const util_1 = require("./util");
|
|
7
|
+
function default_1(server, ctx) {
|
|
8
|
+
const getMatches = (0, pipeline_1.createPipeline)(skeleton, hydration, noBlocks, presentation);
|
|
9
|
+
server.app.bsky.contact.getMatches({
|
|
10
|
+
auth: ctx.authVerifier.standard,
|
|
11
|
+
handler: async ({ params, auth, req }) => {
|
|
12
|
+
(0, util_1.assertRolodexOrThrowUnimplemented)(ctx);
|
|
13
|
+
const viewer = auth.credentials.iss;
|
|
14
|
+
const labelers = ctx.reqLabelers(req);
|
|
15
|
+
const hydrateCtx = await ctx.hydrator.createContext({
|
|
16
|
+
labelers,
|
|
17
|
+
viewer,
|
|
18
|
+
});
|
|
19
|
+
const result = await getMatches({ ...params, hydrateCtx: hydrateCtx.copy({ viewer }) }, ctx);
|
|
20
|
+
return {
|
|
21
|
+
encoding: 'application/json',
|
|
22
|
+
body: result,
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const skeleton = async (input) => {
|
|
28
|
+
const { params, ctx } = input;
|
|
29
|
+
const actor = params.hydrateCtx.viewer;
|
|
30
|
+
// TODO: Error handling.
|
|
31
|
+
const { cursor, subjects } = await ctx.rolodexClient.getMatches({
|
|
32
|
+
actor: params.hydrateCtx.viewer,
|
|
33
|
+
limit: params.limit,
|
|
34
|
+
cursor: params.cursor,
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
actor,
|
|
38
|
+
subjects,
|
|
39
|
+
cursor: cursor || undefined,
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
const hydration = async (input) => {
|
|
43
|
+
const { ctx, params, skeleton } = input;
|
|
44
|
+
const { subjects } = skeleton;
|
|
45
|
+
return ctx.hydrator.hydrateProfiles(subjects, params.hydrateCtx);
|
|
46
|
+
};
|
|
47
|
+
const noBlocks = (inputs) => {
|
|
48
|
+
const { ctx, skeleton, hydration } = inputs;
|
|
49
|
+
skeleton.subjects = skeleton.subjects.filter((subject) => {
|
|
50
|
+
return !ctx.views.viewerBlockExists(subject, hydration);
|
|
51
|
+
});
|
|
52
|
+
return skeleton;
|
|
53
|
+
};
|
|
54
|
+
const presentation = (input) => {
|
|
55
|
+
const { ctx, skeleton, hydration } = input;
|
|
56
|
+
const matches = (0, common_1.mapDefined)(skeleton.subjects, (did) => ctx.views.profile(did, hydration));
|
|
57
|
+
return { matches };
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=getMatches.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMatches.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/getMatches.ts"],"names":[],"mappings":"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","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport { AppContext } from '../../../../context'\nimport {\n HydrateCtx,\n HydrationState,\n Hydrator,\n} from '../../../../hydration/hydrator'\nimport { Server } from '../../../../lexicon'\nimport { QueryParams } from '../../../../lexicon/types/app/bsky/contact/getMatches'\nimport {\n HydrationFnInput,\n SkeletonFnInput,\n createPipeline,\n} from '../../../../pipeline'\nimport { RolodexClient } from '../../../../rolodex'\nimport { Views } from '../../../../views'\nimport { assertRolodexOrThrowUnimplemented } from './util'\n\nexport default function (server: Server, ctx: AppContext) {\n const getMatches = createPipeline(skeleton, hydration, noBlocks, presentation)\n server.app.bsky.contact.getMatches({\n auth: ctx.authVerifier.standard,\n handler: async ({ params, auth, req }) => {\n assertRolodexOrThrowUnimplemented(ctx)\n\n const viewer = auth.credentials.iss\n const labelers = ctx.reqLabelers(req)\n const hydrateCtx = await ctx.hydrator.createContext({\n labelers,\n viewer,\n })\n\n const result = await getMatches(\n { ...params, hydrateCtx: hydrateCtx.copy({ viewer }) },\n ctx,\n )\n\n return {\n encoding: 'application/json',\n body: result,\n }\n },\n })\n}\n\nconst skeleton = async (\n input: SkeletonFnInput<Context, Params>,\n): Promise<SkeletonState> => {\n const { params, ctx } = input\n const actor = params.hydrateCtx.viewer\n // TODO: Error handling.\n const { cursor, subjects } = await ctx.rolodexClient.getMatches({\n actor: params.hydrateCtx.viewer,\n limit: params.limit,\n cursor: params.cursor,\n })\n return {\n actor,\n subjects,\n cursor: cursor || undefined,\n }\n}\n\nconst hydration = async (\n input: HydrationFnInput<Context, Params, SkeletonState>,\n) => {\n const { ctx, params, skeleton } = input\n const { subjects } = skeleton\n return ctx.hydrator.hydrateProfiles(subjects, params.hydrateCtx)\n}\n\nconst noBlocks = (inputs: {\n ctx: Context\n skeleton: SkeletonState\n hydration: HydrationState\n}) => {\n const { ctx, skeleton, hydration } = inputs\n skeleton.subjects = skeleton.subjects.filter((subject) => {\n return !ctx.views.viewerBlockExists(subject, hydration)\n })\n return skeleton\n}\n\nconst presentation = (input: {\n ctx: Context\n params: Params\n skeleton: SkeletonState\n hydration: HydrationState\n}) => {\n const { ctx, skeleton, hydration } = input\n const matches = mapDefined(skeleton.subjects, (did) =>\n ctx.views.profile(did, hydration),\n )\n return { matches }\n}\n\ntype Context = {\n hydrator: Hydrator\n rolodexClient: RolodexClient\n views: Views\n}\n\ntype Params = QueryParams & {\n hydrateCtx: HydrateCtx & { viewer: string }\n}\n\ntype SkeletonState = {\n actor: string\n subjects: string[]\n cursor?: string\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSyncStatus.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/getSyncStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAI5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QA6BvD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
function default_1(server, ctx) {
|
|
6
|
+
server.app.bsky.contact.getSyncStatus({
|
|
7
|
+
auth: ctx.authVerifier.standard,
|
|
8
|
+
handler: async ({ auth }) => {
|
|
9
|
+
(0, util_1.assertRolodexOrThrowUnimplemented)(ctx);
|
|
10
|
+
const actor = auth.credentials.iss;
|
|
11
|
+
// TODO: Error handling.
|
|
12
|
+
const res = await ctx.rolodexClient.getSyncStatus({
|
|
13
|
+
actor,
|
|
14
|
+
});
|
|
15
|
+
let syncStatus;
|
|
16
|
+
if (res.status && res.status.syncedAt) {
|
|
17
|
+
const syncedAt = res.status?.syncedAt?.toDate().toISOString();
|
|
18
|
+
syncStatus = {
|
|
19
|
+
matchesCount: res.status.matchesCount,
|
|
20
|
+
syncedAt,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
encoding: 'application/json',
|
|
25
|
+
body: {
|
|
26
|
+
syncStatus,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=getSyncStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSyncStatus.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/getSyncStatus.ts"],"names":[],"mappings":";;AAKA,4BA6BC;AA/BD,iCAA0D;AAE1D,mBAAyB,MAAc,EAAE,GAAe;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACpC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAC1B,IAAA,wCAAiC,EAAC,GAAG,CAAC,CAAA;YAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAA;YAClC,wBAAwB;YACxB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC;gBAChD,KAAK;aACN,CAAC,CAAA;YAEF,IAAI,UAAkC,CAAA;YACtC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,CAAA;gBAC7D,UAAU,GAAG;oBACX,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY;oBACrC,QAAQ;iBACT,CAAA;YACH,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE;oBACJ,UAAU;iBACX;aACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { AppContext } from '../../../../context'\nimport { Server } from '../../../../lexicon'\nimport { SyncStatus } from '../../../../lexicon/types/app/bsky/contact/defs'\nimport { assertRolodexOrThrowUnimplemented } from './util'\n\nexport default function (server: Server, ctx: AppContext) {\n server.app.bsky.contact.getSyncStatus({\n auth: ctx.authVerifier.standard,\n handler: async ({ auth }) => {\n assertRolodexOrThrowUnimplemented(ctx)\n\n const actor = auth.credentials.iss\n // TODO: Error handling.\n const res = await ctx.rolodexClient.getSyncStatus({\n actor,\n })\n\n let syncStatus: SyncStatus | undefined\n if (res.status && res.status.syncedAt) {\n const syncedAt = res.status?.syncedAt?.toDate().toISOString()\n syncStatus = {\n matchesCount: res.status.matchesCount,\n syncedAt,\n }\n }\n\n return {\n encoding: 'application/json',\n body: {\n syncStatus,\n },\n }\n },\n })\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importContacts.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/importContacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAMhD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAc5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QA8BvD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
const common_1 = require("@atproto/common");
|
|
5
|
+
const pipeline_1 = require("../../../../pipeline");
|
|
6
|
+
const util_1 = require("./util");
|
|
7
|
+
function default_1(server, ctx) {
|
|
8
|
+
const importContacts = (0, pipeline_1.createPipeline)(skeleton, hydration, pipeline_1.noRules, //
|
|
9
|
+
presentation);
|
|
10
|
+
server.app.bsky.contact.importContacts({
|
|
11
|
+
auth: ctx.authVerifier.standard,
|
|
12
|
+
handler: async ({ input, auth, req }) => {
|
|
13
|
+
(0, util_1.assertRolodexOrThrowUnimplemented)(ctx);
|
|
14
|
+
const viewer = auth.credentials.iss;
|
|
15
|
+
const labelers = ctx.reqLabelers(req);
|
|
16
|
+
const hydrateCtx = await ctx.hydrator.createContext({
|
|
17
|
+
labelers,
|
|
18
|
+
viewer,
|
|
19
|
+
});
|
|
20
|
+
const result = await importContacts({ ...input.body, hydrateCtx: hydrateCtx.copy({ viewer }) }, ctx);
|
|
21
|
+
return {
|
|
22
|
+
encoding: 'application/json',
|
|
23
|
+
body: result,
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const skeleton = async (input) => {
|
|
29
|
+
const { params, ctx } = input;
|
|
30
|
+
const actor = params.hydrateCtx.viewer;
|
|
31
|
+
// TODO: Error handling.
|
|
32
|
+
const { matches } = await ctx.rolodexClient.importContacts({
|
|
33
|
+
actor: params.hydrateCtx.viewer,
|
|
34
|
+
contacts: params.contacts,
|
|
35
|
+
token: params.token,
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
actor,
|
|
39
|
+
matches,
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
const hydration = async (input) => {
|
|
43
|
+
const { ctx, params, skeleton } = input;
|
|
44
|
+
const { matches } = skeleton;
|
|
45
|
+
const subjects = matches.map((m) => m.subject);
|
|
46
|
+
return ctx.hydrator.hydrateProfiles(subjects, params.hydrateCtx);
|
|
47
|
+
};
|
|
48
|
+
const presentation = (input) => {
|
|
49
|
+
const { ctx, skeleton, hydration } = input;
|
|
50
|
+
const matchesAndContactIndexes = (0, common_1.mapDefined)(skeleton.matches, ({ subject, inputIndex }) => {
|
|
51
|
+
const profile = ctx.views.profile(subject, hydration);
|
|
52
|
+
if (!profile) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
contactIndex: inputIndex,
|
|
57
|
+
match: profile,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
return { matchesAndContactIndexes };
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=importContacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importContacts.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/importContacts.ts"],"names":[],"mappings":"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","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport { AppContext } from '../../../../context'\nimport {\n HydrateCtx,\n HydrationState,\n Hydrator,\n} from '../../../../hydration/hydrator'\nimport { Server } from '../../../../lexicon'\nimport { MatchAndContactIndex } from '../../../../lexicon/types/app/bsky/contact/defs'\nimport { InputSchema } from '../../../../lexicon/types/app/bsky/contact/importContacts'\nimport {\n HydrationFnInput,\n SkeletonFnInput,\n createPipeline,\n noRules,\n} from '../../../../pipeline'\nimport { ImportContactsMatch } from '../../../../proto/rolodex_pb'\nimport { RolodexClient } from '../../../../rolodex'\nimport { Views } from '../../../../views'\nimport { assertRolodexOrThrowUnimplemented } from './util'\n\nexport default function (server: Server, ctx: AppContext) {\n const importContacts = createPipeline(\n skeleton,\n hydration,\n noRules, //\n presentation,\n )\n server.app.bsky.contact.importContacts({\n auth: ctx.authVerifier.standard,\n handler: async ({ input, auth, req }) => {\n assertRolodexOrThrowUnimplemented(ctx)\n\n const viewer = auth.credentials.iss\n const labelers = ctx.reqLabelers(req)\n const hydrateCtx = await ctx.hydrator.createContext({\n labelers,\n viewer,\n })\n\n const result = await importContacts(\n { ...input.body, hydrateCtx: hydrateCtx.copy({ viewer }) },\n ctx,\n )\n\n return {\n encoding: 'application/json',\n body: result,\n }\n },\n })\n}\n\nconst skeleton = async (\n input: SkeletonFnInput<Context, Params>,\n): Promise<SkeletonState> => {\n const { params, ctx } = input\n const actor = params.hydrateCtx.viewer\n // TODO: Error handling.\n const { matches } = await ctx.rolodexClient.importContacts({\n actor: params.hydrateCtx.viewer,\n contacts: params.contacts,\n token: params.token,\n })\n return {\n actor,\n matches,\n }\n}\n\nconst hydration = async (\n input: HydrationFnInput<Context, Params, SkeletonState>,\n) => {\n const { ctx, params, skeleton } = input\n const { matches } = skeleton\n const subjects = matches.map((m) => m.subject)\n return ctx.hydrator.hydrateProfiles(subjects, params.hydrateCtx)\n}\n\nconst presentation = (input: {\n ctx: Context\n params: Params\n skeleton: SkeletonState\n hydration: HydrationState\n}) => {\n const { ctx, skeleton, hydration } = input\n const matchesAndContactIndexes = mapDefined(\n skeleton.matches,\n ({ subject, inputIndex }): MatchAndContactIndex | undefined => {\n const profile = ctx.views.profile(subject, hydration)\n\n if (!profile) {\n return undefined\n }\n\n return {\n contactIndex: inputIndex,\n match: profile,\n }\n },\n )\n return { matchesAndContactIndexes }\n}\n\ntype Context = {\n hydrator: Hydrator\n rolodexClient: RolodexClient\n views: Views\n}\n\ntype Params = InputSchema & {\n hydrateCtx: HydrateCtx & { viewer: string }\n}\n\ntype SkeletonState = {\n actor: string\n matches: ImportContactsMatch[]\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeData.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/removeData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAkBvD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
function default_1(server, ctx) {
|
|
6
|
+
server.app.bsky.contact.removeData({
|
|
7
|
+
auth: ctx.authVerifier.standard,
|
|
8
|
+
handler: async ({ auth }) => {
|
|
9
|
+
(0, util_1.assertRolodexOrThrowUnimplemented)(ctx);
|
|
10
|
+
const actor = auth.credentials.iss;
|
|
11
|
+
// TODO: Error handling.
|
|
12
|
+
await ctx.rolodexClient.removeData({
|
|
13
|
+
actor,
|
|
14
|
+
});
|
|
15
|
+
return {
|
|
16
|
+
encoding: 'application/json',
|
|
17
|
+
body: {},
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=removeData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeData.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/removeData.ts"],"names":[],"mappings":";;AAIA,4BAkBC;AApBD,iCAA0D;AAE1D,mBAAyB,MAAc,EAAE,GAAe;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAC1B,IAAA,wCAAiC,EAAC,GAAG,CAAC,CAAA;YAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAA;YAClC,wBAAwB;YACxB,MAAM,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC;gBACjC,KAAK;aACN,CAAC,CAAA;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,EAAE;aACT,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { AppContext } from '../../../../context'\nimport { Server } from '../../../../lexicon'\nimport { assertRolodexOrThrowUnimplemented } from './util'\n\nexport default function (server: Server, ctx: AppContext) {\n server.app.bsky.contact.removeData({\n auth: ctx.authVerifier.standard,\n handler: async ({ auth }) => {\n assertRolodexOrThrowUnimplemented(ctx)\n\n const actor = auth.credentials.iss\n // TODO: Error handling.\n await ctx.rolodexClient.removeData({\n actor,\n })\n\n return {\n encoding: 'application/json',\n body: {},\n }\n },\n })\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendNotification.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/sendNotification.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAI5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAyBvD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
const common_1 = require("@atproto/common");
|
|
5
|
+
const stash_1 = require("../../../../stash");
|
|
6
|
+
const util_1 = require("./util");
|
|
7
|
+
function default_1(server, ctx) {
|
|
8
|
+
server.app.bsky.contact.sendNotification({
|
|
9
|
+
auth: ctx.authVerifier.role,
|
|
10
|
+
handler: async ({ input }) => {
|
|
11
|
+
// Assert rolodex even though we don't call it, it is a proxy to whether the app is configured with contact import support.
|
|
12
|
+
(0, util_1.assertRolodexOrThrowUnimplemented)(ctx);
|
|
13
|
+
const { from, to } = input.body;
|
|
14
|
+
await ctx.stashClient.create({
|
|
15
|
+
actorDid: from,
|
|
16
|
+
namespace: stash_1.Namespaces.AppBskyContactDefsNotification,
|
|
17
|
+
payload: {
|
|
18
|
+
from,
|
|
19
|
+
to,
|
|
20
|
+
},
|
|
21
|
+
key: common_1.TID.nextStr(),
|
|
22
|
+
});
|
|
23
|
+
return {
|
|
24
|
+
encoding: 'application/json',
|
|
25
|
+
body: {},
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=sendNotification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendNotification.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/sendNotification.ts"],"names":[],"mappings":";;AAMA,4BAyBC;AA/BD,4CAAqC;AAGrC,6CAA8C;AAC9C,iCAA0D;AAE1D,mBAAyB,MAAc,EAAE,GAAe;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI;QAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3B,2HAA2H;YAC3H,IAAA,wCAAiC,EAAC,GAAG,CAAC,CAAA;YAEtC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;YAE/B,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC3B,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,kBAAU,CAAC,8BAA8B;gBACpD,OAAO,EAAE;oBACP,IAAI;oBACJ,EAAE;iBACH;gBACD,GAAG,EAAE,YAAG,CAAC,OAAO,EAAE;aACnB,CAAC,CAAA;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,EAAE;aACT,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { TID } from '@atproto/common'\nimport { AppContext } from '../../../../context'\nimport { Server } from '../../../../lexicon'\nimport { Namespaces } from '../../../../stash'\nimport { assertRolodexOrThrowUnimplemented } from './util'\n\nexport default function (server: Server, ctx: AppContext) {\n server.app.bsky.contact.sendNotification({\n auth: ctx.authVerifier.role,\n handler: async ({ input }) => {\n // Assert rolodex even though we don't call it, it is a proxy to whether the app is configured with contact import support.\n assertRolodexOrThrowUnimplemented(ctx)\n\n const { from, to } = input.body\n\n await ctx.stashClient.create({\n actorDid: from,\n namespace: Namespaces.AppBskyContactDefsNotification,\n payload: {\n from,\n to,\n },\n key: TID.nextStr(),\n })\n\n return {\n encoding: 'application/json',\n body: {},\n }\n },\n })\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startPhoneVerification.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/startPhoneVerification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAmBvD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
function default_1(server, ctx) {
|
|
6
|
+
server.app.bsky.contact.startPhoneVerification({
|
|
7
|
+
auth: ctx.authVerifier.standard,
|
|
8
|
+
handler: async ({ auth, input }) => {
|
|
9
|
+
(0, util_1.assertRolodexOrThrowUnimplemented)(ctx);
|
|
10
|
+
const actor = auth.credentials.iss;
|
|
11
|
+
// TODO: Error handling.
|
|
12
|
+
await ctx.rolodexClient.startPhoneVerification({
|
|
13
|
+
actor,
|
|
14
|
+
phone: input.body.phone,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
encoding: 'application/json',
|
|
18
|
+
body: {},
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=startPhoneVerification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startPhoneVerification.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/startPhoneVerification.ts"],"names":[],"mappings":";;AAIA,4BAmBC;AArBD,iCAA0D;AAE1D,mBAAyB,MAAc,EAAE,GAAe;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;QAC7C,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YACjC,IAAA,wCAAiC,EAAC,GAAG,CAAC,CAAA;YAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAA;YAClC,wBAAwB;YACxB,MAAM,GAAG,CAAC,aAAa,CAAC,sBAAsB,CAAC;gBAC7C,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;aACxB,CAAC,CAAA;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,EAAE;aACT,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { AppContext } from '../../../../context'\nimport { Server } from '../../../../lexicon'\nimport { assertRolodexOrThrowUnimplemented } from './util'\n\nexport default function (server: Server, ctx: AppContext) {\n server.app.bsky.contact.startPhoneVerification({\n auth: ctx.authVerifier.standard,\n handler: async ({ auth, input }) => {\n assertRolodexOrThrowUnimplemented(ctx)\n\n const actor = auth.credentials.iss\n // TODO: Error handling.\n await ctx.rolodexClient.startPhoneVerification({\n actor,\n phone: input.body.phone,\n })\n\n return {\n encoding: 'application/json',\n body: {},\n }\n },\n })\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AppContext } from '../../../..';
|
|
2
|
+
import { RolodexClient } from '../../../../rolodex';
|
|
3
|
+
export declare function assertRolodexOrThrowUnimplemented(ctx: AppContext): asserts ctx is AppContext & {
|
|
4
|
+
rolodexClient: RolodexClient;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,GAAG,IAAI,UAAU,GAAG;IAAE,aAAa,EAAE,aAAa,CAAA;CAAE,CAM9D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertRolodexOrThrowUnimplemented = assertRolodexOrThrowUnimplemented;
|
|
4
|
+
const xrpc_server_1 = require("@atproto/xrpc-server");
|
|
5
|
+
function assertRolodexOrThrowUnimplemented(ctx) {
|
|
6
|
+
if (!ctx.rolodexClient) {
|
|
7
|
+
throw new xrpc_server_1.MethodNotImplementedError('This service is not configured to support contact imports.');
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/util.ts"],"names":[],"mappings":";;AAIA,8EAQC;AAZD,sDAAgE;AAIhE,SAAgB,iCAAiC,CAC/C,GAAe;IAEf,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,IAAI,uCAAyB,CACjC,4DAA4D,CAC7D,CAAA;IACH,CAAC;AACH,CAAC","sourcesContent":["import { MethodNotImplementedError } from '@atproto/xrpc-server'\nimport { AppContext } from '../../../..'\nimport { RolodexClient } from '../../../../rolodex'\n\nexport function assertRolodexOrThrowUnimplemented(\n ctx: AppContext,\n): asserts ctx is AppContext & { rolodexClient: RolodexClient } {\n if (!ctx.rolodexClient) {\n throw new MethodNotImplementedError(\n 'This service is not configured to support contact imports.',\n )\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyPhone.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/verifyPhone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAsBvD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
function default_1(server, ctx) {
|
|
6
|
+
server.app.bsky.contact.verifyPhone({
|
|
7
|
+
auth: ctx.authVerifier.standard,
|
|
8
|
+
handler: async ({ auth, input }) => {
|
|
9
|
+
(0, util_1.assertRolodexOrThrowUnimplemented)(ctx);
|
|
10
|
+
const actor = auth.credentials.iss;
|
|
11
|
+
// TODO: Error handling.
|
|
12
|
+
const res = await ctx.rolodexClient.verifyPhone({
|
|
13
|
+
actor,
|
|
14
|
+
verificationCode: input.body.code,
|
|
15
|
+
phone: input.body.phone,
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
encoding: 'application/json',
|
|
19
|
+
body: {
|
|
20
|
+
token: res.token,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=verifyPhone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifyPhone.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/contact/verifyPhone.ts"],"names":[],"mappings":";;AAIA,4BAsBC;AAxBD,iCAA0D;AAE1D,mBAAyB,MAAc,EAAE,GAAe;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAClC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YACjC,IAAA,wCAAiC,EAAC,GAAG,CAAC,CAAA;YAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAA;YAClC,wBAAwB;YACxB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC;gBAC9C,KAAK;gBACL,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACjC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;aACxB,CAAC,CAAA;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE;oBACJ,KAAK,EAAE,GAAG,CAAC,KAAK;iBACjB;aACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { AppContext } from '../../../../context'\nimport { Server } from '../../../../lexicon'\nimport { assertRolodexOrThrowUnimplemented } from './util'\n\nexport default function (server: Server, ctx: AppContext) {\n server.app.bsky.contact.verifyPhone({\n auth: ctx.authVerifier.standard,\n handler: async ({ auth, input }) => {\n assertRolodexOrThrowUnimplemented(ctx)\n\n const actor = auth.credentials.iss\n // TODO: Error handling.\n const res = await ctx.rolodexClient.verifyPhone({\n actor,\n verificationCode: input.body.code,\n phone: input.body.phone,\n })\n\n return {\n encoding: 'application/json',\n body: {\n token: res.token,\n },\n }\n },\n })\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRelationships.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/graph/getRelationships.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"getRelationships.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/graph/getRelationships.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QA6CvD"}
|
|
@@ -23,6 +23,10 @@ function default_1(server, ctx) {
|
|
|
23
23
|
did,
|
|
24
24
|
following: subject.following,
|
|
25
25
|
followedBy: subject.followedBy,
|
|
26
|
+
blocking: subject.blocking,
|
|
27
|
+
blockedBy: subject.blockedBy,
|
|
28
|
+
blockingByList: subject.blockingByList,
|
|
29
|
+
blockedByList: subject.blockedByList,
|
|
26
30
|
}
|
|
27
31
|
: {
|
|
28
32
|
$type: 'app.bsky.graph.defs#notFoundActor',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRelationships.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/graph/getRelationships.ts"],"names":[],"mappings":";;AAGA,
|
|
1
|
+
{"version":3,"file":"getRelationships.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/graph/getRelationships.ts"],"names":[],"mappings":";;AAGA,4BA6CC;AA7CD,mBAAyB,MAAc,EAAE,GAAe;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5B,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,MAAM,CAAA;YACrC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO;oBACL,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE;wBACJ,KAAK;wBACL,aAAa,EAAE,EAAE;qBAClB;iBACF,CAAA;YACH,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,2BAA2B,CAC9D,MAAM,EACN,KAAK,CACN,CAAA;YACD,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACvC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC5B,OAAO,OAAO;oBACZ,CAAC,CAAC;wBACE,KAAK,EAAE,kCAAkC;wBACzC,GAAG;wBACH,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;wBAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;wBACtC,aAAa,EAAE,OAAO,CAAC,aAAa;qBACrC;oBACH,CAAC,CAAC;wBACE,KAAK,EAAE,mCAAmC;wBAC1C,KAAK,EAAE,GAAG;wBACV,QAAQ,EAAE,IAAI;qBACf,CAAA;YACP,CAAC,CAAC,CAAA;YACF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE;oBACJ,KAAK;oBACL,aAAa;iBACd;aACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { AppContext } from '../../../../context'\nimport { Server } from '../../../../lexicon'\n\nexport default function (server: Server, ctx: AppContext) {\n server.app.bsky.graph.getRelationships({\n handler: async ({ params }) => {\n const { actor, others = [] } = params\n if (others.length < 1) {\n return {\n encoding: 'application/json',\n body: {\n actor,\n relationships: [],\n },\n }\n }\n const res = await ctx.hydrator.actor.getProfileViewerStatesNaive(\n others,\n actor,\n )\n const relationships = others.map((did) => {\n const subject = res.get(did)\n return subject\n ? {\n $type: 'app.bsky.graph.defs#relationship',\n did,\n following: subject.following,\n followedBy: subject.followedBy,\n blocking: subject.blocking,\n blockedBy: subject.blockedBy,\n blockingByList: subject.blockingByList,\n blockedByList: subject.blockedByList,\n }\n : {\n $type: 'app.bsky.graph.defs#notFoundActor',\n actor: did,\n notFound: true,\n }\n })\n return {\n encoding: 'application/json',\n body: {\n actor,\n relationships,\n },\n }\n },\n })\n}\n"]}
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAwFnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAElC,OAAO,KAAK,SAAS,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAA;AAE/C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAA;AAEtC,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,UA0FvD"}
|