@atproto/dev-env 0.3.214 → 0.4.0
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 +28 -0
- package/bin.js +12 -0
- package/dist/bin.js +0 -0
- package/dist/bsky.d.ts +3 -1
- package/dist/bsky.d.ts.map +1 -1
- package/dist/bsky.js +7 -1
- package/dist/bsky.js.map +1 -1
- package/dist/feed-gen.d.ts.map +1 -1
- package/dist/feed-gen.js +7 -10
- package/dist/feed-gen.js.map +1 -1
- package/dist/mock/index.js +5 -5
- package/dist/mock/index.js.map +1 -1
- package/dist/moderator-client.js +1 -1
- package/dist/moderator-client.js.map +1 -1
- package/dist/network-no-appview.d.ts.map +1 -1
- package/dist/network-no-appview.js +3 -2
- package/dist/network-no-appview.js.map +1 -1
- package/dist/ozone.d.ts +1 -1
- package/dist/ozone.d.ts.map +1 -1
- package/dist/ozone.js +1 -1
- package/dist/ozone.js.map +1 -1
- package/dist/pds.d.ts +3 -1
- package/dist/pds.d.ts.map +1 -1
- package/dist/pds.js +7 -1
- package/dist/pds.js.map +1 -1
- package/dist/seed/client.d.ts +11 -9
- package/dist/seed/client.d.ts.map +1 -1
- package/dist/seed/client.js +10 -2
- package/dist/seed/client.js.map +1 -1
- package/dist/service-profile-lexicon.js +5 -5
- package/dist/service-profile-lexicon.js.map +1 -1
- package/dist/service-profile-ozone.d.ts +1 -1
- package/dist/service-profile-ozone.d.ts.map +1 -1
- package/dist/service-profile-ozone.js +8 -8
- package/dist/service-profile-ozone.js.map +1 -1
- package/dist/service-profile.d.ts +4 -3
- package/dist/service-profile.d.ts.map +1 -1
- package/dist/service-profile.js +16 -16
- package/dist/service-profile.js.map +1 -1
- package/package.json +11 -10
- package/src/bsky.ts +8 -1
- package/src/feed-gen.ts +17 -16
- package/src/mock/index.ts +10 -10
- package/src/moderator-client.ts +1 -1
- package/src/network-no-appview.ts +3 -2
- package/src/ozone.ts +1 -1
- package/src/pds.ts +8 -1
- package/src/seed/client.ts +11 -7
- package/src/service-profile-lexicon.ts +5 -5
- package/src/service-profile-ozone.ts +8 -8
- package/src/service-profile.ts +16 -15
package/dist/ozone.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ozone.js","sourceRoot":"","sources":["../src/ozone.ts"],"names":[],"mappings":"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","sourcesContent":["import * as plc from '@did-plc/lib'\nimport getPort from 'get-port'\nimport * as ui8 from 'uint8arrays'\nimport { AtpAgent } from '@atproto/api'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport * as ozone from '@atproto/ozone'\nimport { createServiceJwt } from '@atproto/xrpc-server'\nimport { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const'\nimport { ModeratorClient } from './moderator-client'\nimport { DidAndKey, OzoneConfig } from './types'\nimport { createDidAndKey } from './util'\n\nexport class TestOzone {\n constructor(\n public url: string,\n public port: number,\n public server: ozone.OzoneService,\n public daemon: ozone.OzoneDaemon,\n public adminAccnt: DidAndKey,\n public moderatorAccnt: DidAndKey,\n public triageAccnt: DidAndKey,\n ) {}\n\n static async create(config: OzoneConfig): Promise<TestOzone> {\n const serviceKeypair =\n config.signingKey ?? (await Secp256k1Keypair.create({ exportable: true }))\n const signingKeyHex = ui8.toString(await serviceKeypair.export(), 'hex')\n let serverDid = config.serverDid\n if (!serverDid) {\n serverDid = await createOzoneDid(config.plcUrl, serviceKeypair)\n }\n\n const admin = await createDidAndKey({\n plcUrl: config.plcUrl,\n handle: 'admin.ozone',\n pds: 'https://pds.invalid',\n })\n\n const moderator = await createDidAndKey({\n plcUrl: config.plcUrl,\n handle: 'moderator.ozone',\n pds: 'https://pds.invalid',\n })\n\n const triage = await createDidAndKey({\n plcUrl: config.plcUrl,\n handle: 'triage.ozone',\n pds: 'https://pds.invalid',\n })\n\n const port = config.port || (await getPort())\n const url = `http://localhost:${port}`\n\n const env: ozone.OzoneEnvironment = {\n devMode: true,\n version: '0.0.0',\n port,\n didPlcUrl: config.plcUrl,\n publicUrl: url,\n serverDid,\n signingKeyHex,\n ...config,\n adminPassword: ADMIN_PASSWORD,\n adminDids: [...(config.adminDids ?? []), admin.did],\n moderatorDids: [\n ...(config.moderatorDids ?? []),\n config.appviewDid,\n moderator.did,\n ],\n triageDids: [...(config.triageDids ?? []), triage.did],\n }\n\n // Separate migration db in case migration changes some connection state that we need in the tests, e.g. \"alter database ... set ...\"\n const migrationDb = new ozone.Database({\n schema: config.dbPostgresSchema,\n url: config.dbPostgresUrl,\n })\n if (config.migration) {\n await migrationDb.migrateToOrThrow(config.migration)\n } else {\n await migrationDb.migrateToLatestOrThrow()\n }\n await migrationDb.close()\n\n const cfg = ozone.envToCfg(env)\n const secrets = ozone.envToSecrets(env)\n\n // api server\n const server = await ozone.OzoneService.create(cfg, secrets, {\n imgInvalidator: config.imgInvalidator,\n })\n await server.start()\n\n const daemon = await ozone.OzoneDaemon.create(cfg, secrets)\n await daemon.start()\n // don't do event reversal in dev-env\n await daemon.ctx.eventReverser.destroy()\n\n return new TestOzone(url, port, server, daemon, admin, moderator, triage)\n }\n\n get ctx(): ozone.AppContext {\n return this.server.ctx\n }\n\n getClient(): AtpAgent {\n const agent = new AtpAgent({ service: this.url })\n agent.configureLabelers([EXAMPLE_LABELER])\n return agent\n }\n\n getModClient() {\n return new ModeratorClient(this)\n }\n\n async addAdminDid(did: string) {\n await this.ctx.teamService(this.ctx.db).create({\n did,\n disabled: false,\n handle: null,\n displayName: null,\n lastUpdatedBy: this.ctx.cfg.service.did,\n role: 'tools.ozone.team.defs#roleAdmin',\n })\n this.ctx.cfg.access.admins.push(did)\n }\n\n async addModeratorDid(did: string) {\n await this.ctx.teamService(this.ctx.db).create({\n did,\n disabled: false,\n handle: null,\n displayName: null,\n lastUpdatedBy: this.ctx.cfg.service.did,\n role: 'tools.ozone.team.defs#roleModerator',\n })\n this.ctx.cfg.access.moderators.push(did)\n }\n\n async addTriageDid(did: string) {\n await this.ctx.teamService(this.ctx.db).create({\n did,\n disabled: false,\n handle: null,\n displayName: null,\n lastUpdatedBy: this.ctx.cfg.service.did,\n role: 'tools.ozone.team.defs#roleTriage',\n })\n this.ctx.cfg.access.triage.push(did)\n }\n\n async createPolicies() {\n const now = new Date()\n const defaultOptions = {\n managerRole: 'tools.ozone.team.defs#roleAdmin' as const,\n scope: 'instance' as const,\n did: this.ctx.cfg.service.did,\n lastUpdatedBy: this.ctx.cfg.service.did,\n createdBy: this.ctx.cfg.service.did,\n createdAt: now,\n updatedAt: now,\n }\n await this.ctx.settingService(this.ctx.db).upsert({\n ...defaultOptions,\n key: 'tools.ozone.setting.severityLevels',\n value: {\n 'sev-2': {\n strikeCount: 2,\n expiryInDays: 90,\n },\n 'sev-4': {\n strikeCount: 4,\n expiryInDays: 365,\n },\n 'sev-7': {\n needsTakedown: true,\n description: 'Sever violation, immedate account takedown',\n },\n 'custom-sev': {\n strikeCount: 4,\n firstOccurrenceStrikeCount: 8,\n description: 'First offense harsher penalty, on subsequent less',\n },\n },\n description: 'Severity levels and strike count mapping for policies',\n })\n await this.ctx.settingService(this.ctx.db).upsert({\n ...defaultOptions,\n key: 'tools.ozone.setting.policyList',\n value: {\n 'policy-one': {\n name: 'Policy One',\n description: 'Policy for handling user behavior',\n severityLevels: {\n 'sev-1': {\n description: 'Minor infraction',\n isDefault: true,\n },\n 'sev-2': {\n description: 'Moderate infraction',\n isDefault: false,\n },\n },\n },\n 'policy-two': {\n name: 'Policy Two',\n description: 'Policy for handling user action',\n severityLevels: {\n 'sev-4': {\n description: 'Moderate infraction',\n isDefault: false,\n },\n 'sev-5': {\n description: 'Severe infraction',\n isDefault: false,\n },\n },\n },\n },\n description: 'Moderation policies to be associated with actions',\n })\n }\n\n async modHeaders(\n lxm: string,\n role: 'admin' | 'moderator' | 'triage' = 'moderator',\n ) {\n const account =\n role === 'admin'\n ? this.adminAccnt\n : role === 'moderator'\n ? this.moderatorAccnt\n : this.triageAccnt\n const jwt = await createServiceJwt({\n iss: account.did,\n aud: this.ctx.cfg.service.did,\n lxm,\n keypair: account.key,\n })\n return { authorization: `Bearer ${jwt}` }\n }\n\n async processAll() {\n await this.ctx.backgroundQueue.processAll()\n await this.daemon.processAll()\n }\n\n async close() {\n await this.daemon.destroy()\n await this.server.destroy()\n }\n}\n\nexport const createOzoneDid = async (\n plcUrl: string,\n keypair: Keypair,\n): Promise<string> => {\n const plcClient = new plc.Client(plcUrl)\n const plcOp = await plc.signOperation(\n {\n type: 'plc_operation',\n alsoKnownAs: [],\n rotationKeys: [keypair.did()],\n verificationMethods: {\n atproto_label: keypair.did(),\n },\n services: {\n atproto_labeler: {\n type: 'AtprotoLabeler',\n endpoint: 'https://ozone.public.url',\n },\n },\n prev: null,\n },\n keypair,\n )\n const did = await plc.didForCreateOp(plcOp)\n await plcClient.sendOperation(did, plcOp)\n return did\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ozone.js","sourceRoot":"","sources":["../src/ozone.ts"],"names":[],"mappings":"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","sourcesContent":["import * as plc from '@did-plc/lib'\nimport getPort from 'get-port'\nimport * as ui8 from 'uint8arrays'\nimport { AtpAgent } from '@atproto/api'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport * as ozone from '@atproto/ozone'\nimport { createServiceJwt } from '@atproto/xrpc-server'\nimport { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const'\nimport { ModeratorClient } from './moderator-client'\nimport { DidAndKey, OzoneConfig } from './types'\nimport { createDidAndKey } from './util'\n\nexport class TestOzone {\n constructor(\n public url: string,\n public port: number,\n public server: ozone.OzoneService,\n public daemon: ozone.OzoneDaemon,\n public adminAccnt: DidAndKey,\n public moderatorAccnt: DidAndKey,\n public triageAccnt: DidAndKey,\n ) {}\n\n static async create(config: OzoneConfig): Promise<TestOzone> {\n const serviceKeypair =\n config.signingKey ?? (await Secp256k1Keypair.create({ exportable: true }))\n const signingKeyHex = ui8.toString(await serviceKeypair.export(), 'hex')\n let serverDid = config.serverDid\n if (!serverDid) {\n serverDid = await createOzoneDid(config.plcUrl, serviceKeypair)\n }\n\n const admin = await createDidAndKey({\n plcUrl: config.plcUrl,\n handle: 'admin.ozone',\n pds: 'https://pds.invalid',\n })\n\n const moderator = await createDidAndKey({\n plcUrl: config.plcUrl,\n handle: 'moderator.ozone',\n pds: 'https://pds.invalid',\n })\n\n const triage = await createDidAndKey({\n plcUrl: config.plcUrl,\n handle: 'triage.ozone',\n pds: 'https://pds.invalid',\n })\n\n const port = config.port || (await getPort())\n const url = `http://localhost:${port}`\n\n const env: ozone.OzoneEnvironment = {\n devMode: true,\n version: '0.0.0',\n port,\n didPlcUrl: config.plcUrl,\n publicUrl: url,\n serverDid,\n signingKeyHex,\n ...config,\n adminPassword: ADMIN_PASSWORD,\n adminDids: [...(config.adminDids ?? []), admin.did],\n moderatorDids: [\n ...(config.moderatorDids ?? []),\n config.appviewDid,\n moderator.did,\n ],\n triageDids: [...(config.triageDids ?? []), triage.did],\n }\n\n // Separate migration db in case migration changes some connection state that we need in the tests, e.g. \"alter database ... set ...\"\n const migrationDb = new ozone.Database({\n schema: config.dbPostgresSchema,\n url: config.dbPostgresUrl,\n })\n if (config.migration) {\n await migrationDb.migrateToOrThrow(config.migration)\n } else {\n await migrationDb.migrateToLatestOrThrow()\n }\n await migrationDb.close()\n\n const cfg = ozone.envToCfg(env)\n const secrets = ozone.envToSecrets(env)\n\n // api server\n const server = await ozone.OzoneService.create(cfg, secrets, {\n imgInvalidator: config.imgInvalidator,\n })\n await server.start()\n\n const daemon = await ozone.OzoneDaemon.create(cfg, secrets)\n await daemon.start()\n // don't do event reversal in dev-env\n await daemon.ctx.eventReverser.destroy()\n\n return new TestOzone(url, port, server, daemon, admin, moderator, triage)\n }\n\n get ctx(): ozone.AppContext {\n return this.server.ctx\n }\n\n getAgent(): AtpAgent {\n const agent = new AtpAgent({ service: this.url })\n agent.configureLabelers([EXAMPLE_LABELER])\n return agent\n }\n\n getModClient() {\n return new ModeratorClient(this)\n }\n\n async addAdminDid(did: string) {\n await this.ctx.teamService(this.ctx.db).create({\n did,\n disabled: false,\n handle: null,\n displayName: null,\n lastUpdatedBy: this.ctx.cfg.service.did,\n role: 'tools.ozone.team.defs#roleAdmin',\n })\n this.ctx.cfg.access.admins.push(did)\n }\n\n async addModeratorDid(did: string) {\n await this.ctx.teamService(this.ctx.db).create({\n did,\n disabled: false,\n handle: null,\n displayName: null,\n lastUpdatedBy: this.ctx.cfg.service.did,\n role: 'tools.ozone.team.defs#roleModerator',\n })\n this.ctx.cfg.access.moderators.push(did)\n }\n\n async addTriageDid(did: string) {\n await this.ctx.teamService(this.ctx.db).create({\n did,\n disabled: false,\n handle: null,\n displayName: null,\n lastUpdatedBy: this.ctx.cfg.service.did,\n role: 'tools.ozone.team.defs#roleTriage',\n })\n this.ctx.cfg.access.triage.push(did)\n }\n\n async createPolicies() {\n const now = new Date()\n const defaultOptions = {\n managerRole: 'tools.ozone.team.defs#roleAdmin' as const,\n scope: 'instance' as const,\n did: this.ctx.cfg.service.did,\n lastUpdatedBy: this.ctx.cfg.service.did,\n createdBy: this.ctx.cfg.service.did,\n createdAt: now,\n updatedAt: now,\n }\n await this.ctx.settingService(this.ctx.db).upsert({\n ...defaultOptions,\n key: 'tools.ozone.setting.severityLevels',\n value: {\n 'sev-2': {\n strikeCount: 2,\n expiryInDays: 90,\n },\n 'sev-4': {\n strikeCount: 4,\n expiryInDays: 365,\n },\n 'sev-7': {\n needsTakedown: true,\n description: 'Sever violation, immedate account takedown',\n },\n 'custom-sev': {\n strikeCount: 4,\n firstOccurrenceStrikeCount: 8,\n description: 'First offense harsher penalty, on subsequent less',\n },\n },\n description: 'Severity levels and strike count mapping for policies',\n })\n await this.ctx.settingService(this.ctx.db).upsert({\n ...defaultOptions,\n key: 'tools.ozone.setting.policyList',\n value: {\n 'policy-one': {\n name: 'Policy One',\n description: 'Policy for handling user behavior',\n severityLevels: {\n 'sev-1': {\n description: 'Minor infraction',\n isDefault: true,\n },\n 'sev-2': {\n description: 'Moderate infraction',\n isDefault: false,\n },\n },\n },\n 'policy-two': {\n name: 'Policy Two',\n description: 'Policy for handling user action',\n severityLevels: {\n 'sev-4': {\n description: 'Moderate infraction',\n isDefault: false,\n },\n 'sev-5': {\n description: 'Severe infraction',\n isDefault: false,\n },\n },\n },\n },\n description: 'Moderation policies to be associated with actions',\n })\n }\n\n async modHeaders(\n lxm: string,\n role: 'admin' | 'moderator' | 'triage' = 'moderator',\n ) {\n const account =\n role === 'admin'\n ? this.adminAccnt\n : role === 'moderator'\n ? this.moderatorAccnt\n : this.triageAccnt\n const jwt = await createServiceJwt({\n iss: account.did,\n aud: this.ctx.cfg.service.did,\n lxm,\n keypair: account.key,\n })\n return { authorization: `Bearer ${jwt}` }\n }\n\n async processAll() {\n await this.ctx.backgroundQueue.processAll()\n await this.daemon.processAll()\n }\n\n async close() {\n await this.daemon.destroy()\n await this.server.destroy()\n }\n}\n\nexport const createOzoneDid = async (\n plcUrl: string,\n keypair: Keypair,\n): Promise<string> => {\n const plcClient = new plc.Client(plcUrl)\n const plcOp = await plc.signOperation(\n {\n type: 'plc_operation',\n alsoKnownAs: [],\n rotationKeys: [keypair.did()],\n verificationMethods: {\n atproto_label: keypair.did(),\n },\n services: {\n atproto_labeler: {\n type: 'AtprotoLabeler',\n endpoint: 'https://ozone.public.url',\n },\n },\n prev: null,\n },\n keypair,\n )\n const did = await plc.didForCreateOp(plcOp)\n await plcClient.sendOperation(did, plcOp)\n return did\n}\n"]}
|
package/dist/pds.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AtpAgent } from '@atproto/api';
|
|
2
|
+
import { Client } from '@atproto/lex';
|
|
2
3
|
import * as pds from '@atproto/pds';
|
|
3
4
|
import { PdsConfig } from './types';
|
|
4
5
|
export declare class TestPds {
|
|
@@ -8,7 +9,8 @@ export declare class TestPds {
|
|
|
8
9
|
constructor(url: string, port: number, server: pds.PDS);
|
|
9
10
|
static create(config: PdsConfig): Promise<TestPds>;
|
|
10
11
|
get ctx(): pds.AppContext;
|
|
11
|
-
|
|
12
|
+
getAgent(): AtpAgent;
|
|
13
|
+
getClient(): Client;
|
|
12
14
|
adminAuth(): string;
|
|
13
15
|
adminAuthHeaders(): {
|
|
14
16
|
authorization: string;
|
package/dist/pds.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pds.d.ts","sourceRoot":"","sources":["../src/pds.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,qBAAa,OAAO;IAET,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,GAAG,CAAC,GAAG;gBAFf,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,GAAG,CAAC,GAAG;WAGX,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAwDxD,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAExB;IAED,
|
|
1
|
+
{"version":3,"file":"pds.d.ts","sourceRoot":"","sources":["../src/pds.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,qBAAa,OAAO;IAET,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,GAAG,CAAC,GAAG;gBAFf,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,GAAG,CAAC,GAAG;WAGX,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAwDxD,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAExB;IAED,QAAQ,IAAI,QAAQ;IAMpB,SAAS,IAAI,MAAM;IAMnB,SAAS,IAAI,MAAM;IAUnB,gBAAgB;;;IAMhB,YAAY;IAIN,UAAU;IAIV,KAAK;CAGZ"}
|
package/dist/pds.js
CHANGED
|
@@ -44,6 +44,7 @@ const get_port_1 = __importDefault(require("get-port"));
|
|
|
44
44
|
const ui8 = __importStar(require("uint8arrays"));
|
|
45
45
|
const api_1 = require("@atproto/api");
|
|
46
46
|
const crypto_1 = require("@atproto/crypto");
|
|
47
|
+
const lex_1 = require("@atproto/lex");
|
|
47
48
|
const pds = __importStar(require("@atproto/pds"));
|
|
48
49
|
const pds_1 = require("@atproto/pds");
|
|
49
50
|
const const_1 = require("./const");
|
|
@@ -120,11 +121,16 @@ class TestPds {
|
|
|
120
121
|
get ctx() {
|
|
121
122
|
return this.server.ctx;
|
|
122
123
|
}
|
|
123
|
-
|
|
124
|
+
getAgent() {
|
|
124
125
|
const agent = new api_1.AtpAgent({ service: this.url });
|
|
125
126
|
agent.configureLabelers([const_1.EXAMPLE_LABELER]);
|
|
126
127
|
return agent;
|
|
127
128
|
}
|
|
129
|
+
getClient() {
|
|
130
|
+
const client = new lex_1.Client({ service: this.url });
|
|
131
|
+
client.setLabelers([const_1.EXAMPLE_LABELER]);
|
|
132
|
+
return client;
|
|
133
|
+
}
|
|
128
134
|
adminAuth() {
|
|
129
135
|
return ('Basic ' +
|
|
130
136
|
ui8.toString(ui8.fromString(`admin:${const_1.ADMIN_PASSWORD}`, 'utf8'), 'base64pad'));
|
package/dist/pds.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pds.js","sourceRoot":"","sources":["../src/pds.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAiC;AACjC,sDAAwB;AACxB,0DAA4B;AAC5B,wDAA8B;AAC9B,iDAAkC;AAClC,sCAAuC;AACvC,4CAA6D;AAC7D,kDAAmC;AACnC,sCAAoD;AACpD,mCAAqE;AAGrE,MAAa,OAAO;IAClB,YACS,GAAW,EACX,IAAY,EACZ,MAAe;QAFtB;;;;mBAAO,GAAG;WAAQ;QAClB;;;;mBAAO,IAAI;WAAQ;QACnB;;;;mBAAO,MAAM;WAAS;IACrB,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAiB;QACnC,MAAM,cAAc,GAAG,MAAM,yBAAgB,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1E,MAAM,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAA;QAC1E,MAAM,WAAW,GAAG,CAAC,MAAM,yBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA;QAE3D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,IAAA,kBAAO,GAAE,CAAC,CAAA;QAC7C,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAA;QAEtC,MAAM,YAAY,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;QACnE,MAAM,aAAa,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;QACpE,MAAM,kBAAE,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAElD,MAAM,GAAG,GAA0B;YACjC,OAAO,EAAE,IAAI;YACb,IAAI;YACJ,aAAa,EAAE,aAAa;YAC5B,qBAAqB,EAAE,YAAY;YACnC,cAAc,EAAE,WAAW;YAC3B,aAAa,EAAE,sBAAc;YAC7B,SAAS,EAAE,kBAAU;YACrB,sEAAsE;YACtE,qCAAqC;YACrC,oBAAoB,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;YAC3C,cAAc,EAAE,yBAAyB;YACzC,cAAc,EAAE,qBAAqB;YACrC,wBAAwB,EAAE,iCAAiC;YAC3D,aAAa,EAAE,2BAA2B;YAC1C,aAAa,EAAE,qBAAqB;YACpC,+BAA+B,EAAE,eAAe;YAChD,cAAc,EAAE,KAAK;YACrB,qBAAqB,EAAE,IAAI;YAC3B,WAAW,EAAE,iBAAiB;YAC9B,YAAY,EAAE,SAAS;YACvB,oBAAoB,EAAE,MAAM,EAAE,kCAAkC;YAChE,UAAU,EAAE,iBAAiB,EAAE,iCAAiC;YAChE,OAAO;YACL,8EAA8E;YAC9E,uCAAuC;YACvC,uCAAuC;YACvC,6BAA6B,MAAM,CAAC,IAAI,CAAC,qxDAAqxD,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC91D,OAAO,EAAE,sBAAsB;YAC/B,iBAAiB,EAAE,uCAAuC;YAC1D,gBAAgB,EAAE,kDAAkD;YACpE,UAAU,EAAE,yCAAyC;YACrD,GAAG,MAAM;SACV,CAAA;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAErC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAEjD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QAEpB,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAA;IACxB,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"pds.js","sourceRoot":"","sources":["../src/pds.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport getPort from 'get-port'\nimport * as ui8 from 'uint8arrays'\nimport { AtpAgent } from '@atproto/api'\nimport { Secp256k1Keypair, randomStr } from '@atproto/crypto'\nimport { Client } from '@atproto/lex'\nimport * as pds from '@atproto/pds'\nimport { createSecretKeyObject } from '@atproto/pds'\nimport { ADMIN_PASSWORD, EXAMPLE_LABELER, JWT_SECRET } from './const'\nimport { PdsConfig } from './types'\n\nexport class TestPds {\n constructor(\n public url: string,\n public port: number,\n public server: pds.PDS,\n ) {}\n\n static async create(config: PdsConfig): Promise<TestPds> {\n const plcRotationKey = await Secp256k1Keypair.create({ exportable: true })\n const plcRotationPriv = ui8.toString(await plcRotationKey.export(), 'hex')\n const recoveryKey = (await Secp256k1Keypair.create()).did()\n\n const port = config.port || (await getPort())\n const url = `http://localhost:${port}`\n\n const blobstoreLoc = path.join(os.tmpdir(), randomStr(8, 'base32'))\n const dataDirectory = path.join(os.tmpdir(), randomStr(8, 'base32'))\n await fs.mkdir(dataDirectory, { recursive: true })\n\n const env: pds.ServerEnvironment = {\n devMode: true,\n port,\n dataDirectory: dataDirectory,\n blobstoreDiskLocation: blobstoreLoc,\n recoveryDidKey: recoveryKey,\n adminPassword: ADMIN_PASSWORD,\n jwtSecret: JWT_SECRET,\n // @NOTE \".example\" will not actually work and is only used to display\n // multiple domains in the sing-up UI\n serviceHandleDomains: ['.test', '.example'],\n bskyAppViewUrl: 'https://appview.invalid',\n bskyAppViewDid: 'did:example:invalid',\n bskyAppViewCdnUrlPattern: 'http://cdn.appview.com/%s/%s/%s',\n modServiceUrl: 'https://moderator.invalid',\n modServiceDid: 'did:example:invalid',\n plcRotationKeyK256PrivateKeyHex: plcRotationPriv,\n inviteRequired: false,\n disableSsrfProtection: true,\n serviceName: 'Development PDS',\n primaryColor: '#f0828d',\n primaryColorContrast: '#fff', // Bad contrast for a11y (WCAG AA)\n errorColor: 'rgb(238, 0, 78)', // rgb() notation should work too\n logoUrl:\n // Using a \"data:\" instead of a real URL to avoid making CORS requests in dev.\n // License: https://uxwing.com/license/\n // Source: https://uxwing.com/bee-icon/\n `data:image/svg+xml;base64,${Buffer.from('<svg xmlns=\"http://www.w3.org/2000/svg\" shape-rendering=\"geometricPrecision\" text-rendering=\"geometricPrecision\" image-rendering=\"optimizeQuality\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" viewBox=\"0 0 503 511.623\"><path fill=\"#FFB9B9\" d=\"M379.75 85.311l90.022 89.879C503.264 128.804 502.534 31.13 476.188 0c-27.441 31.966-59.103 60.767-96.438 85.311z\"/><path fill=\"#E2828D\" d=\"M399.445 104.976l70.327 70.214c26.443-36.622 31.549-105.205 19.563-147.778-26.692 28.309-56.413 54.344-89.89 77.564z\"/><path fill=\"#FFB9B9\" d=\"M119.595 85.311L29.573 175.19C-3.919 128.804-3.189 31.13 23.156 0c27.441 31.966 59.103 60.767 96.439 85.311z\"/><path fill=\"#E2828D\" d=\"M99.899 104.976L29.573 175.19C3.13 138.568-1.976 69.985 10.01 27.412c26.692 28.309 56.413 54.344 89.889 77.564z\"/><path fill=\"#FFB9B9\" d=\"M251.5 51.303c138.898 0 251.5 103.046 251.5 230.16 0 127.114-112.602 230.16-251.5 230.16C112.6 511.623 0 408.577 0 281.463c0-127.114 112.6-230.16 251.5-230.16z\"/><path fill=\"#331400\" d=\"M138.142 188.245c16.387 0 29.672 13.283 29.672 29.672 0 16.389-13.285 29.673-29.672 29.673-16.389 0-29.675-13.284-29.675-29.673 0-16.389 13.286-29.672 29.675-29.672zM360.695 188.245c16.389 0 29.674 13.283 29.674 29.672 0 16.389-13.285 29.673-29.674 29.673-16.387 0-29.673-13.284-29.673-29.673 0-16.389 13.286-29.672 29.673-29.672z\"/><path fill=\"#F0828D\" fill-rule=\"nonzero\" d=\"M251.5 255.548c37.407 0 71.438 11.136 96.213 29.138 25.886 18.808 41.905 45.125 41.905 74.487 0 29.36-16.017 55.679-41.908 74.49-24.772 18.001-58.805 29.138-96.21 29.138-37.405 0-71.438-11.137-96.21-29.138-25.891-18.811-41.908-45.13-41.908-74.49 0-29.362 16.019-55.679 41.905-74.487 24.775-18.002 58.808-29.138 96.213-29.138z\"/><circle fill=\"#A5414B\" cx=\"203.259\" cy=\"358.515\" r=\"29.673\"/><circle fill=\"#A5414B\" cx=\"298.744\" cy=\"358.515\" r=\"29.673\"/></svg>', 'utf8').toString('base64')}`,\n homeUrl: 'https://bsky.social/',\n termsOfServiceUrl: 'https://bsky.social/about/support/tos',\n privacyPolicyUrl: 'https://bsky.social/about/support/privacy-policy',\n supportUrl: 'https://blueskyweb.zendesk.com/hc/en-us',\n ...config,\n }\n const cfg = pds.envToCfg(env)\n const secrets = pds.envToSecrets(env)\n\n const server = await pds.PDS.create(cfg, secrets)\n\n await server.start()\n\n return new TestPds(url, port, server)\n }\n\n get ctx(): pds.AppContext {\n return this.server.ctx\n }\n\n getAgent(): AtpAgent {\n const agent = new AtpAgent({ service: this.url })\n agent.configureLabelers([EXAMPLE_LABELER])\n return agent\n }\n\n getClient(): Client {\n const client = new Client({ service: this.url })\n client.setLabelers([EXAMPLE_LABELER])\n return client\n }\n\n adminAuth(): string {\n return (\n 'Basic ' +\n ui8.toString(\n ui8.fromString(`admin:${ADMIN_PASSWORD}`, 'utf8'),\n 'base64pad',\n )\n )\n }\n\n adminAuthHeaders() {\n return {\n authorization: this.adminAuth(),\n }\n }\n\n jwtSecretKey() {\n return createSecretKeyObject(JWT_SECRET)\n }\n\n async processAll() {\n await this.ctx.backgroundQueue.processAll()\n }\n\n async close() {\n await this.server.destroy()\n }\n}\n"]}
|
package/dist/seed/client.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { CID } from 'multiformats/cid';
|
|
2
2
|
import { AppBskyActorProfile, AppBskyFeedLike, AppBskyFeedPost, AppBskyFeedRepost, AppBskyGraphBlock, AppBskyGraphFollow, AppBskyGraphList, AppBskyGraphVerification, AppBskyRichtextFacet, AtpAgent, ComAtprotoModerationCreateReport } from '@atproto/api';
|
|
3
|
+
import { CidString, Client } from '@atproto/lex';
|
|
3
4
|
import { BlobRef } from '@atproto/lexicon';
|
|
4
|
-
import { AtUri } from '@atproto/syntax';
|
|
5
|
+
import { AtUri, AtUriString, DidString } from '@atproto/syntax';
|
|
5
6
|
import { TestNetworkNoAppView } from '../network-no-appview';
|
|
6
7
|
export type ImageRef = {
|
|
7
8
|
image: BlobRef;
|
|
@@ -12,17 +13,18 @@ export declare class RecordRef {
|
|
|
12
13
|
cid: CID;
|
|
13
14
|
constructor(uri: AtUri | string, cid: CID | string);
|
|
14
15
|
get raw(): {
|
|
15
|
-
uri:
|
|
16
|
-
cid:
|
|
16
|
+
uri: AtUriString;
|
|
17
|
+
cid: CidString;
|
|
17
18
|
};
|
|
18
|
-
get uriStr():
|
|
19
|
-
get cidStr():
|
|
19
|
+
get uriStr(): AtUriString;
|
|
20
|
+
get cidStr(): CidString;
|
|
20
21
|
}
|
|
21
22
|
export declare class SeedClient<Network extends TestNetworkNoAppView = TestNetworkNoAppView> {
|
|
22
23
|
network: Network;
|
|
23
24
|
agent: AtpAgent;
|
|
25
|
+
client: Client;
|
|
24
26
|
accounts: Record<string, {
|
|
25
|
-
did:
|
|
27
|
+
did: DidString;
|
|
26
28
|
accessJwt: string;
|
|
27
29
|
refreshJwt: string;
|
|
28
30
|
handle: string;
|
|
@@ -70,15 +72,15 @@ export declare class SeedClient<Network extends TestNetworkNoAppView = TestNetwo
|
|
|
70
72
|
feeds: string[];
|
|
71
73
|
}>>;
|
|
72
74
|
verifications: Record<string, Record<string, AtUri>>;
|
|
73
|
-
dids: Record<string,
|
|
74
|
-
constructor(network: Network, agent: AtpAgent);
|
|
75
|
+
dids: Record<string, DidString>;
|
|
76
|
+
constructor(network: Network, agent: AtpAgent, client: Client);
|
|
75
77
|
createAccount(shortName: string, params: {
|
|
76
78
|
handle: string;
|
|
77
79
|
email: string;
|
|
78
80
|
password: string;
|
|
79
81
|
inviteCode?: string;
|
|
80
82
|
}): Promise<{
|
|
81
|
-
did:
|
|
83
|
+
did: DidString;
|
|
82
84
|
accessJwt: string;
|
|
83
85
|
refreshJwt: string;
|
|
84
86
|
handle: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/seed/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,QAAQ,EACR,gCAAgC,EACjC,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/seed/client.ts"],"names":[],"mappings":"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"}
|
package/dist/seed/client.js
CHANGED
|
@@ -46,7 +46,7 @@ class RecordRef {
|
|
|
46
46
|
}
|
|
47
47
|
exports.RecordRef = RecordRef;
|
|
48
48
|
class SeedClient {
|
|
49
|
-
constructor(network, agent) {
|
|
49
|
+
constructor(network, agent, client) {
|
|
50
50
|
Object.defineProperty(this, "network", {
|
|
51
51
|
enumerable: true,
|
|
52
52
|
configurable: true,
|
|
@@ -59,6 +59,12 @@ class SeedClient {
|
|
|
59
59
|
writable: true,
|
|
60
60
|
value: agent
|
|
61
61
|
});
|
|
62
|
+
Object.defineProperty(this, "client", {
|
|
63
|
+
enumerable: true,
|
|
64
|
+
configurable: true,
|
|
65
|
+
writable: true,
|
|
66
|
+
value: client
|
|
67
|
+
});
|
|
62
68
|
Object.defineProperty(this, "accounts", {
|
|
63
69
|
enumerable: true,
|
|
64
70
|
configurable: true,
|
|
@@ -160,9 +166,11 @@ class SeedClient {
|
|
|
160
166
|
}
|
|
161
167
|
async createAccount(shortName, params) {
|
|
162
168
|
const { data: account } = await this.agent.com.atproto.server.createAccount(params);
|
|
163
|
-
|
|
169
|
+
const did = account.did;
|
|
170
|
+
this.dids[shortName] = did;
|
|
164
171
|
this.accounts[account.did] = {
|
|
165
172
|
...account,
|
|
173
|
+
did,
|
|
166
174
|
email: params.email,
|
|
167
175
|
password: params.password,
|
|
168
176
|
};
|
package/dist/seed/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/seed/client.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { CID } from 'multiformats/cid'\nimport {\n AppBskyActorProfile,\n AppBskyFeedLike,\n AppBskyFeedPost,\n AppBskyFeedRepost,\n AppBskyGraphBlock,\n AppBskyGraphFollow,\n AppBskyGraphList,\n AppBskyGraphVerification,\n AppBskyRichtextFacet,\n AtpAgent,\n ComAtprotoModerationCreateReport,\n} from '@atproto/api'\nimport { BlobRef } from '@atproto/lexicon'\nimport { AtUri } from '@atproto/syntax'\nimport { TestNetworkNoAppView } from '../network-no-appview'\n\n// Makes it simple to create data via the XRPC client,\n// and keeps track of all created data in memory for convenience.\n\nlet AVATAR_IMG: Uint8Array | undefined\n\n// AVATAR_PATH is defined in a non-CWD-dependant way, so this works\n// for any consumer of this package, even outside the atproto repo.\nconst AVATAR_PATH = path.resolve(\n __dirname,\n '../../assets/key-portrait-small.jpg',\n)\n\nexport type ImageRef = {\n image: BlobRef\n alt: string\n}\n\nexport class RecordRef {\n uri: AtUri\n cid: CID\n\n constructor(uri: AtUri | string, cid: CID | string) {\n this.uri = new AtUri(uri.toString())\n this.cid = CID.parse(cid.toString())\n }\n\n get raw(): { uri: string; cid: string } {\n return {\n uri: this.uri.toString(),\n cid: this.cid.toString(),\n }\n }\n\n get uriStr(): string {\n return this.uri.toString()\n }\n\n get cidStr(): string {\n return this.cid.toString()\n }\n}\n\nexport class SeedClient<\n Network extends TestNetworkNoAppView = TestNetworkNoAppView,\n> {\n accounts: Record<\n string,\n {\n did: string\n accessJwt: string\n refreshJwt: string\n handle: string\n email: string\n password: string\n }\n >\n profiles: Record<\n string,\n {\n displayName: string\n description: string\n avatar: { cid: string; mimeType: string }\n joinedViaStarterPack: RecordRef | undefined\n ref: RecordRef\n }\n >\n follows: Record<string, Record<string, RecordRef>>\n blocks: Record<string, Record<string, RecordRef>>\n mutes: Record<string, Set<string>>\n posts: Record<\n string,\n { text: string; ref: RecordRef; images: ImageRef[]; quote?: RecordRef }[]\n >\n likes: Record<string, Record<string, AtUri>>\n replies: Record<\n string,\n { text: string; ref: RecordRef; images: ImageRef[] }[]\n >\n reposts: Record<string, RecordRef[]>\n lists: Record<\n string,\n Record<string, { ref: RecordRef; items: Record<string, RecordRef> }>\n >\n feedgens: Record<\n string,\n Record<string, { ref: RecordRef; items: Record<string, RecordRef> }>\n >\n starterpacks: Record<\n string,\n Record<\n string,\n {\n ref: RecordRef\n name: string\n list: RecordRef\n feeds: string[]\n }\n >\n >\n\n verifications: Record<string, Record<string, AtUri>>\n\n dids: Record<string, string>\n\n constructor(\n public network: Network,\n public agent: AtpAgent,\n ) {\n this.accounts = {}\n this.profiles = {}\n this.follows = {}\n this.blocks = {}\n this.mutes = {}\n this.posts = {}\n this.likes = {}\n this.replies = {}\n this.reposts = {}\n this.lists = {}\n this.feedgens = {}\n this.starterpacks = {}\n this.verifications = {}\n this.dids = {}\n }\n\n async createAccount(\n shortName: string,\n params: {\n handle: string\n email: string\n password: string\n inviteCode?: string\n },\n ) {\n const { data: account } =\n await this.agent.com.atproto.server.createAccount(params)\n this.dids[shortName] = account.did\n this.accounts[account.did] = {\n ...account,\n email: params.email,\n password: params.password,\n }\n return this.accounts[account.did]\n }\n\n async updateHandle(by: string, handle: string) {\n await this.agent.com.atproto.identity.updateHandle(\n { handle },\n { encoding: 'application/json', headers: this.getHeaders(by) },\n )\n }\n\n async createProfile(\n by: string,\n displayName: string,\n description: string,\n selfLabels?: string[],\n joinedViaStarterPack?: RecordRef,\n overrides?: Partial<AppBskyActorProfile.Record>,\n ): Promise<{\n displayName: string\n description: string\n avatar: { cid: string; mimeType: string }\n ref: RecordRef\n joinedViaStarterPack?: RecordRef\n }> {\n AVATAR_IMG ??= await fs.readFile(AVATAR_PATH)\n\n let avatarBlob\n {\n const res = await this.agent.com.atproto.repo.uploadBlob(AVATAR_IMG, {\n encoding: 'image/jpeg',\n headers: this.getHeaders(by),\n } as any)\n avatarBlob = res.data.blob\n }\n\n {\n const res = await this.agent.app.bsky.actor.profile.create(\n { repo: by },\n {\n displayName,\n description,\n avatar: avatarBlob,\n labels: selfLabels\n ? {\n $type: 'com.atproto.label.defs#selfLabels',\n values: selfLabels.map((val) => ({ val })),\n }\n : undefined,\n joinedViaStarterPack: joinedViaStarterPack?.raw,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.profiles[by] = {\n displayName,\n description,\n avatar: avatarBlob,\n joinedViaStarterPack,\n ref: new RecordRef(res.uri, res.cid),\n }\n }\n return this.profiles[by]\n }\n\n async updateProfile(by: string, record: Record<string, unknown>) {\n const res = await this.agent.com.atproto.repo.putRecord(\n {\n repo: by,\n collection: 'app.bsky.actor.profile',\n rkey: 'self',\n record,\n },\n { headers: this.getHeaders(by), encoding: 'application/json' },\n )\n this.profiles[by] = {\n ...(this.profiles[by] ?? {}),\n ...record,\n ref: new RecordRef(res.data.uri, res.data.cid),\n }\n return this.profiles[by]\n }\n\n async follow(\n from: string,\n to: string,\n overrides?: Partial<AppBskyGraphFollow.Record>,\n ) {\n const res = await this.agent.app.bsky.graph.follow.create(\n { repo: from },\n {\n subject: to,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(from),\n )\n this.follows[from] ??= {}\n this.follows[from][to] = new RecordRef(res.uri, res.cid)\n return this.follows[from][to]\n }\n\n async unfollow(from: string, to: string) {\n const follow = this.follows[from][to]\n if (!follow) {\n throw new Error('follow does not exist')\n }\n await this.agent.app.bsky.graph.follow.delete(\n { repo: from, rkey: follow.uri.rkey },\n this.getHeaders(from),\n )\n delete this.follows[from][to]\n }\n\n async block(\n from: string,\n to: string,\n overrides?: Partial<AppBskyGraphBlock.Record>,\n ) {\n const res = await this.agent.app.bsky.graph.block.create(\n { repo: from },\n {\n subject: to,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(from),\n )\n this.blocks[from] ??= {}\n this.blocks[from][to] = new RecordRef(res.uri, res.cid)\n return this.blocks[from][to]\n }\n\n async unblock(from: string, to: string) {\n const block = this.blocks[from][to]\n if (!block) {\n throw new Error('block does not exist')\n }\n await this.agent.app.bsky.graph.block.delete(\n { repo: from, rkey: block.uri.rkey },\n this.getHeaders(from),\n )\n delete this.blocks[from][to]\n }\n\n async mute(from: string, to: string) {\n await this.agent.app.bsky.graph.muteActor(\n {\n actor: to,\n },\n { headers: this.getHeaders(from) },\n )\n this.mutes[from] ??= new Set()\n this.mutes[from].add(to)\n return this.mutes[from][to]\n }\n\n async post(\n by: string,\n text: string,\n facets?: AppBskyRichtextFacet.Main[],\n images?: ImageRef[],\n quote?: RecordRef,\n overrides?: Partial<AppBskyFeedPost.Record>,\n ) {\n const imageEmbed = images && {\n $type: 'app.bsky.embed.images',\n images,\n }\n const recordEmbed = quote && {\n record: { uri: quote.uriStr, cid: quote.cidStr },\n }\n const embed =\n imageEmbed && recordEmbed\n ? {\n $type: 'app.bsky.embed.recordWithMedia',\n record: recordEmbed,\n media: imageEmbed,\n }\n : recordEmbed\n ? { $type: 'app.bsky.embed.record', ...recordEmbed }\n : imageEmbed\n const res = await this.agent.app.bsky.feed.post.create(\n { repo: by },\n {\n text: text,\n facets,\n embed,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.posts[by] ??= []\n const post = {\n text,\n ref: new RecordRef(res.uri, res.cid),\n images: images ?? [],\n quote,\n }\n this.posts[by].push(post)\n return post\n }\n\n async deletePost(by: string, uri: AtUri) {\n await this.agent.app.bsky.feed.post.delete(\n {\n repo: by,\n rkey: uri.rkey,\n },\n this.getHeaders(by),\n )\n }\n\n async uploadFile(\n by: string,\n filePath: string,\n encoding: string,\n ): Promise<ImageRef> {\n const file = await fs.readFile(filePath)\n const res = await this.agent.com.atproto.repo.uploadBlob(file, {\n headers: this.getHeaders(by),\n encoding,\n } as any)\n return { image: res.data.blob, alt: filePath }\n }\n\n async like(\n by: string,\n subject: RecordRef,\n overrides?: Partial<AppBskyFeedLike.Record>,\n ) {\n const res = await this.agent.app.bsky.feed.like.create(\n { repo: by },\n {\n subject: subject.raw,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.likes[by] ??= {}\n this.likes[by][subject.uriStr] = new AtUri(res.uri)\n return this.likes[by][subject.uriStr]\n }\n\n async reply(\n by: string,\n root: RecordRef,\n parent: RecordRef,\n text: string,\n facets?: AppBskyRichtextFacet.Main[],\n images?: ImageRef[],\n overrides?: Partial<AppBskyFeedPost.Record>,\n ) {\n const embed = images\n ? {\n $type: 'app.bsky.embed.images',\n images,\n }\n : undefined\n const res = await this.agent.app.bsky.feed.post.create(\n { repo: by },\n {\n text: text,\n reply: {\n root: root.raw,\n parent: parent.raw,\n },\n facets,\n embed,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.replies[by] ??= []\n const reply = {\n text,\n ref: new RecordRef(res.uri, res.cid),\n images: images ?? [],\n }\n this.replies[by].push(reply)\n return reply\n }\n\n async repost(\n by: string,\n subject: RecordRef,\n overrides?: Partial<AppBskyFeedRepost.Record>,\n ) {\n const res = await this.agent.app.bsky.feed.repost.create(\n { repo: by },\n {\n subject: subject.raw,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.reposts[by] ??= []\n const repost = new RecordRef(res.uri, res.cid)\n this.reposts[by].push(repost)\n return repost\n }\n\n async createList(\n by: string,\n name: string,\n purpose: 'mod' | 'curate' | 'reference',\n overrides?: Partial<AppBskyGraphList.Record>,\n ) {\n const res = await this.agent.app.bsky.graph.list.create(\n { repo: by },\n {\n name,\n purpose:\n purpose === 'mod'\n ? 'app.bsky.graph.defs#modlist'\n : purpose === 'curate'\n ? 'app.bsky.graph.defs#curatelist'\n : 'app.bsky.graph.defs#referencelist',\n createdAt: new Date().toISOString(),\n ...(overrides || {}),\n },\n this.getHeaders(by),\n )\n this.lists[by] ??= {}\n const ref = new RecordRef(res.uri, res.cid)\n this.lists[by][ref.uriStr] = {\n ref: ref,\n items: {},\n }\n return ref\n }\n\n async createFeedGen(by: string, feedDid: string, name: string) {\n const res = await this.agent.app.bsky.feed.generator.create(\n { repo: by },\n {\n did: feedDid,\n displayName: name,\n createdAt: new Date().toISOString(),\n },\n this.getHeaders(by),\n )\n this.feedgens[by] ??= {}\n const ref = new RecordRef(res.uri, res.cid)\n this.feedgens[by][ref.uriStr] = {\n ref: ref,\n items: {},\n }\n return ref\n }\n\n async createStarterPack(\n by: string,\n name: string,\n actors: string[],\n feeds?: string[],\n ) {\n const list = await this.createList(by, 'n/a', 'reference')\n for (const did of actors) {\n await this.addToList(by, did, list)\n }\n const res = await this.agent.app.bsky.graph.starterpack.create(\n { repo: by },\n {\n name,\n list: list.uriStr,\n feeds: feeds?.map((uri) => ({ uri })),\n createdAt: new Date().toISOString(),\n },\n this.getHeaders(by),\n )\n this.starterpacks[by] ??= {}\n const ref = new RecordRef(res.uri, res.cid)\n this.starterpacks[by][ref.uriStr] = {\n ref: ref,\n list,\n feeds: feeds ?? [],\n name,\n }\n return ref\n }\n\n async addToList(by: string, subject: string, list: RecordRef) {\n const res = await this.agent.app.bsky.graph.listitem.create(\n { repo: by },\n { subject, list: list.uriStr, createdAt: new Date().toISOString() },\n this.getHeaders(by),\n )\n const ref = new RecordRef(res.uri, res.cid)\n const found = (this.lists[by] ?? {})[list.uriStr]\n if (found) {\n found.items[subject] = ref\n }\n return ref\n }\n\n async rmFromList(by: string, subject: string, list: RecordRef) {\n const foundList = (this.lists[by] ?? {})[list.uriStr] ?? {}\n if (!foundList) return\n const foundItem = foundList.items[subject]\n if (!foundItem) return\n await this.agent.app.bsky.graph.listitem.delete(\n { repo: by, rkey: foundItem.uri.rkey },\n this.getHeaders(by),\n )\n delete foundList.items[subject]\n }\n\n async createReport(opts: {\n reasonType: ComAtprotoModerationCreateReport.InputSchema['reasonType']\n subject: ComAtprotoModerationCreateReport.InputSchema['subject']\n reason?: string\n reportedBy: string\n }) {\n const { reasonType, subject, reason, reportedBy } = opts\n const result = await this.agent.com.atproto.moderation.createReport(\n { reasonType, subject, reason },\n {\n encoding: 'application/json',\n headers: this.getHeaders(reportedBy),\n },\n )\n return result.data\n }\n\n async verify(\n by: string,\n subject: string,\n handle: string,\n displayName: string,\n overrides?: Partial<AppBskyGraphVerification.Record>,\n ) {\n const res = await this.agent.app.bsky.graph.verification.create(\n { repo: by },\n {\n subject,\n createdAt: new Date().toISOString(),\n handle,\n displayName,\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.verifications[by] ??= {}\n this.verifications[by][subject] = new AtUri(res.uri)\n return this.verifications[by][subject]\n }\n\n async unverify(by: string, subject: string) {\n const verification = this.verifications[by]?.[subject]\n if (!verification) {\n throw new Error('verification does not exist')\n }\n\n await this.agent.app.bsky.graph.verification.delete(\n { repo: by, rkey: verification.rkey },\n this.getHeaders(by),\n )\n delete this.verifications[by][subject]\n }\n\n getHeaders(did: string) {\n return SeedClient.getHeaders(this.accounts[did].accessJwt)\n }\n\n static getHeaders(jwt: string) {\n return { authorization: `Bearer ${jwt}` }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/seed/client.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { CID } from 'multiformats/cid'\nimport {\n AppBskyActorProfile,\n AppBskyFeedLike,\n AppBskyFeedPost,\n AppBskyFeedRepost,\n AppBskyGraphBlock,\n AppBskyGraphFollow,\n AppBskyGraphList,\n AppBskyGraphVerification,\n AppBskyRichtextFacet,\n AtpAgent,\n ComAtprotoModerationCreateReport,\n} from '@atproto/api'\nimport { CidString, Client } from '@atproto/lex'\nimport { BlobRef } from '@atproto/lexicon'\nimport { AtUri, AtUriString, DidString } from '@atproto/syntax'\nimport { TestNetworkNoAppView } from '../network-no-appview'\n\n// Makes it simple to create data via the XRPC client,\n// and keeps track of all created data in memory for convenience.\n\nlet AVATAR_IMG: Uint8Array | undefined\n\n// AVATAR_PATH is defined in a non-CWD-dependant way, so this works\n// for any consumer of this package, even outside the atproto repo.\nconst AVATAR_PATH = path.resolve(\n __dirname,\n '../../assets/key-portrait-small.jpg',\n)\n\nexport type ImageRef = {\n image: BlobRef\n alt: string\n}\n\nexport class RecordRef {\n uri: AtUri\n cid: CID\n\n constructor(uri: AtUri | string, cid: CID | string) {\n this.uri = new AtUri(uri.toString())\n this.cid = CID.parse(cid.toString())\n }\n\n get raw(): { uri: AtUriString; cid: CidString } {\n return {\n uri: this.uri.toString(),\n cid: this.cid.toString(),\n }\n }\n\n get uriStr(): AtUriString {\n return this.uri.toString()\n }\n\n get cidStr(): CidString {\n return this.cid.toString()\n }\n}\n\nexport class SeedClient<\n Network extends TestNetworkNoAppView = TestNetworkNoAppView,\n> {\n accounts: Record<\n string,\n {\n did: DidString\n accessJwt: string\n refreshJwt: string\n handle: string\n email: string\n password: string\n }\n >\n profiles: Record<\n string,\n {\n displayName: string\n description: string\n avatar: { cid: string; mimeType: string }\n joinedViaStarterPack: RecordRef | undefined\n ref: RecordRef\n }\n >\n follows: Record<string, Record<string, RecordRef>>\n blocks: Record<string, Record<string, RecordRef>>\n mutes: Record<string, Set<string>>\n posts: Record<\n string,\n { text: string; ref: RecordRef; images: ImageRef[]; quote?: RecordRef }[]\n >\n likes: Record<string, Record<string, AtUri>>\n replies: Record<\n string,\n { text: string; ref: RecordRef; images: ImageRef[] }[]\n >\n reposts: Record<string, RecordRef[]>\n lists: Record<\n string,\n Record<string, { ref: RecordRef; items: Record<string, RecordRef> }>\n >\n feedgens: Record<\n string,\n Record<string, { ref: RecordRef; items: Record<string, RecordRef> }>\n >\n starterpacks: Record<\n string,\n Record<\n string,\n {\n ref: RecordRef\n name: string\n list: RecordRef\n feeds: string[]\n }\n >\n >\n\n verifications: Record<string, Record<string, AtUri>>\n\n dids: Record<string, DidString>\n\n constructor(\n public network: Network,\n public agent: AtpAgent,\n public client: Client,\n ) {\n this.accounts = {}\n this.profiles = {}\n this.follows = {}\n this.blocks = {}\n this.mutes = {}\n this.posts = {}\n this.likes = {}\n this.replies = {}\n this.reposts = {}\n this.lists = {}\n this.feedgens = {}\n this.starterpacks = {}\n this.verifications = {}\n this.dids = {}\n }\n\n async createAccount(\n shortName: string,\n params: {\n handle: string\n email: string\n password: string\n inviteCode?: string\n },\n ) {\n const { data: account } =\n await this.agent.com.atproto.server.createAccount(params)\n const did = account.did as DidString\n this.dids[shortName] = did\n this.accounts[account.did] = {\n ...account,\n did,\n email: params.email,\n password: params.password,\n }\n return this.accounts[account.did]\n }\n\n async updateHandle(by: string, handle: string) {\n await this.agent.com.atproto.identity.updateHandle(\n { handle },\n { encoding: 'application/json', headers: this.getHeaders(by) },\n )\n }\n\n async createProfile(\n by: string,\n displayName: string,\n description: string,\n selfLabels?: string[],\n joinedViaStarterPack?: RecordRef,\n overrides?: Partial<AppBskyActorProfile.Record>,\n ): Promise<{\n displayName: string\n description: string\n avatar: { cid: string; mimeType: string }\n ref: RecordRef\n joinedViaStarterPack?: RecordRef\n }> {\n AVATAR_IMG ??= await fs.readFile(AVATAR_PATH)\n\n let avatarBlob\n {\n const res = await this.agent.com.atproto.repo.uploadBlob(AVATAR_IMG, {\n encoding: 'image/jpeg',\n headers: this.getHeaders(by),\n } as any)\n avatarBlob = res.data.blob\n }\n\n {\n const res = await this.agent.app.bsky.actor.profile.create(\n { repo: by },\n {\n displayName,\n description,\n avatar: avatarBlob,\n labels: selfLabels\n ? {\n $type: 'com.atproto.label.defs#selfLabels',\n values: selfLabels.map((val) => ({ val })),\n }\n : undefined,\n joinedViaStarterPack: joinedViaStarterPack?.raw,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.profiles[by] = {\n displayName,\n description,\n avatar: avatarBlob,\n joinedViaStarterPack,\n ref: new RecordRef(res.uri, res.cid),\n }\n }\n return this.profiles[by]\n }\n\n async updateProfile(by: string, record: Record<string, unknown>) {\n const res = await this.agent.com.atproto.repo.putRecord(\n {\n repo: by,\n collection: 'app.bsky.actor.profile',\n rkey: 'self',\n record,\n },\n { headers: this.getHeaders(by), encoding: 'application/json' },\n )\n this.profiles[by] = {\n ...(this.profiles[by] ?? {}),\n ...record,\n ref: new RecordRef(res.data.uri, res.data.cid),\n }\n return this.profiles[by]\n }\n\n async follow(\n from: string,\n to: string,\n overrides?: Partial<AppBskyGraphFollow.Record>,\n ) {\n const res = await this.agent.app.bsky.graph.follow.create(\n { repo: from },\n {\n subject: to,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(from),\n )\n this.follows[from] ??= {}\n this.follows[from][to] = new RecordRef(res.uri, res.cid)\n return this.follows[from][to]\n }\n\n async unfollow(from: string, to: string) {\n const follow = this.follows[from][to]\n if (!follow) {\n throw new Error('follow does not exist')\n }\n await this.agent.app.bsky.graph.follow.delete(\n { repo: from, rkey: follow.uri.rkey },\n this.getHeaders(from),\n )\n delete this.follows[from][to]\n }\n\n async block(\n from: string,\n to: string,\n overrides?: Partial<AppBskyGraphBlock.Record>,\n ) {\n const res = await this.agent.app.bsky.graph.block.create(\n { repo: from },\n {\n subject: to,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(from),\n )\n this.blocks[from] ??= {}\n this.blocks[from][to] = new RecordRef(res.uri, res.cid)\n return this.blocks[from][to]\n }\n\n async unblock(from: string, to: string) {\n const block = this.blocks[from][to]\n if (!block) {\n throw new Error('block does not exist')\n }\n await this.agent.app.bsky.graph.block.delete(\n { repo: from, rkey: block.uri.rkey },\n this.getHeaders(from),\n )\n delete this.blocks[from][to]\n }\n\n async mute(from: string, to: string) {\n await this.agent.app.bsky.graph.muteActor(\n {\n actor: to,\n },\n { headers: this.getHeaders(from) },\n )\n this.mutes[from] ??= new Set()\n this.mutes[from].add(to)\n return this.mutes[from][to]\n }\n\n async post(\n by: string,\n text: string,\n facets?: AppBskyRichtextFacet.Main[],\n images?: ImageRef[],\n quote?: RecordRef,\n overrides?: Partial<AppBskyFeedPost.Record>,\n ) {\n const imageEmbed = images && {\n $type: 'app.bsky.embed.images',\n images,\n }\n const recordEmbed = quote && {\n record: { uri: quote.uriStr, cid: quote.cidStr },\n }\n const embed =\n imageEmbed && recordEmbed\n ? {\n $type: 'app.bsky.embed.recordWithMedia',\n record: recordEmbed,\n media: imageEmbed,\n }\n : recordEmbed\n ? { $type: 'app.bsky.embed.record', ...recordEmbed }\n : imageEmbed\n const res = await this.agent.app.bsky.feed.post.create(\n { repo: by },\n {\n text: text,\n facets,\n embed,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.posts[by] ??= []\n const post = {\n text,\n ref: new RecordRef(res.uri, res.cid),\n images: images ?? [],\n quote,\n }\n this.posts[by].push(post)\n return post\n }\n\n async deletePost(by: string, uri: AtUri) {\n await this.agent.app.bsky.feed.post.delete(\n {\n repo: by,\n rkey: uri.rkey,\n },\n this.getHeaders(by),\n )\n }\n\n async uploadFile(\n by: string,\n filePath: string,\n encoding: string,\n ): Promise<ImageRef> {\n const file = await fs.readFile(filePath)\n const res = await this.agent.com.atproto.repo.uploadBlob(file, {\n headers: this.getHeaders(by),\n encoding,\n } as any)\n return { image: res.data.blob, alt: filePath }\n }\n\n async like(\n by: string,\n subject: RecordRef,\n overrides?: Partial<AppBskyFeedLike.Record>,\n ) {\n const res = await this.agent.app.bsky.feed.like.create(\n { repo: by },\n {\n subject: subject.raw,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.likes[by] ??= {}\n this.likes[by][subject.uriStr] = new AtUri(res.uri)\n return this.likes[by][subject.uriStr]\n }\n\n async reply(\n by: string,\n root: RecordRef,\n parent: RecordRef,\n text: string,\n facets?: AppBskyRichtextFacet.Main[],\n images?: ImageRef[],\n overrides?: Partial<AppBskyFeedPost.Record>,\n ) {\n const embed = images\n ? {\n $type: 'app.bsky.embed.images',\n images,\n }\n : undefined\n const res = await this.agent.app.bsky.feed.post.create(\n { repo: by },\n {\n text: text,\n reply: {\n root: root.raw,\n parent: parent.raw,\n },\n facets,\n embed,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.replies[by] ??= []\n const reply = {\n text,\n ref: new RecordRef(res.uri, res.cid),\n images: images ?? [],\n }\n this.replies[by].push(reply)\n return reply\n }\n\n async repost(\n by: string,\n subject: RecordRef,\n overrides?: Partial<AppBskyFeedRepost.Record>,\n ) {\n const res = await this.agent.app.bsky.feed.repost.create(\n { repo: by },\n {\n subject: subject.raw,\n createdAt: new Date().toISOString(),\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.reposts[by] ??= []\n const repost = new RecordRef(res.uri, res.cid)\n this.reposts[by].push(repost)\n return repost\n }\n\n async createList(\n by: string,\n name: string,\n purpose: 'mod' | 'curate' | 'reference',\n overrides?: Partial<AppBskyGraphList.Record>,\n ) {\n const res = await this.agent.app.bsky.graph.list.create(\n { repo: by },\n {\n name,\n purpose:\n purpose === 'mod'\n ? 'app.bsky.graph.defs#modlist'\n : purpose === 'curate'\n ? 'app.bsky.graph.defs#curatelist'\n : 'app.bsky.graph.defs#referencelist',\n createdAt: new Date().toISOString(),\n ...(overrides || {}),\n },\n this.getHeaders(by),\n )\n this.lists[by] ??= {}\n const ref = new RecordRef(res.uri, res.cid)\n this.lists[by][ref.uriStr] = {\n ref: ref,\n items: {},\n }\n return ref\n }\n\n async createFeedGen(by: string, feedDid: string, name: string) {\n const res = await this.agent.app.bsky.feed.generator.create(\n { repo: by },\n {\n did: feedDid,\n displayName: name,\n createdAt: new Date().toISOString(),\n },\n this.getHeaders(by),\n )\n this.feedgens[by] ??= {}\n const ref = new RecordRef(res.uri, res.cid)\n this.feedgens[by][ref.uriStr] = {\n ref: ref,\n items: {},\n }\n return ref\n }\n\n async createStarterPack(\n by: string,\n name: string,\n actors: string[],\n feeds?: string[],\n ) {\n const list = await this.createList(by, 'n/a', 'reference')\n for (const did of actors) {\n await this.addToList(by, did, list)\n }\n const res = await this.agent.app.bsky.graph.starterpack.create(\n { repo: by },\n {\n name,\n list: list.uriStr,\n feeds: feeds?.map((uri) => ({ uri })),\n createdAt: new Date().toISOString(),\n },\n this.getHeaders(by),\n )\n this.starterpacks[by] ??= {}\n const ref = new RecordRef(res.uri, res.cid)\n this.starterpacks[by][ref.uriStr] = {\n ref: ref,\n list,\n feeds: feeds ?? [],\n name,\n }\n return ref\n }\n\n async addToList(by: string, subject: string, list: RecordRef) {\n const res = await this.agent.app.bsky.graph.listitem.create(\n { repo: by },\n { subject, list: list.uriStr, createdAt: new Date().toISOString() },\n this.getHeaders(by),\n )\n const ref = new RecordRef(res.uri, res.cid)\n const found = (this.lists[by] ?? {})[list.uriStr]\n if (found) {\n found.items[subject] = ref\n }\n return ref\n }\n\n async rmFromList(by: string, subject: string, list: RecordRef) {\n const foundList = (this.lists[by] ?? {})[list.uriStr] ?? {}\n if (!foundList) return\n const foundItem = foundList.items[subject]\n if (!foundItem) return\n await this.agent.app.bsky.graph.listitem.delete(\n { repo: by, rkey: foundItem.uri.rkey },\n this.getHeaders(by),\n )\n delete foundList.items[subject]\n }\n\n async createReport(opts: {\n reasonType: ComAtprotoModerationCreateReport.InputSchema['reasonType']\n subject: ComAtprotoModerationCreateReport.InputSchema['subject']\n reason?: string\n reportedBy: string\n }) {\n const { reasonType, subject, reason, reportedBy } = opts\n const result = await this.agent.com.atproto.moderation.createReport(\n { reasonType, subject, reason },\n {\n encoding: 'application/json',\n headers: this.getHeaders(reportedBy),\n },\n )\n return result.data\n }\n\n async verify(\n by: string,\n subject: string,\n handle: string,\n displayName: string,\n overrides?: Partial<AppBskyGraphVerification.Record>,\n ) {\n const res = await this.agent.app.bsky.graph.verification.create(\n { repo: by },\n {\n subject,\n createdAt: new Date().toISOString(),\n handle,\n displayName,\n ...overrides,\n },\n this.getHeaders(by),\n )\n this.verifications[by] ??= {}\n this.verifications[by][subject] = new AtUri(res.uri)\n return this.verifications[by][subject]\n }\n\n async unverify(by: string, subject: string) {\n const verification = this.verifications[by]?.[subject]\n if (!verification) {\n throw new Error('verification does not exist')\n }\n\n await this.agent.app.bsky.graph.verification.delete(\n { repo: by, rkey: verification.rkey },\n this.getHeaders(by),\n )\n delete this.verifications[by][subject]\n }\n\n getHeaders(did: string) {\n return SeedClient.getHeaders(this.accounts[did].accessJwt)\n }\n\n static getHeaders(jwt: string) {\n return { authorization: `Bearer ${jwt}` }\n }\n}\n"]}
|
|
@@ -73,17 +73,17 @@ class LexiconAuthorityProfile extends service_profile_1.ServiceProfile {
|
|
|
73
73
|
handle: 'lex-authority.test',
|
|
74
74
|
password: 'hunter2',
|
|
75
75
|
}) {
|
|
76
|
-
const
|
|
77
|
-
await
|
|
78
|
-
return new LexiconAuthorityProfile(pds,
|
|
76
|
+
const agent = pds.getAgent();
|
|
77
|
+
await agent.createAccount(userDetails);
|
|
78
|
+
return new LexiconAuthorityProfile(pds, agent, userDetails);
|
|
79
79
|
}
|
|
80
80
|
async createRecords() {
|
|
81
|
-
await this.
|
|
81
|
+
await this.agent.app.bsky.actor.profile.create({ repo: this.did }, {
|
|
82
82
|
displayName: 'Lexicon Authority',
|
|
83
83
|
description: `the repo containing all the lexicons that can be resolved in dev`,
|
|
84
84
|
});
|
|
85
85
|
for (const doc of LEXICONS) {
|
|
86
|
-
await this.
|
|
86
|
+
await this.agent.com.atproto.repo.createRecord({
|
|
87
87
|
repo: this.did,
|
|
88
88
|
collection: 'com.atproto.lexicon.schema',
|
|
89
89
|
rkey: doc.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-profile-lexicon.js","sourceRoot":"","sources":["../src/service-profile-lexicon.ts"],"names":[],"mappings":";;;AAEA,uDAAkD;AAElD,MAAM,QAAQ,GAA0B;IACtC;QACE,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,wCAAwC;QAC5C,IAAI,EAAE;YACJ,IAAI,EAAE;gBACJ,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,YAAY;gBACnB,YAAY,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;gBAClC,MAAM,EAAE,2BAA2B;gBACnC,aAAa,EAAE;oBACb,OAAO,EAAE,kCAAkC;iBAC5C;gBACD,WAAW,EAAE;oBACX;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,KAAK;wBACf,GAAG,EAAE,GAAG;wBACR,GAAG,EAAE,CAAC,qCAAqC,CAAC;qBAC7C;iBACF;aACF;SACF;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,sCAAsC;QAC1C,IAAI,EAAE;YACJ,IAAI,EAAE;gBACJ,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,UAAU;gBACjB,YAAY,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;gBAClC,MAAM,EAAE,8BAA8B;gBACtC,aAAa,EAAE;oBACb,OAAO,EAAE,kCAAkC;iBAC5C;gBACD,WAAW,EAAE;oBACX;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,KAAK;wBACf,UAAU,EAAE,IAAI;wBAChB,GAAG,EAAE;4BACH,iCAAiC;4BACjC,sCAAsC;4BACtC,oCAAoC;yBACrC;qBACF;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE;4BACV,4BAA4B;4BAC5B,2BAA2B;yBAC5B;qBACF;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,MAAM;wBAChB,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;qBAC/B;iBACF;aACF;SACF;KACF;CACF,CAAA;AAED,MAAa,uBAAwB,SAAQ,gCAAc;IAClD,MAAM,CAAC,KAAK,CAAC,MAAM,CACxB,GAAY,EACZ,WAAW,GAAG;QACZ,KAAK,EAAE,wBAAwB;QAC/B,MAAM,EAAE,oBAAoB;QAC5B,QAAQ,EAAE,SAAS;KACpB;QAED,MAAM,
|
|
1
|
+
{"version":3,"file":"service-profile-lexicon.js","sourceRoot":"","sources":["../src/service-profile-lexicon.ts"],"names":[],"mappings":";;;AAEA,uDAAkD;AAElD,MAAM,QAAQ,GAA0B;IACtC;QACE,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,wCAAwC;QAC5C,IAAI,EAAE;YACJ,IAAI,EAAE;gBACJ,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,YAAY;gBACnB,YAAY,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;gBAClC,MAAM,EAAE,2BAA2B;gBACnC,aAAa,EAAE;oBACb,OAAO,EAAE,kCAAkC;iBAC5C;gBACD,WAAW,EAAE;oBACX;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,KAAK;wBACf,GAAG,EAAE,GAAG;wBACR,GAAG,EAAE,CAAC,qCAAqC,CAAC;qBAC7C;iBACF;aACF;SACF;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,sCAAsC;QAC1C,IAAI,EAAE;YACJ,IAAI,EAAE;gBACJ,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,UAAU;gBACjB,YAAY,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;gBAClC,MAAM,EAAE,8BAA8B;gBACtC,aAAa,EAAE;oBACb,OAAO,EAAE,kCAAkC;iBAC5C;gBACD,WAAW,EAAE;oBACX;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,KAAK;wBACf,UAAU,EAAE,IAAI;wBAChB,GAAG,EAAE;4BACH,iCAAiC;4BACjC,sCAAsC;4BACtC,oCAAoC;yBACrC;qBACF;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE;4BACV,4BAA4B;4BAC5B,2BAA2B;yBAC5B;qBACF;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,MAAM;wBAChB,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;qBAC/B;iBACF;aACF;SACF;KACF;CACF,CAAA;AAED,MAAa,uBAAwB,SAAQ,gCAAc;IAClD,MAAM,CAAC,KAAK,CAAC,MAAM,CACxB,GAAY,EACZ,WAAW,GAAG;QACZ,KAAK,EAAE,wBAAwB;QAC/B,MAAM,EAAE,oBAAoB;QAC5B,QAAQ,EAAE,SAAS;KACpB;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;QAC5B,MAAM,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;QAEtC,OAAO,IAAI,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;IAC7D,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAC5C,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAClB;YACE,WAAW,EAAE,mBAAmB;YAChC,WAAW,EAAE,kEAAkE;SAChF,CACF,CAAA;QAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC7C,IAAI,EAAE,IAAI,CAAC,GAAG;gBACd,UAAU,EAAE,4BAA4B;gBACxC,IAAI,EAAE,GAAG,CAAC,EAAE;gBACZ,MAAM,EAAE,GAAG;aACZ,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF;AAjCD,0DAiCC","sourcesContent":["import { LexiconDoc } from '@atproto/lexicon'\nimport { TestPds } from './pds'\nimport { ServiceProfile } from './service-profile'\n\nconst LEXICONS: readonly LexiconDoc[] = [\n {\n lexicon: 1,\n id: 'com.atproto.moderation.basePermissions',\n defs: {\n main: {\n type: 'permission-set',\n title: 'Moderation',\n 'title:lang': { fr: 'Modération' },\n detail: 'Create moderation reports',\n 'detail:lang': {\n 'fr-FR': 'Créer des rapports de modération',\n },\n permissions: [\n {\n type: 'permission',\n resource: 'rpc',\n aud: '*',\n lxm: ['com.atproto.moderation.createReport'],\n },\n ],\n },\n },\n },\n {\n lexicon: 1,\n id: 'com.example.calendar.basePermissions',\n defs: {\n main: {\n type: 'permission-set',\n title: 'Calendar',\n 'title:lang': { fr: 'Calendrier' },\n detail: 'Manage your events and RSVPs',\n 'detail:lang': {\n 'fr-BE': 'Gérer vos événements et réponses',\n },\n permissions: [\n {\n type: 'permission',\n resource: 'rpc',\n inheritAud: true,\n lxm: [\n 'com.example.calendar.listEvents',\n 'com.example.calendar.getEventDetails',\n 'com.example.calendar.getEventRsvps',\n ],\n },\n {\n type: 'permission',\n resource: 'repo',\n collection: [\n 'com.example.calendar.event',\n 'com.example.calendar.rsvp',\n ],\n },\n {\n type: 'permission',\n resource: 'blob',\n accept: ['image/*', 'video/*'],\n },\n ],\n },\n },\n },\n]\n\nexport class LexiconAuthorityProfile extends ServiceProfile {\n public static async create(\n pds: TestPds,\n userDetails = {\n email: 'lex-authority@test.com',\n handle: 'lex-authority.test',\n password: 'hunter2',\n },\n ) {\n const agent = pds.getAgent()\n await agent.createAccount(userDetails)\n\n return new LexiconAuthorityProfile(pds, agent, userDetails)\n }\n\n async createRecords() {\n await this.agent.app.bsky.actor.profile.create(\n { repo: this.did },\n {\n displayName: 'Lexicon Authority',\n description: `the repo containing all the lexicons that can be resolved in dev`,\n },\n )\n\n for (const doc of LEXICONS) {\n await this.agent.com.atproto.repo.createRecord({\n repo: this.did,\n collection: 'com.atproto.lexicon.schema',\n rkey: doc.id,\n record: doc,\n })\n }\n }\n}\n"]}
|
|
@@ -10,7 +10,7 @@ export declare class OzoneServiceProfile extends ServiceProfile {
|
|
|
10
10
|
handle: string;
|
|
11
11
|
password: string;
|
|
12
12
|
}): Promise<OzoneServiceProfile>;
|
|
13
|
-
protected constructor(pds: TestPds,
|
|
13
|
+
protected constructor(pds: TestPds, agent: AtpAgent, userDetails: ServiceUserDetails, ozoneUrl: string, key: Secp256k1Keypair);
|
|
14
14
|
createAppPasswordForVerification(): Promise<string>;
|
|
15
15
|
migrateTo(pds: TestPds, options?: ServiceMigrationOptions): Promise<void>;
|
|
16
16
|
createRecords(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-profile-ozone.d.ts","sourceRoot":"","sources":["../src/service-profile-ozone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,qBAAa,mBAAoB,SAAQ,cAAc;IAsBnD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,GAAG,EAAE,gBAAgB;WAtBnB,MAAM,CACjB,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW;;;;KAIV;IAUH,SAAS,aACP,GAAG,EAAE,OAAO,EACZ,
|
|
1
|
+
{"version":3,"file":"service-profile-ozone.d.ts","sourceRoot":"","sources":["../src/service-profile-ozone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,qBAAa,mBAAoB,SAAQ,cAAc;IAsBnD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,GAAG,EAAE,gBAAgB;WAtBnB,MAAM,CACjB,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW;;;;KAIV;IAUH,SAAS,aACP,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,kBAAkB,EACtB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,gBAAgB;IAK1B,gCAAgC;IAOhC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,uBAA4B;IAiB7D,aAAa;CAyTpB"}
|
|
@@ -9,13 +9,13 @@ class OzoneServiceProfile extends service_profile_1.ServiceProfile {
|
|
|
9
9
|
handle: 'mod-authority.test',
|
|
10
10
|
password: 'hunter2',
|
|
11
11
|
}) {
|
|
12
|
-
const
|
|
13
|
-
await
|
|
12
|
+
const agent = pds.getAgent();
|
|
13
|
+
await agent.createAccount(userDetails);
|
|
14
14
|
const key = await crypto_1.Secp256k1Keypair.create({ exportable: true });
|
|
15
|
-
return new OzoneServiceProfile(pds,
|
|
15
|
+
return new OzoneServiceProfile(pds, agent, userDetails, ozoneUrl, key);
|
|
16
16
|
}
|
|
17
|
-
constructor(pds,
|
|
18
|
-
super(pds,
|
|
17
|
+
constructor(pds, agent, userDetails, ozoneUrl, key) {
|
|
18
|
+
super(pds, agent, userDetails);
|
|
19
19
|
Object.defineProperty(this, "ozoneUrl", {
|
|
20
20
|
enumerable: true,
|
|
21
21
|
configurable: true,
|
|
@@ -30,7 +30,7 @@ class OzoneServiceProfile extends service_profile_1.ServiceProfile {
|
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
async createAppPasswordForVerification() {
|
|
33
|
-
const { data } = await this.
|
|
33
|
+
const { data } = await this.agent.com.atproto.server.createAppPassword({
|
|
34
34
|
name: 'ozone-verifier',
|
|
35
35
|
});
|
|
36
36
|
return data.password;
|
|
@@ -52,11 +52,11 @@ class OzoneServiceProfile extends service_profile_1.ServiceProfile {
|
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
async createRecords() {
|
|
55
|
-
await this.
|
|
55
|
+
await this.agent.app.bsky.actor.profile.create({ repo: this.did }, {
|
|
56
56
|
displayName: 'Dev-env Moderation',
|
|
57
57
|
description: `The pretend version of mod.bsky.app`,
|
|
58
58
|
});
|
|
59
|
-
await this.
|
|
59
|
+
await this.agent.app.bsky.labeler.service.create({ repo: this.did, rkey: 'self' }, {
|
|
60
60
|
policies: {
|
|
61
61
|
labelValues: [
|
|
62
62
|
'!hide',
|