@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.
Files changed (51) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/bin.js +12 -0
  3. package/dist/bin.js +0 -0
  4. package/dist/bsky.d.ts +3 -1
  5. package/dist/bsky.d.ts.map +1 -1
  6. package/dist/bsky.js +7 -1
  7. package/dist/bsky.js.map +1 -1
  8. package/dist/feed-gen.d.ts.map +1 -1
  9. package/dist/feed-gen.js +7 -10
  10. package/dist/feed-gen.js.map +1 -1
  11. package/dist/mock/index.js +5 -5
  12. package/dist/mock/index.js.map +1 -1
  13. package/dist/moderator-client.js +1 -1
  14. package/dist/moderator-client.js.map +1 -1
  15. package/dist/network-no-appview.d.ts.map +1 -1
  16. package/dist/network-no-appview.js +3 -2
  17. package/dist/network-no-appview.js.map +1 -1
  18. package/dist/ozone.d.ts +1 -1
  19. package/dist/ozone.d.ts.map +1 -1
  20. package/dist/ozone.js +1 -1
  21. package/dist/ozone.js.map +1 -1
  22. package/dist/pds.d.ts +3 -1
  23. package/dist/pds.d.ts.map +1 -1
  24. package/dist/pds.js +7 -1
  25. package/dist/pds.js.map +1 -1
  26. package/dist/seed/client.d.ts +11 -9
  27. package/dist/seed/client.d.ts.map +1 -1
  28. package/dist/seed/client.js +10 -2
  29. package/dist/seed/client.js.map +1 -1
  30. package/dist/service-profile-lexicon.js +5 -5
  31. package/dist/service-profile-lexicon.js.map +1 -1
  32. package/dist/service-profile-ozone.d.ts +1 -1
  33. package/dist/service-profile-ozone.d.ts.map +1 -1
  34. package/dist/service-profile-ozone.js +8 -8
  35. package/dist/service-profile-ozone.js.map +1 -1
  36. package/dist/service-profile.d.ts +4 -3
  37. package/dist/service-profile.d.ts.map +1 -1
  38. package/dist/service-profile.js +16 -16
  39. package/dist/service-profile.js.map +1 -1
  40. package/package.json +11 -10
  41. package/src/bsky.ts +8 -1
  42. package/src/feed-gen.ts +17 -16
  43. package/src/mock/index.ts +10 -10
  44. package/src/moderator-client.ts +1 -1
  45. package/src/network-no-appview.ts +3 -2
  46. package/src/ozone.ts +1 -1
  47. package/src/pds.ts +8 -1
  48. package/src/seed/client.ts +11 -7
  49. package/src/service-profile-lexicon.ts +5 -5
  50. package/src/service-profile-ozone.ts +8 -8
  51. 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
- getClient(): AtpAgent;
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,SAAS,IAAI,QAAQ;IAMrB,SAAS,IAAI,MAAM;IAUnB,gBAAgB;;;IAMhB,YAAY;IAIN,UAAU;IAIV,KAAK;CAGZ"}
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
- getClient() {
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,SAAS;QACP,MAAM,KAAK,GAAG,IAAI,cAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QACjD,KAAK,CAAC,iBAAiB,CAAC,CAAC,uBAAe,CAAC,CAAC,CAAA;QAC1C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,SAAS;QACP,OAAO,CACL,QAAQ;YACR,GAAG,CAAC,QAAQ,CACV,GAAG,CAAC,UAAU,CAAC,SAAS,sBAAc,EAAE,EAAE,MAAM,CAAC,EACjD,WAAW,CACZ,CACF,CAAA;IACH,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE;SAChC,CAAA;IACH,CAAC;IAED,YAAY;QACV,OAAO,IAAA,2BAAqB,EAAC,kBAAU,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;CACF;AApGD,0BAoGC","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 * 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 getClient(): AtpAgent {\n const agent = new AtpAgent({ service: this.url })\n agent.configureLabelers([EXAMPLE_LABELER])\n return agent\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"]}
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"]}
@@ -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: string;
16
- cid: string;
16
+ uri: AtUriString;
17
+ cid: CidString;
17
18
  };
18
- get uriStr(): string;
19
- get cidStr(): string;
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: string;
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, 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: string;
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":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/seed/client.ts"],"names":[],"mappings":"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"}
@@ -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
- this.dids[shortName] = account.did;
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
  };
@@ -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 client = pds.getClient();
77
- await client.createAccount(userDetails);
78
- return new LexiconAuthorityProfile(pds, client, userDetails);
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.client.app.bsky.actor.profile.create({ repo: this.did }, {
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.client.com.atproto.repo.createRecord({
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,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAA;QAC9B,MAAM,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;QAEvC,OAAO,IAAI,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAC7C,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,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC9C,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 client = pds.getClient()\n await client.createAccount(userDetails)\n\n return new LexiconAuthorityProfile(pds, client, userDetails)\n }\n\n async createRecords() {\n await this.client.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.client.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"]}
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, client: AtpAgent, userDetails: ServiceUserDetails, ozoneUrl: string, key: Secp256k1Keypair);
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,MAAM,EAAE,QAAQ,EAChB,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"}
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 client = pds.getClient();
13
- await client.createAccount(userDetails);
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, client, userDetails, ozoneUrl, key);
15
+ return new OzoneServiceProfile(pds, agent, userDetails, ozoneUrl, key);
16
16
  }
17
- constructor(pds, client, userDetails, ozoneUrl, key) {
18
- super(pds, client, userDetails);
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.client.com.atproto.server.createAppPassword({
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.client.app.bsky.actor.profile.create({ repo: this.did }, {
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.client.app.bsky.labeler.service.create({ repo: this.did, rkey: 'self' }, {
59
+ await this.agent.app.bsky.labeler.service.create({ repo: this.did, rkey: 'self' }, {
60
60
  policies: {
61
61
  labelValues: [
62
62
  '!hide',