@atproto/dev-env 0.6.4 → 0.6.7
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 +94 -0
- package/dist/bsky.d.ts +5 -4
- package/dist/bsky.d.ts.map +1 -1
- package/dist/bsky.js +5 -1
- package/dist/bsky.js.map +1 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +1 -0
- package/dist/network.js.map +1 -1
- package/dist/ozone.d.ts +7 -4
- package/dist/ozone.d.ts.map +1 -1
- package/dist/ozone.js +7 -0
- package/dist/ozone.js.map +1 -1
- package/dist/pds.d.ts +3 -3
- package/dist/pds.d.ts.map +1 -1
- package/dist/pds.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -1
- package/dist/util.js.map +1 -1
- package/package.json +14 -14
- package/src/bsky.ts +8 -4
- package/src/network.ts +1 -0
- package/src/ozone.ts +13 -5
- package/src/pds.ts +3 -3
- package/src/types.ts +2 -1
- package/src/util.ts +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,99 @@
|
|
|
1
1
|
# @atproto/dev-env
|
|
2
2
|
|
|
3
|
+
## 0.6.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#5504](https://github.com/bluesky-social/atproto/pull/5504) [`1ff43e6`](https://github.com/bluesky-social/atproto/commit/1ff43e6e592b1c3ac44e9cd5585370063035a90d) Thanks [@devinivy](https://github.com/devinivy)! - Keep localhost identity resolution working against `@atproto/identity`'s new
|
|
8
|
+
safe default.
|
|
9
|
+
- Updated dependencies [[`1ff43e6`](https://github.com/bluesky-social/atproto/commit/1ff43e6e592b1c3ac44e9cd5585370063035a90d), [`09d0932`](https://github.com/bluesky-social/atproto/commit/09d09322f31947b1f559ca47047bca3da127e301), [`1ff43e6`](https://github.com/bluesky-social/atproto/commit/1ff43e6e592b1c3ac44e9cd5585370063035a90d), [`1ff43e6`](https://github.com/bluesky-social/atproto/commit/1ff43e6e592b1c3ac44e9cd5585370063035a90d), [`1ff43e6`](https://github.com/bluesky-social/atproto/commit/1ff43e6e592b1c3ac44e9cd5585370063035a90d), [`ac0989b`](https://github.com/bluesky-social/atproto/commit/ac0989bf9e16affd4aa919df8609b12f4ee8cd65)]:
|
|
10
|
+
- @atproto/bsky@0.0.280
|
|
11
|
+
- @atproto/pds@0.5.34
|
|
12
|
+
- @atproto/identity@0.5.13
|
|
13
|
+
- @atproto/ozone@0.4.2
|
|
14
|
+
- @atproto/sync@0.4.10
|
|
15
|
+
- @atproto/lex@0.3.11
|
|
16
|
+
|
|
17
|
+
## 0.6.6
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies [[`0287dce`](https://github.com/bluesky-social/atproto/commit/0287dcece76c2c2453406cb3b51591ce0f983a98), [`fe4087e`](https://github.com/bluesky-social/atproto/commit/fe4087ecb7a7cc53c7081c9f97d49121e5251c36), [`7277010`](https://github.com/bluesky-social/atproto/commit/727701085829daf8e0440253346b5e70fc3810ad)]:
|
|
22
|
+
- @atproto/ozone@0.4.1
|
|
23
|
+
- @atproto/api@0.20.44
|
|
24
|
+
- @atproto/bsky@0.0.279
|
|
25
|
+
- @atproto/bsync@0.0.44
|
|
26
|
+
- @atproto/common-web@0.5.12
|
|
27
|
+
- @atproto/crypto@0.5.5
|
|
28
|
+
- @atproto/identity@0.5.12
|
|
29
|
+
- @atproto/lexicon@0.7.14
|
|
30
|
+
- @atproto/pds@0.5.33
|
|
31
|
+
- @atproto/sync@0.4.9
|
|
32
|
+
- @atproto/xrpc-server@0.13.1
|
|
33
|
+
- @atproto/lex@0.3.10
|
|
34
|
+
|
|
35
|
+
## 0.6.5
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- [#5426](https://github.com/bluesky-social/atproto/pull/5426) [`ed0b7d3`](https://github.com/bluesky-social/atproto/commit/ed0b7d38811bb24952a3f1da988b02e39934d222) Thanks [@bigmoves](https://github.com/bigmoves)! - Migrate Ozone onto `@atproto/lex`.
|
|
40
|
+
|
|
41
|
+
Ozone was the last package still generating its server stack with
|
|
42
|
+
`lex gen-server`. It now uses `lex build` like `pds` and `bsky`, and the legacy
|
|
43
|
+
`src/lexicon` tree is gone:
|
|
44
|
+
|
|
45
|
+
- All 95 route registrations moved from `server.<ns>.<method>()` to
|
|
46
|
+
`server.add(schema, …)` from `@atproto/xrpc-server`.
|
|
47
|
+
- `AtpAgent` is replaced by `Client`; `CredentialSession` by `PasswordSession`
|
|
48
|
+
from `@atproto/lex-password-session`.
|
|
49
|
+
- Kysely schema types, config and auth credentials now carry the branded
|
|
50
|
+
scalars (`DidString`, `DatetimeString`, `AtUriString`, `UriString`), so
|
|
51
|
+
route params flow into the database and back out into views without casts.
|
|
52
|
+
|
|
53
|
+
`@atproto/api` and `@atproto/lexicon` move to `devDependencies` (the test suites
|
|
54
|
+
still drive the legacy client), and `@atproto/xrpc` and `@atproto/lex-cli` are
|
|
55
|
+
dropped entirely.
|
|
56
|
+
|
|
57
|
+
Two behaviour changes worth noting, both from validating against the Lexicon
|
|
58
|
+
schemas rather than the legacy runtime:
|
|
59
|
+
|
|
60
|
+
- The AT Proto data model has no floating-point numbers, and the legacy stack
|
|
61
|
+
accepted them anyway. A non-integer number in an `unknown` field — for
|
|
62
|
+
example a float stored in a `tools.ozone.setting` value — is now rejected at
|
|
63
|
+
input validation. Reads are unaffected, since the server is configured with
|
|
64
|
+
`validateResponse: false`.
|
|
65
|
+
- A value whose shape contradicts the Lexicon is now rejected by schema
|
|
66
|
+
validation before a route's own validators run, so the reported error is the
|
|
67
|
+
schema's (`Expected object value type …`) rather than the application's.
|
|
68
|
+
|
|
69
|
+
`BlobDiverter` and the OAuth-preferences proxy previously threw `XRPCError` from
|
|
70
|
+
`@atproto/xrpc` to signal retryability to `retryHttp`. They now throw
|
|
71
|
+
`UpstreamHttpError`, which extends `XRPCError` from `@atproto/xrpc-server` so
|
|
72
|
+
that an error escaping a handler still carries its upstream status and message
|
|
73
|
+
instead of collapsing into a generic 500.
|
|
74
|
+
|
|
75
|
+
- [#5426](https://github.com/bluesky-social/atproto/pull/5426) [`ed0b7d3`](https://github.com/bluesky-social/atproto/commit/ed0b7d38811bb24952a3f1da988b02e39934d222) Thanks [@bigmoves](https://github.com/bigmoves)! - Use stronger types (`UriString`, `DidString`, ...) for service properties
|
|
76
|
+
|
|
77
|
+
- [#5473](https://github.com/bluesky-social/atproto/pull/5473) [`cae15d9`](https://github.com/bluesky-social/atproto/commit/cae15d9fd007206878d51f990b321a508b3044b7) Thanks [@rafaeleyng](https://github.com/rafaeleyng)! - Add a `BSKY_FEED_GEN_SKELETON_TIMEOUT` option, bounding feed generator skeleton requests. Defaults to 5s, lowered from the previously hardcoded 10s.
|
|
78
|
+
|
|
79
|
+
- [#5484](https://github.com/bluesky-social/atproto/pull/5484) [`14bd634`](https://github.com/bluesky-social/atproto/commit/14bd63433726fb2acf1b77358710950341f4b949) Thanks [@rafaeleyng](https://github.com/rafaeleyng)! - Fan out notification read timestamps through bsync and prevent older timestamps from replacing newer ones.
|
|
80
|
+
|
|
81
|
+
- [#5421](https://github.com/bluesky-social/atproto/pull/5421) [`5c154f9`](https://github.com/bluesky-social/atproto/commit/5c154f9c5173e7823a5353eab92207508a7dea99) Thanks [@foysalit](https://github.com/foysalit)! - Add `getClient()` method on `TestOzone` class
|
|
82
|
+
|
|
83
|
+
- Updated dependencies [[`a8d3893`](https://github.com/bluesky-social/atproto/commit/a8d38932747a662f2b6f45c1838807efa3341c9e), [`8a4631a`](https://github.com/bluesky-social/atproto/commit/8a4631a47ce6791b3868f06d1c930aa21327748c), [`ffcb7c5`](https://github.com/bluesky-social/atproto/commit/ffcb7c54e4dcedb10eed9175fbc939761462bca6), [`60c4395`](https://github.com/bluesky-social/atproto/commit/60c439595101fbcbe612463e6f23200590c5daaf), [`908cd55`](https://github.com/bluesky-social/atproto/commit/908cd559d57c207ed0a67c8fbbb8be6091dd7534), [`328a4a8`](https://github.com/bluesky-social/atproto/commit/328a4a86a999357eeae12a6da897bf686b4da88e), [`ed0b7d3`](https://github.com/bluesky-social/atproto/commit/ed0b7d38811bb24952a3f1da988b02e39934d222), [`04dc5ab`](https://github.com/bluesky-social/atproto/commit/04dc5ab09b4439779d254a5478c8ea3a19c44189), [`f0d4877`](https://github.com/bluesky-social/atproto/commit/f0d4877a03dc8ede0d3e9a36d5b72ada63b5d2e0), [`a058557`](https://github.com/bluesky-social/atproto/commit/a0585579f000dc489b5524b02955fdca1de6665c), [`f7fe823`](https://github.com/bluesky-social/atproto/commit/f7fe8237f6cc83da45c1494ca90c94c4b2a65a23), [`9a72c51`](https://github.com/bluesky-social/atproto/commit/9a72c515b1886256f05b1e28d61e5a1caade1d74), [`5c154f9`](https://github.com/bluesky-social/atproto/commit/5c154f9c5173e7823a5353eab92207508a7dea99), [`ff99ec0`](https://github.com/bluesky-social/atproto/commit/ff99ec0a35e3b2b91cb8fb8fef780abb623a1f90), [`cae15d9`](https://github.com/bluesky-social/atproto/commit/cae15d9fd007206878d51f990b321a508b3044b7), [`ed0b7d3`](https://github.com/bluesky-social/atproto/commit/ed0b7d38811bb24952a3f1da988b02e39934d222), [`14bd634`](https://github.com/bluesky-social/atproto/commit/14bd63433726fb2acf1b77358710950341f4b949), [`80d391a`](https://github.com/bluesky-social/atproto/commit/80d391a2b5762b1c50037303f77f73db345bec1e), [`5c154f9`](https://github.com/bluesky-social/atproto/commit/5c154f9c5173e7823a5353eab92207508a7dea99), [`222f4bc`](https://github.com/bluesky-social/atproto/commit/222f4bc600fb89c75fafee95ef3c837b1721601e), [`59f4a42`](https://github.com/bluesky-social/atproto/commit/59f4a42d20f87fa24ea7b0bd923df9c133a5d2b5), [`db6e2e7`](https://github.com/bluesky-social/atproto/commit/db6e2e70d1168c1a2fcf068ec42eaac6fd1702d5), [`80d391a`](https://github.com/bluesky-social/atproto/commit/80d391a2b5762b1c50037303f77f73db345bec1e), [`715caf1`](https://github.com/bluesky-social/atproto/commit/715caf130a9347b36b9cbdf479ae5d6113e030c6), [`328a4a8`](https://github.com/bluesky-social/atproto/commit/328a4a86a999357eeae12a6da897bf686b4da88e), [`ed0b7d3`](https://github.com/bluesky-social/atproto/commit/ed0b7d38811bb24952a3f1da988b02e39934d222), [`263eaa3`](https://github.com/bluesky-social/atproto/commit/263eaa3e41d8d7328c5a7376e06b1e398156e9b7), [`7068a65`](https://github.com/bluesky-social/atproto/commit/7068a65638f8d4664083555f402c5a10c47af460), [`0f3ea4b`](https://github.com/bluesky-social/atproto/commit/0f3ea4b86fbb4ec9869d219bae0d4d57ef019427), [`ffcb7c5`](https://github.com/bluesky-social/atproto/commit/ffcb7c54e4dcedb10eed9175fbc939761462bca6)]:
|
|
84
|
+
- @atproto/ozone@0.4.0
|
|
85
|
+
- @atproto/xrpc-server@0.13.0
|
|
86
|
+
- @atproto/bsky@0.0.278
|
|
87
|
+
- @atproto/api@0.20.43
|
|
88
|
+
- @atproto/bsync@0.0.43
|
|
89
|
+
- @atproto/lex@0.3.9
|
|
90
|
+
- @atproto/pds@0.5.32
|
|
91
|
+
- @atproto/syntax@0.7.6
|
|
92
|
+
- @atproto/sync@0.4.8
|
|
93
|
+
- @atproto/common-web@0.5.11
|
|
94
|
+
- @atproto/lexicon@0.7.13
|
|
95
|
+
- @atproto/identity@0.5.11
|
|
96
|
+
|
|
3
97
|
## 0.6.4
|
|
4
98
|
|
|
5
99
|
### Patch Changes
|
package/dist/bsky.d.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { AtpAgent } from '@atproto/api';
|
|
2
2
|
import * as bsky from '@atproto/bsky';
|
|
3
|
-
import { Client } from '@atproto/lex';
|
|
3
|
+
import { Client, type UriString } from '@atproto/lex';
|
|
4
|
+
import type { DidString } from '@atproto/syntax';
|
|
4
5
|
import type { BskyConfig } from './types.js';
|
|
5
6
|
export * from '@atproto/bsky';
|
|
6
7
|
export declare class TestBsky {
|
|
7
|
-
url:
|
|
8
|
+
url: UriString;
|
|
8
9
|
port: number;
|
|
9
10
|
db: bsky.Database;
|
|
10
11
|
server: bsky.BskyAppView;
|
|
11
12
|
dataplane: bsky.DataPlaneServer;
|
|
12
13
|
bsyncSub: bsky.BsyncSubscription;
|
|
13
14
|
sub: bsky.RepoSubscription;
|
|
14
|
-
serverDid:
|
|
15
|
-
constructor(url:
|
|
15
|
+
serverDid: DidString;
|
|
16
|
+
constructor(url: UriString, port: number, db: bsky.Database, server: bsky.BskyAppView, dataplane: bsky.DataPlaneServer, bsyncSub: bsky.BsyncSubscription, sub: bsky.RepoSubscription, serverDid: DidString);
|
|
16
17
|
static create(cfg: BskyConfig): Promise<TestBsky>;
|
|
17
18
|
get ctx(): bsky.AppContext;
|
|
18
19
|
getAgent(): AtpAgent;
|
package/dist/bsky.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bsky.d.ts","sourceRoot":"","sources":["../src/bsky.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"bsky.d.ts","sourceRoot":"","sources":["../src/bsky.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,eAAe,CAAA;AAGrC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,cAAc,eAAe,CAAA;AAE7B,qBAAa,QAAQ;IAEV,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,IAAI,CAAC,QAAQ;IACjB,MAAM,EAAE,IAAI,CAAC,WAAW;IACxB,SAAS,EAAE,IAAI,CAAC,eAAe;IAC/B,QAAQ,EAAE,IAAI,CAAC,iBAAiB;IAChC,GAAG,EAAE,IAAI,CAAC,gBAAgB;IAC1B,SAAS,EAAE,SAAS;IAR7B,YACS,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,IAAI,CAAC,QAAQ,EACjB,MAAM,EAAE,IAAI,CAAC,WAAW,EACxB,SAAS,EAAE,IAAI,CAAC,eAAe,EAC/B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAChC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAC1B,SAAS,EAAE,SAAS,EACzB;IAEJ,OAAa,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwHtD;IAED,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAEzB;IAED,QAAQ,IAAI,QAAQ,CAInB;IAED,SAAS,IAAI,MAAM,CAIlB;IAED,SAAS,IAAI,MAAM,CAMlB;IAED,gBAAgB;QAEZ,aAAa;MAEhB;IAEK,KAAK,kBAmBV;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF"}
|
package/dist/bsky.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Client as PlcClient } from '@did-plc/lib';
|
|
|
2
2
|
import * as ui8 from 'uint8arrays';
|
|
3
3
|
import { AtpAgent } from '@atproto/api';
|
|
4
4
|
import * as bsky from '@atproto/bsky';
|
|
5
|
+
import { SECOND } from '@atproto/common-web';
|
|
5
6
|
import { Secp256k1Keypair } from '@atproto/crypto';
|
|
6
7
|
import { Client } from '@atproto/lex';
|
|
7
8
|
import { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const.js';
|
|
@@ -51,7 +52,9 @@ export class TestBsky {
|
|
|
51
52
|
poolSize: 10,
|
|
52
53
|
});
|
|
53
54
|
const dataplanePort = await getPort();
|
|
54
|
-
const dataplane = await bsky.DataPlaneServer.create(db, dataplanePort, cfg.plcUrl
|
|
55
|
+
const dataplane = await bsky.DataPlaneServer.create(db, dataplanePort, cfg.plcUrl,
|
|
56
|
+
// Resolves against an in-process PLC on localhost.
|
|
57
|
+
globalThis.fetch);
|
|
55
58
|
const config = new bsky.ServerConfig({
|
|
56
59
|
version: 'unknown',
|
|
57
60
|
port,
|
|
@@ -76,6 +79,7 @@ export class TestBsky {
|
|
|
76
79
|
visibilityTagRankPrefix: '',
|
|
77
80
|
debugFieldAllowedDids: new Set(),
|
|
78
81
|
draftsLimit: 500,
|
|
82
|
+
feedGenSkeletonTimeout: 5 * SECOND,
|
|
79
83
|
...cfg,
|
|
80
84
|
adminPasswords: [ADMIN_PASSWORD],
|
|
81
85
|
etcdHosts: [],
|
package/dist/bsky.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bsky.js","sourceRoot":"","sources":["../src/bsky.ts"],"names":[],"mappings":"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","sourcesContent":["import { Client as PlcClient } from '@did-plc/lib'\nimport * as ui8 from 'uint8arrays'\nimport { AtpAgent } from '@atproto/api'\nimport * as bsky from '@atproto/bsky'\nimport { Secp256k1Keypair } from '@atproto/crypto'\nimport { Client } from '@atproto/lex'\nimport type { DidString } from '@atproto/syntax'\nimport { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const.js'\nimport getPort from './get-port.js'\nimport type { BskyConfig } from './types.js'\nexport * from '@atproto/bsky'\n\nexport class TestBsky {\n constructor(\n public url: string,\n public port: number,\n public db: bsky.Database,\n public server: bsky.BskyAppView,\n public dataplane: bsky.DataPlaneServer,\n public bsyncSub: bsky.BsyncSubscription,\n public sub: bsky.RepoSubscription,\n public serverDid: string,\n ) {}\n\n static async create(cfg: BskyConfig): Promise<TestBsky> {\n const serviceKeypair = cfg.privateKey\n ? await Secp256k1Keypair.import(cfg.privateKey)\n : await Secp256k1Keypair.create()\n const plcClient = new PlcClient(cfg.plcUrl)\n\n const port = cfg.port || (await getPort())\n const url = `http://localhost:${port}`\n const serverDid = (await plcClient.createDid({\n signingKey: serviceKeypair.did(),\n rotationKeys: [serviceKeypair.did()],\n handle: 'bsky.test',\n pds: `http://localhost:${port}`,\n signer: serviceKeypair,\n })) as DidString\n\n const endpoint = `http://localhost:${port}`\n\n await plcClient.updateData(serverDid, serviceKeypair, (x) => {\n x.services['bsky_notif'] = {\n type: 'BskyNotificationService',\n endpoint,\n }\n x.services['bsky_appview'] = {\n type: 'BskyAppView',\n endpoint,\n }\n return x\n })\n\n // shared across server, ingester, and indexer in order to share pool, avoid too many pg connections.\n const db = new bsky.Database({\n url: cfg.dbPostgresUrl,\n schema: cfg.dbPostgresSchema,\n poolSize: 10,\n })\n\n const dataplanePort = await getPort()\n const dataplane = await bsky.DataPlaneServer.create(\n db,\n dataplanePort,\n cfg.plcUrl,\n )\n\n const config = new bsky.ServerConfig({\n version: 'unknown',\n port,\n didPlcUrl: cfg.plcUrl,\n publicUrl: 'https://bsky.public.url',\n serverDid,\n alternateAudienceDids: [],\n dataplaneUrls: [`http://localhost:${dataplanePort}`],\n dataplaneHttpVersion: '1.1',\n bsyncHttpVersion: '1.1',\n bsyncApiKey: 'bsync-api-key',\n modServiceDid: cfg.modServiceDid ?? 'did:example:invalidMod',\n labelsFromIssuerDids: [EXAMPLE_LABELER],\n bigThreadUris: new Set(),\n maxThreadParents: cfg.maxThreadParents ?? 50,\n disableSsrfProtection: true,\n searchTagsHide: new Set(),\n searchTagsHideAll: new Set(),\n threadTagsBumpDown: new Set(),\n threadTagsHide: new Set(),\n visibilityTagHide: '',\n visibilityTagRankPrefix: '',\n debugFieldAllowedDids: new Set(),\n draftsLimit: 500,\n ...cfg,\n adminPasswords: [ADMIN_PASSWORD],\n etcdHosts: [],\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 bsky.Database({\n url: cfg.dbPostgresUrl,\n schema: cfg.dbPostgresSchema,\n })\n if (cfg.migration) {\n await migrationDb.migrateToOrThrow(cfg.migration)\n } else {\n await migrationDb.migrateToLatestOrThrow()\n }\n await migrationDb.close()\n\n // api server\n const server = bsky.BskyAppView.create({\n config,\n signingKey: serviceKeypair,\n })\n\n const bsyncSub = new bsky.BsyncSubscription({\n config,\n db,\n })\n\n const sub = new bsky.RepoSubscription({\n service: cfg.repoProvider,\n db,\n idResolver: dataplane.idResolver,\n })\n\n await server.start()\n\n bsyncSub.start()\n void sub.start()\n\n return new TestBsky(\n url,\n port,\n db,\n server,\n dataplane,\n bsyncSub,\n sub,\n serverDid,\n )\n }\n\n get ctx(): bsky.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 const [password] = this.ctx.cfg.adminPasswords\n return (\n 'Basic ' +\n ui8.toString(ui8.fromString(`admin:${password}`, 'utf8'), 'base64pad')\n )\n }\n\n adminAuthHeaders() {\n return {\n authorization: this.adminAuth(),\n }\n }\n\n async close() {\n // @TODO Use disposable stack when it becomes available (Node24+)\n try {\n await this.server.destroy()\n } finally {\n try {\n await this.bsyncSub.destroy()\n } finally {\n try {\n await this.dataplane.destroy()\n } finally {\n try {\n await this.sub.destroy()\n } finally {\n await this.db.close()\n }\n }\n }\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.close()\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bsky.js","sourceRoot":"","sources":["../src/bsky.ts"],"names":[],"mappings":"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","sourcesContent":["import { Client as PlcClient } from '@did-plc/lib'\nimport * as ui8 from 'uint8arrays'\nimport { AtpAgent } from '@atproto/api'\nimport * as bsky from '@atproto/bsky'\nimport { SECOND } from '@atproto/common-web'\nimport { Secp256k1Keypair } from '@atproto/crypto'\nimport { Client, type UriString } from '@atproto/lex'\nimport type { DidString } from '@atproto/syntax'\nimport { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const.js'\nimport getPort from './get-port.js'\nimport type { BskyConfig } from './types.js'\nexport * from '@atproto/bsky'\n\nexport class TestBsky {\n constructor(\n public url: UriString,\n public port: number,\n public db: bsky.Database,\n public server: bsky.BskyAppView,\n public dataplane: bsky.DataPlaneServer,\n public bsyncSub: bsky.BsyncSubscription,\n public sub: bsky.RepoSubscription,\n public serverDid: DidString,\n ) {}\n\n static async create(cfg: BskyConfig): Promise<TestBsky> {\n const serviceKeypair = cfg.privateKey\n ? await Secp256k1Keypair.import(cfg.privateKey)\n : await Secp256k1Keypair.create()\n const plcClient = new PlcClient(cfg.plcUrl)\n\n const port = cfg.port || (await getPort())\n const url: UriString = `http://localhost:${port}`\n const serverDid = (await plcClient.createDid({\n signingKey: serviceKeypair.did(),\n rotationKeys: [serviceKeypair.did()],\n handle: 'bsky.test',\n pds: `http://localhost:${port}`,\n signer: serviceKeypair,\n })) as DidString\n\n const endpoint = `http://localhost:${port}`\n\n await plcClient.updateData(serverDid, serviceKeypair, (x) => {\n x.services['bsky_notif'] = {\n type: 'BskyNotificationService',\n endpoint,\n }\n x.services['bsky_appview'] = {\n type: 'BskyAppView',\n endpoint,\n }\n return x\n })\n\n // shared across server, ingester, and indexer in order to share pool, avoid too many pg connections.\n const db = new bsky.Database({\n url: cfg.dbPostgresUrl,\n schema: cfg.dbPostgresSchema,\n poolSize: 10,\n })\n\n const dataplanePort = await getPort()\n const dataplane = await bsky.DataPlaneServer.create(\n db,\n dataplanePort,\n cfg.plcUrl,\n // Resolves against an in-process PLC on localhost.\n globalThis.fetch,\n )\n\n const config = new bsky.ServerConfig({\n version: 'unknown',\n port,\n didPlcUrl: cfg.plcUrl,\n publicUrl: 'https://bsky.public.url',\n serverDid,\n alternateAudienceDids: [],\n dataplaneUrls: [`http://localhost:${dataplanePort}`],\n dataplaneHttpVersion: '1.1',\n bsyncHttpVersion: '1.1',\n bsyncApiKey: 'bsync-api-key',\n modServiceDid: cfg.modServiceDid ?? 'did:example:invalidMod',\n labelsFromIssuerDids: [EXAMPLE_LABELER],\n bigThreadUris: new Set(),\n maxThreadParents: cfg.maxThreadParents ?? 50,\n disableSsrfProtection: true,\n searchTagsHide: new Set(),\n searchTagsHideAll: new Set(),\n threadTagsBumpDown: new Set(),\n threadTagsHide: new Set(),\n visibilityTagHide: '',\n visibilityTagRankPrefix: '',\n debugFieldAllowedDids: new Set(),\n draftsLimit: 500,\n feedGenSkeletonTimeout: 5 * SECOND,\n ...cfg,\n adminPasswords: [ADMIN_PASSWORD],\n etcdHosts: [],\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 bsky.Database({\n url: cfg.dbPostgresUrl,\n schema: cfg.dbPostgresSchema,\n })\n if (cfg.migration) {\n await migrationDb.migrateToOrThrow(cfg.migration)\n } else {\n await migrationDb.migrateToLatestOrThrow()\n }\n await migrationDb.close()\n\n // api server\n const server = bsky.BskyAppView.create({\n config,\n signingKey: serviceKeypair,\n })\n\n const bsyncSub = new bsky.BsyncSubscription({\n config,\n db,\n })\n\n const sub = new bsky.RepoSubscription({\n service: cfg.repoProvider,\n db,\n idResolver: dataplane.idResolver,\n })\n\n await server.start()\n\n bsyncSub.start()\n void sub.start()\n\n return new TestBsky(\n url,\n port,\n db,\n server,\n dataplane,\n bsyncSub,\n sub,\n serverDid,\n )\n }\n\n get ctx(): bsky.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 const [password] = this.ctx.cfg.adminPasswords\n return (\n 'Basic ' +\n ui8.toString(ui8.fromString(`admin:${password}`, 'utf8'), 'base64pad')\n )\n }\n\n adminAuthHeaders() {\n return {\n authorization: this.adminAuth(),\n }\n }\n\n async close() {\n // @TODO Use disposable stack when it becomes available (Node24+)\n try {\n await this.server.destroy()\n } finally {\n try {\n await this.bsyncSub.destroy()\n } finally {\n try {\n await this.dataplane.destroy()\n } finally {\n try {\n await this.sub.destroy()\n } finally {\n await this.db.close()\n }\n }\n }\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.close()\n }\n}\n"]}
|
package/dist/network.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAGtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAMlD,qBAAa,WAAY,SAAQ,oBAAoB;IAE1C,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;IAChB,UAAU,CAAC,EAAE,gBAAgB;IANtC,YACS,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,gBAAgB,YAAA,EAGrC;IAED,OAAa,MAAM,CACjB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACrC,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAGtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAMlD,qBAAa,WAAY,SAAQ,oBAAoB;IAE1C,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;IAChB,UAAU,CAAC,EAAE,gBAAgB;IANtC,YACS,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,gBAAgB,YAAA,EAGrC;IAED,OAAa,MAAM,CACjB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACrC,OAAO,CAAC,WAAW,CAAC,CAgItB;IAEK,uBAAuB,CAAC,OAAO,SAAO,iBAmB3C;IAEK,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,iBAShC;IAEK,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;;OAS1D;IAEK,YAAY,CAAC,EACjB,QAAyB,EACzB,QAAyB,GAC1B,EAAE;QACD,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB;;OASA;IAEK,KAAK,kBAcV;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF"}
|
package/dist/network.js
CHANGED
|
@@ -71,6 +71,7 @@ export class TestNetwork extends TestNetworkNoAppView {
|
|
|
71
71
|
privateKey: '3f916c70dc69e4c5e83877f013325b11ecac31742e6a42f5c4fb240d0703d9d5=',
|
|
72
72
|
...params.bsky,
|
|
73
73
|
});
|
|
74
|
+
bsync.ctx.dataplaneClients = [bsky.ctx.dataplane];
|
|
74
75
|
const pds = await TestPds.create({
|
|
75
76
|
port: pdsPort,
|
|
76
77
|
didPlcUrl: plc.url,
|
package/dist/network.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport * as uint8arrays from 'uint8arrays'\nimport { allFulfilled, wait } from '@atproto/common-web'\nimport { createServiceJwt } from '@atproto/xrpc-server'\nimport { TestBsky } from './bsky.js'\nimport { TestBsync } from './bsync.js'\nimport { EXAMPLE_LABELER } from './const.js'\nimport getPort from './get-port.js'\nimport { IntrospectServer } from './introspect.js'\nimport { TestNetworkNoAppView } from './network-no-appview.js'\nimport { TestOzone } from './ozone.js'\nimport { TestPds } from './pds.js'\nimport { TestPlc } from './plc.js'\nimport { LexiconAuthorityProfile } from './service-profile-lexicon.js'\nimport { OzoneServiceProfile } from './service-profile-ozone.js'\nimport type { TestServerParams } from './types.js'\nimport { mockNetworkUtilities } from './util.js'\n\nconst ADMIN_USERNAME = 'admin'\nconst ADMIN_PASSWORD = 'admin-pass'\n\nexport class TestNetwork extends TestNetworkNoAppView {\n constructor(\n public plc: TestPlc,\n public pds: TestPds,\n public bsync: TestBsync,\n public bsky: TestBsky,\n public ozone: TestOzone,\n public introspect?: IntrospectServer,\n ) {\n super(plc, pds)\n }\n\n static async create(\n params: Partial<TestServerParams> = {},\n ): Promise<TestNetwork> {\n const redisHost = process.env.REDIS_HOST\n const dbPostgresUrl = params.dbPostgresUrl || process.env.DB_POSTGRES_URL\n assert(dbPostgresUrl, 'Missing postgres url for tests')\n assert(redisHost, 'Missing redis host for tests')\n const dbPostgresSchema =\n params.dbPostgresSchema || process.env.DB_POSTGRES_SCHEMA\n\n const plc = await TestPlc.create(params.plc ?? {})\n\n const bskyPort = params.bsky?.port ?? (await getPort())\n const pdsPort = params.pds?.port ?? (await getPort())\n const ozonePort = params.ozone?.port ?? (await getPort())\n\n const thirdPartyPds = await TestPds.create({\n didPlcUrl: plc.url,\n ...params.pds,\n inviteRequired: false,\n port: await getPort(),\n })\n\n const ozoneUrl = `http://localhost:${ozonePort}`\n\n // @TODO (?) rework the ServiceProfile to live on a separate PDS instead of\n // requiring to migrate to the main PDS\n const ozoneServiceProfile = await OzoneServiceProfile.create(\n thirdPartyPds,\n ozoneUrl,\n )\n const lexiconAuthorityProfile =\n await LexiconAuthorityProfile.create(thirdPartyPds)\n\n const bsyncApiKey = 'bsync-api-key'\n const bsync = await TestBsync.create({\n apiKeys: [bsyncApiKey],\n dbUrl: dbPostgresUrl,\n dbSchema: `bsync_${dbPostgresSchema}`,\n })\n\n const bsky = await TestBsky.create({\n port: bskyPort,\n plcUrl: plc.url,\n pdsPort,\n bsyncApiKey,\n bsyncUrl: bsync.url,\n rolodexUrl: process.env.BSKY_ROLODEX_URL,\n rolodexIgnoreBadTls: true,\n repoProvider: `ws://localhost:${pdsPort}`,\n dbPostgresSchema: `appview_${dbPostgresSchema}`,\n dbPostgresUrl,\n redisHost,\n modServiceDid: ozoneServiceProfile.did,\n labelsFromIssuerDids: [ozoneServiceProfile.did, EXAMPLE_LABELER],\n // Using a static private key results in a static DID, which is useful for e2e tests with the social-app repo.\n privateKey:\n '3f916c70dc69e4c5e83877f013325b11ecac31742e6a42f5c4fb240d0703d9d5=',\n ...params.bsky,\n })\n\n const pds = await TestPds.create({\n port: pdsPort,\n didPlcUrl: plc.url,\n bskyAppViewUrl: bsky.url,\n bskyAppViewDid: bsky.ctx.cfg.serverDid,\n modServiceUrl: ozoneUrl,\n modServiceDid: ozoneServiceProfile.did,\n lexiconDidAuthority: lexiconAuthorityProfile.did,\n ...params.pds,\n })\n\n // mock before any events start flowing from pds so that we don't miss e.g. any handle resolutions.\n mockNetworkUtilities(pds, bsky)\n\n const ozone = await TestOzone.create({\n port: ozonePort,\n plcUrl: plc.url,\n signingKey: ozoneServiceProfile.key,\n serverDid: ozoneServiceProfile.did,\n dbPostgresSchema: `ozone_${dbPostgresSchema || 'db'}`,\n dbPostgresUrl,\n appviewUrl: bsky.url,\n appviewDid: bsky.ctx.cfg.serverDid,\n appviewPushEvents: true,\n pdsUrl: pds.url,\n pdsDid: pds.ctx.cfg.service.did,\n verifierDid: ozoneServiceProfile.did,\n verifierUrl: pds.url,\n verifierPassword: 'temp',\n ...params.ozone,\n })\n\n await ozoneServiceProfile.migrateTo(pds)\n await ozoneServiceProfile.createRecords()\n\n await lexiconAuthorityProfile.migrateTo(pds)\n await lexiconAuthorityProfile.createRecords()\n\n await ozone.addAdminDid(ozoneServiceProfile.did)\n await ozone.createPolicies()\n\n await thirdPartyPds.processAll()\n await pds.processAll()\n await ozone.processAll()\n await bsky.sub.processAll()\n await bsky.bsyncSub.processAll(await bsync.getStreamHeads())\n await thirdPartyPds.close()\n\n // Weird but if we do this before pds.processAll() somehow appview loses this user and tests in different parts fail because appview doesn't return this user in various contexts anymore\n const ozoneVerifierPassword =\n await ozoneServiceProfile.createAppPasswordForVerification()\n if (ozone.daemon.ctx.cfg.verifier) {\n ozone.daemon.ctx.cfg.verifier.password = ozoneVerifierPassword\n }\n\n let introspect: IntrospectServer | undefined = undefined\n if (params.introspect?.port) {\n introspect = await IntrospectServer.start(\n params.introspect.port,\n plc,\n pds,\n bsync,\n bsky,\n ozone,\n )\n }\n\n return new TestNetwork(plc, pds, bsync, bsky, ozone, introspect)\n }\n\n async processFullSubscription(timeout = 5000) {\n const sub = this.bsky.sub\n // If the subscription is not running, there is no point in\n // waiting for it to process events\n if (!sub.running) return\n const start = Date.now()\n const lastSeq = await this.pds.ctx.sequencer.curr()\n if (!lastSeq) return\n while (Date.now() - start < timeout) {\n await sub.processAll()\n const runnerCursor = await sub.getCursor()\n // if subscription claims to be done, ensure we are at the most recent cursor from PDS, else wait to process again\n // (the subscription may claim to be finished before the PDS has even emitted it's event)\n if (runnerCursor && runnerCursor >= lastSeq) {\n return\n }\n await wait(5)\n }\n throw new Error(`Sequence was not processed within ${timeout}ms`)\n }\n\n async processAll(timeout?: number) {\n await this.pds.processAll()\n await this.ozone.processAll()\n await this.bsky.sub.processAll()\n await this.bsky.bsyncSub.processAll(\n await this.bsync.getStreamHeads(),\n timeout,\n )\n await this.processFullSubscription(timeout)\n }\n\n async serviceHeaders(did: string, lxm: string, aud?: string) {\n const keypair = await this.pds.ctx.actorStore.keypair(did)\n const jwt = await createServiceJwt({\n iss: did,\n aud: aud ?? this.bsky.ctx.cfg.serverDid,\n lxm,\n keypair,\n })\n return { authorization: `Bearer ${jwt}` }\n }\n\n async adminHeaders({\n username = ADMIN_USERNAME,\n password = ADMIN_PASSWORD,\n }: {\n username?: string\n password?: string\n }) {\n return {\n authorization:\n 'Basic ' +\n uint8arrays.toString(\n uint8arrays.fromString(`${username}:${password}`, 'utf8'),\n 'base64pad',\n ),\n }\n }\n\n async close() {\n try {\n await this.processAll()\n } finally {\n await allFulfilled([\n ...this.feedGens.map(async (fg) => fg.close()),\n this.ozone.close(),\n this.bsky.close(),\n this.bsync.close(),\n this.pds.close(),\n this.plc.close(),\n this.introspect?.close(),\n ])\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.close()\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport * as uint8arrays from 'uint8arrays'\nimport { allFulfilled, wait } from '@atproto/common-web'\nimport { createServiceJwt } from '@atproto/xrpc-server'\nimport { TestBsky } from './bsky.js'\nimport { TestBsync } from './bsync.js'\nimport { EXAMPLE_LABELER } from './const.js'\nimport getPort from './get-port.js'\nimport { IntrospectServer } from './introspect.js'\nimport { TestNetworkNoAppView } from './network-no-appview.js'\nimport { TestOzone } from './ozone.js'\nimport { TestPds } from './pds.js'\nimport { TestPlc } from './plc.js'\nimport { LexiconAuthorityProfile } from './service-profile-lexicon.js'\nimport { OzoneServiceProfile } from './service-profile-ozone.js'\nimport type { TestServerParams } from './types.js'\nimport { mockNetworkUtilities } from './util.js'\n\nconst ADMIN_USERNAME = 'admin'\nconst ADMIN_PASSWORD = 'admin-pass'\n\nexport class TestNetwork extends TestNetworkNoAppView {\n constructor(\n public plc: TestPlc,\n public pds: TestPds,\n public bsync: TestBsync,\n public bsky: TestBsky,\n public ozone: TestOzone,\n public introspect?: IntrospectServer,\n ) {\n super(plc, pds)\n }\n\n static async create(\n params: Partial<TestServerParams> = {},\n ): Promise<TestNetwork> {\n const redisHost = process.env.REDIS_HOST\n const dbPostgresUrl = params.dbPostgresUrl || process.env.DB_POSTGRES_URL\n assert(dbPostgresUrl, 'Missing postgres url for tests')\n assert(redisHost, 'Missing redis host for tests')\n const dbPostgresSchema =\n params.dbPostgresSchema || process.env.DB_POSTGRES_SCHEMA\n\n const plc = await TestPlc.create(params.plc ?? {})\n\n const bskyPort = params.bsky?.port ?? (await getPort())\n const pdsPort = params.pds?.port ?? (await getPort())\n const ozonePort = params.ozone?.port ?? (await getPort())\n\n const thirdPartyPds = await TestPds.create({\n didPlcUrl: plc.url,\n ...params.pds,\n inviteRequired: false,\n port: await getPort(),\n })\n\n const ozoneUrl = `http://localhost:${ozonePort}`\n\n // @TODO (?) rework the ServiceProfile to live on a separate PDS instead of\n // requiring to migrate to the main PDS\n const ozoneServiceProfile = await OzoneServiceProfile.create(\n thirdPartyPds,\n ozoneUrl,\n )\n const lexiconAuthorityProfile =\n await LexiconAuthorityProfile.create(thirdPartyPds)\n\n const bsyncApiKey = 'bsync-api-key'\n const bsync = await TestBsync.create({\n apiKeys: [bsyncApiKey],\n dbUrl: dbPostgresUrl,\n dbSchema: `bsync_${dbPostgresSchema}`,\n })\n\n const bsky = await TestBsky.create({\n port: bskyPort,\n plcUrl: plc.url,\n pdsPort,\n bsyncApiKey,\n bsyncUrl: bsync.url,\n rolodexUrl: process.env.BSKY_ROLODEX_URL,\n rolodexIgnoreBadTls: true,\n repoProvider: `ws://localhost:${pdsPort}`,\n dbPostgresSchema: `appview_${dbPostgresSchema}`,\n dbPostgresUrl,\n redisHost,\n modServiceDid: ozoneServiceProfile.did,\n labelsFromIssuerDids: [ozoneServiceProfile.did, EXAMPLE_LABELER],\n // Using a static private key results in a static DID, which is useful for e2e tests with the social-app repo.\n privateKey:\n '3f916c70dc69e4c5e83877f013325b11ecac31742e6a42f5c4fb240d0703d9d5=',\n ...params.bsky,\n })\n bsync.ctx.dataplaneClients = [bsky.ctx.dataplane]\n\n const pds = await TestPds.create({\n port: pdsPort,\n didPlcUrl: plc.url,\n bskyAppViewUrl: bsky.url,\n bskyAppViewDid: bsky.ctx.cfg.serverDid,\n modServiceUrl: ozoneUrl,\n modServiceDid: ozoneServiceProfile.did,\n lexiconDidAuthority: lexiconAuthorityProfile.did,\n ...params.pds,\n })\n\n // mock before any events start flowing from pds so that we don't miss e.g. any handle resolutions.\n mockNetworkUtilities(pds, bsky)\n\n const ozone = await TestOzone.create({\n port: ozonePort,\n plcUrl: plc.url,\n signingKey: ozoneServiceProfile.key,\n serverDid: ozoneServiceProfile.did,\n dbPostgresSchema: `ozone_${dbPostgresSchema || 'db'}`,\n dbPostgresUrl,\n appviewUrl: bsky.url,\n appviewDid: bsky.ctx.cfg.serverDid,\n appviewPushEvents: true,\n pdsUrl: pds.url,\n pdsDid: pds.ctx.cfg.service.did,\n verifierDid: ozoneServiceProfile.did,\n verifierUrl: pds.url,\n verifierPassword: 'temp',\n ...params.ozone,\n })\n\n await ozoneServiceProfile.migrateTo(pds)\n await ozoneServiceProfile.createRecords()\n\n await lexiconAuthorityProfile.migrateTo(pds)\n await lexiconAuthorityProfile.createRecords()\n\n await ozone.addAdminDid(ozoneServiceProfile.did)\n await ozone.createPolicies()\n\n await thirdPartyPds.processAll()\n await pds.processAll()\n await ozone.processAll()\n await bsky.sub.processAll()\n await bsky.bsyncSub.processAll(await bsync.getStreamHeads())\n await thirdPartyPds.close()\n\n // Weird but if we do this before pds.processAll() somehow appview loses this user and tests in different parts fail because appview doesn't return this user in various contexts anymore\n const ozoneVerifierPassword =\n await ozoneServiceProfile.createAppPasswordForVerification()\n if (ozone.daemon.ctx.cfg.verifier) {\n ozone.daemon.ctx.cfg.verifier.password = ozoneVerifierPassword\n }\n\n let introspect: IntrospectServer | undefined = undefined\n if (params.introspect?.port) {\n introspect = await IntrospectServer.start(\n params.introspect.port,\n plc,\n pds,\n bsync,\n bsky,\n ozone,\n )\n }\n\n return new TestNetwork(plc, pds, bsync, bsky, ozone, introspect)\n }\n\n async processFullSubscription(timeout = 5000) {\n const sub = this.bsky.sub\n // If the subscription is not running, there is no point in\n // waiting for it to process events\n if (!sub.running) return\n const start = Date.now()\n const lastSeq = await this.pds.ctx.sequencer.curr()\n if (!lastSeq) return\n while (Date.now() - start < timeout) {\n await sub.processAll()\n const runnerCursor = await sub.getCursor()\n // if subscription claims to be done, ensure we are at the most recent cursor from PDS, else wait to process again\n // (the subscription may claim to be finished before the PDS has even emitted it's event)\n if (runnerCursor && runnerCursor >= lastSeq) {\n return\n }\n await wait(5)\n }\n throw new Error(`Sequence was not processed within ${timeout}ms`)\n }\n\n async processAll(timeout?: number) {\n await this.pds.processAll()\n await this.ozone.processAll()\n await this.bsky.sub.processAll()\n await this.bsky.bsyncSub.processAll(\n await this.bsync.getStreamHeads(),\n timeout,\n )\n await this.processFullSubscription(timeout)\n }\n\n async serviceHeaders(did: string, lxm: string, aud?: string) {\n const keypair = await this.pds.ctx.actorStore.keypair(did)\n const jwt = await createServiceJwt({\n iss: did,\n aud: aud ?? this.bsky.ctx.cfg.serverDid,\n lxm,\n keypair,\n })\n return { authorization: `Bearer ${jwt}` }\n }\n\n async adminHeaders({\n username = ADMIN_USERNAME,\n password = ADMIN_PASSWORD,\n }: {\n username?: string\n password?: string\n }) {\n return {\n authorization:\n 'Basic ' +\n uint8arrays.toString(\n uint8arrays.fromString(`${username}:${password}`, 'utf8'),\n 'base64pad',\n ),\n }\n }\n\n async close() {\n try {\n await this.processAll()\n } finally {\n await allFulfilled([\n ...this.feedGens.map(async (fg) => fg.close()),\n this.ozone.close(),\n this.bsky.close(),\n this.bsync.close(),\n this.pds.close(),\n this.plc.close(),\n this.introspect?.close(),\n ])\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.close()\n }\n}\n"]}
|
package/dist/ozone.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AtpAgent } from '@atproto/api';
|
|
2
2
|
import { type Keypair } from '@atproto/crypto';
|
|
3
|
+
import { Client, type DidString } from '@atproto/lex';
|
|
3
4
|
import * as ozone from '@atproto/ozone';
|
|
4
5
|
import { ModeratorClient } from './moderator-client.js';
|
|
5
6
|
import type { DidAndKey, OzoneConfig } from './types.js';
|
|
@@ -14,11 +15,13 @@ export declare class TestOzone {
|
|
|
14
15
|
constructor(url: string, port: number, server: ozone.OzoneService, daemon: ozone.OzoneDaemon, adminAccnt: DidAndKey, moderatorAccnt: DidAndKey, triageAccnt: DidAndKey);
|
|
15
16
|
static create(config: OzoneConfig): Promise<TestOzone>;
|
|
16
17
|
get ctx(): ozone.AppContext;
|
|
18
|
+
/** @deprecated use {@link getClient} instead */
|
|
17
19
|
getAgent(): AtpAgent;
|
|
20
|
+
getClient(): Client;
|
|
18
21
|
getModClient(): ModeratorClient;
|
|
19
|
-
addAdminDid(did:
|
|
20
|
-
addModeratorDid(did:
|
|
21
|
-
addTriageDid(did:
|
|
22
|
+
addAdminDid(did: DidString): Promise<void>;
|
|
23
|
+
addModeratorDid(did: DidString): Promise<void>;
|
|
24
|
+
addTriageDid(did: DidString): Promise<void>;
|
|
22
25
|
createPolicies(): Promise<void>;
|
|
23
26
|
modHeaders(lxm: string, role?: 'admin' | 'moderator' | 'triage'): Promise<{
|
|
24
27
|
authorization: string;
|
|
@@ -27,5 +30,5 @@ export declare class TestOzone {
|
|
|
27
30
|
close(): Promise<void>;
|
|
28
31
|
[Symbol.asyncDispose](): Promise<void>;
|
|
29
32
|
}
|
|
30
|
-
export declare const createOzoneDid: (plcUrl: string, keypair: Keypair) => Promise<
|
|
33
|
+
export declare const createOzoneDid: (plcUrl: string, keypair: Keypair) => Promise<DidString>;
|
|
31
34
|
//# sourceMappingURL=ozone.d.ts.map
|
package/dist/ozone.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ozone.d.ts","sourceRoot":"","sources":["../src/ozone.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,KAAK,OAAO,EAAoB,MAAM,iBAAiB,CAAA;AAChE,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAIvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxD,qBAAa,SAAS;IAEX,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,KAAK,CAAC,YAAY;IAC1B,MAAM,EAAE,KAAK,CAAC,WAAW;IACzB,UAAU,EAAE,SAAS;IACrB,cAAc,EAAE,SAAS;IACzB,WAAW,EAAE,SAAS;IAP/B,YACS,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,CAAC,YAAY,EAC1B,MAAM,EAAE,KAAK,CAAC,WAAW,EACzB,UAAU,EAAE,SAAS,EACrB,cAAc,EAAE,SAAS,EACzB,WAAW,EAAE,SAAS,EAC3B;IAEJ,OAAa,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CA4E3D;IAED,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,CAE1B;IAED,QAAQ,IAAI,QAAQ,CAInB;IAED,YAAY,oBAEX;IAEK,WAAW,CAAC,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"ozone.d.ts","sourceRoot":"","sources":["../src/ozone.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,KAAK,OAAO,EAAoB,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAIvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxD,qBAAa,SAAS;IAEX,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,KAAK,CAAC,YAAY;IAC1B,MAAM,EAAE,KAAK,CAAC,WAAW;IACzB,UAAU,EAAE,SAAS;IACrB,cAAc,EAAE,SAAS;IACzB,WAAW,EAAE,SAAS;IAP/B,YACS,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,CAAC,YAAY,EAC1B,MAAM,EAAE,KAAK,CAAC,WAAW,EACzB,UAAU,EAAE,SAAS,EACrB,cAAc,EAAE,SAAS,EACzB,WAAW,EAAE,SAAS,EAC3B;IAEJ,OAAa,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CA4E3D;IAED,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,CAE1B;IAED,gDAAgD;IAChD,QAAQ,IAAI,QAAQ,CAInB;IAED,SAAS,IAAI,MAAM,CAIlB;IAED,YAAY,oBAEX;IAEK,WAAW,CAAC,GAAG,EAAE,SAAS,iBAU/B;IAEK,eAAe,CAAC,GAAG,EAAE,SAAS,iBAUnC;IAEK,YAAY,CAAC,GAAG,EAAE,SAAS,iBAUhC;IAEK,cAAc,kBAsEnB;IAEK,UAAU,CACd,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,OAAO,GAAG,WAAW,GAAG,QAAsB;;OAerD;IAEK,UAAU,kBAGf;IAEK,KAAK,kBAMV;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF;AAED,eAAO,MAAM,cAAc,WACjB,MAAM,WACL,OAAO,KACf,OAAO,CAAC,SAAS,CAuBnB,CAAA"}
|
package/dist/ozone.js
CHANGED
|
@@ -2,6 +2,7 @@ import * as plc from '@did-plc/lib';
|
|
|
2
2
|
import * as ui8 from 'uint8arrays';
|
|
3
3
|
import { AtpAgent } from '@atproto/api';
|
|
4
4
|
import { Secp256k1Keypair } from '@atproto/crypto';
|
|
5
|
+
import { Client } from '@atproto/lex';
|
|
5
6
|
import * as ozone from '@atproto/ozone';
|
|
6
7
|
import { createServiceJwt } from '@atproto/xrpc-server';
|
|
7
8
|
import { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const.js';
|
|
@@ -88,11 +89,17 @@ export class TestOzone {
|
|
|
88
89
|
get ctx() {
|
|
89
90
|
return this.server.ctx;
|
|
90
91
|
}
|
|
92
|
+
/** @deprecated use {@link getClient} instead */
|
|
91
93
|
getAgent() {
|
|
92
94
|
const agent = new AtpAgent({ service: this.url });
|
|
93
95
|
agent.configureLabelers([EXAMPLE_LABELER]);
|
|
94
96
|
return agent;
|
|
95
97
|
}
|
|
98
|
+
getClient() {
|
|
99
|
+
return new Client(this.url, {
|
|
100
|
+
labelers: [EXAMPLE_LABELER],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
96
103
|
getModClient() {
|
|
97
104
|
return new ModeratorClient(this);
|
|
98
105
|
}
|
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 * as ui8 from 'uint8arrays'\nimport { AtpAgent } from '@atproto/api'\nimport { type Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport * as ozone from '@atproto/ozone'\nimport { createServiceJwt } from '@atproto/xrpc-server'\nimport { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const.js'\nimport getPort from './get-port.js'\nimport { ModeratorClient } from './moderator-client.js'\nimport type { DidAndKey, OzoneConfig } from './types.js'\nimport { createDidAndKey } from './util.js'\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 try {\n await this.server.destroy()\n } finally {\n await this.daemon.destroy()\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.close()\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 * as ui8 from 'uint8arrays'\nimport { AtpAgent } from '@atproto/api'\nimport { type Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { Client, type DidString } from '@atproto/lex'\nimport * as ozone from '@atproto/ozone'\nimport { createServiceJwt } from '@atproto/xrpc-server'\nimport { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const.js'\nimport getPort from './get-port.js'\nimport { ModeratorClient } from './moderator-client.js'\nimport type { DidAndKey, OzoneConfig } from './types.js'\nimport { createDidAndKey } from './util.js'\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 /** @deprecated use {@link getClient} instead */\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 return new Client(this.url, {\n labelers: [EXAMPLE_LABELER],\n })\n }\n\n getModClient() {\n return new ModeratorClient(this)\n }\n\n async addAdminDid(did: DidString) {\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: DidString) {\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: DidString) {\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 try {\n await this.server.destroy()\n } finally {\n await this.daemon.destroy()\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.close()\n }\n}\n\nexport const createOzoneDid = async (\n plcUrl: string,\n keypair: Keypair,\n): Promise<DidString> => {\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 as DidString\n}\n"]}
|
package/dist/pds.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { AtpAgent } from '@atproto/api';
|
|
2
|
-
import { Client } from '@atproto/lex';
|
|
2
|
+
import { Client, type UriString } from '@atproto/lex';
|
|
3
3
|
import { type AppContext, PDS } from '@atproto/pds';
|
|
4
4
|
import type { PdsConfig } from './types.js';
|
|
5
5
|
export declare class TestPds {
|
|
6
|
-
url:
|
|
6
|
+
url: UriString;
|
|
7
7
|
port: number;
|
|
8
8
|
server: PDS;
|
|
9
|
-
constructor(url:
|
|
9
|
+
constructor(url: UriString, port: number, server: PDS);
|
|
10
10
|
static create(config: PdsConfig): Promise<TestPds>;
|
|
11
11
|
get ctx(): AppContext;
|
|
12
12
|
getAgent(): AtpAgent;
|
package/dist/pds.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pds.d.ts","sourceRoot":"","sources":["../src/pds.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"pds.d.ts","sourceRoot":"","sources":["../src/pds.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,KAAK,UAAU,EAAE,GAAG,EAAyB,MAAM,cAAc,CAAA;AAG1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,qBAAa,OAAO;IAET,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,GAAG;IAHpB,YACS,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,GAAG,EAChB;IAEJ,OAAa,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAiDvD;IAED,IAAI,GAAG,IAAI,UAAU,CAEpB;IAED,QAAQ,IAAI,QAAQ,CAInB;IAED,SAAS,IAAI,MAAM,CAIlB;IAED,SAAS,IAAI,MAAM,CAQlB;IAED,gBAAgB;QAEZ,aAAa;MAEhB;IAED,YAAY,+BAEX;IAEK,UAAU,kBAEf;IAEK,KAAK,kBAEV;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF"}
|
package/dist/pds.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pds.js","sourceRoot":"","sources":["../src/pds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,MAAM,
|
|
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 * as ui8 from 'uint8arrays'\nimport { AtpAgent } from '@atproto/api'\nimport { Secp256k1Keypair, randomStr } from '@atproto/crypto'\nimport { Client, type UriString } from '@atproto/lex'\nimport { type AppContext, PDS, createSecretKeyObject } from '@atproto/pds'\nimport { ADMIN_PASSWORD, EXAMPLE_LABELER, JWT_SECRET } from './const.js'\nimport getPort from './get-port.js'\nimport type { PdsConfig } from './types.js'\n\nexport class TestPds {\n constructor(\n public url: UriString,\n public port: number,\n public server: 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: UriString = `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 server = await PDS.fromEnv({\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 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\n await server.start()\n\n return new TestPds(url, port, server)\n }\n\n get ctx(): 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 async [Symbol.asyncDispose]() {\n await this.close()\n }\n}\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type * as bsky from '@atproto/bsky';
|
|
2
2
|
import type * as bsync from '@atproto/bsync';
|
|
3
3
|
import type { ExportableKeypair, Keypair } from '@atproto/crypto';
|
|
4
|
+
import type { DidString } from '@atproto/lex';
|
|
4
5
|
import type * as ozone from '@atproto/ozone';
|
|
5
6
|
import type * as pds from '@atproto/pds';
|
|
6
7
|
export type IntrospectConfig = {
|
|
@@ -47,7 +48,7 @@ export type TestServerParams = {
|
|
|
47
48
|
introspect: Partial<IntrospectConfig>;
|
|
48
49
|
};
|
|
49
50
|
export type DidAndKey = {
|
|
50
|
-
did:
|
|
51
|
+
did: DidString;
|
|
51
52
|
key: Keypair;
|
|
52
53
|
};
|
|
53
54
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,eAAe,CAAA;AAC1C,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAA;AAExC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG;IAC3D,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,cAAc,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IACvB,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IACvB,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IACzB,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,eAAe,CAAA;AAC1C,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAA;AAExC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG;IAC3D,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,cAAc,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IACvB,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IACvB,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IACzB,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,SAAS,CAAA;IACd,GAAG,EAAE,OAAO,CAAA;CACb,CAAA"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type * as bsky from '@atproto/bsky'\nimport type * as bsync from '@atproto/bsync'\nimport type { ExportableKeypair, Keypair } from '@atproto/crypto'\nimport type * as ozone from '@atproto/ozone'\nimport type * as pds from '@atproto/pds'\n\nexport type IntrospectConfig = {\n port?: number\n}\n\nexport type PlcConfig = {\n port?: number\n version?: string\n}\n\nexport type PdsConfig = Partial<pds.ServerEnvironment> & {\n didPlcUrl: string\n migration?: string\n}\n\nexport type BskyConfig = Partial<bsky.ServerConfig> & {\n bsyncUrl: string\n plcUrl: string\n repoProvider: string\n dbPostgresUrl: string\n dbPostgresSchema: string\n redisHost: string\n pdsPort: number\n migration?: string\n privateKey?: string\n}\n\nexport type BsyncConfig = Partial<bsync.ServerEnvironment> & {\n dbUrl: string\n}\n\nexport type OzoneConfig = Partial<ozone.OzoneEnvironment> & {\n plcUrl: string\n appviewUrl: string\n appviewDid: string\n dbPostgresUrl: string\n migration?: string\n signingKey?: ExportableKeypair\n imgInvalidator?: ozone.ImageInvalidator\n}\n\nexport type TestServerParams = {\n dbPostgresUrl: string\n dbPostgresSchema: string\n pds: Partial<PdsConfig>\n plc: Partial<PlcConfig>\n bsky: Partial<BskyConfig>\n ozone: Partial<OzoneConfig>\n introspect: Partial<IntrospectConfig>\n}\n\nexport type DidAndKey = {\n did:
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type * as bsky from '@atproto/bsky'\nimport type * as bsync from '@atproto/bsync'\nimport type { ExportableKeypair, Keypair } from '@atproto/crypto'\nimport type { DidString } from '@atproto/lex'\nimport type * as ozone from '@atproto/ozone'\nimport type * as pds from '@atproto/pds'\n\nexport type IntrospectConfig = {\n port?: number\n}\n\nexport type PlcConfig = {\n port?: number\n version?: string\n}\n\nexport type PdsConfig = Partial<pds.ServerEnvironment> & {\n didPlcUrl: string\n migration?: string\n}\n\nexport type BskyConfig = Partial<bsky.ServerConfig> & {\n bsyncUrl: string\n plcUrl: string\n repoProvider: string\n dbPostgresUrl: string\n dbPostgresSchema: string\n redisHost: string\n pdsPort: number\n migration?: string\n privateKey?: string\n}\n\nexport type BsyncConfig = Partial<bsync.ServerEnvironment> & {\n dbUrl: string\n}\n\nexport type OzoneConfig = Partial<ozone.OzoneEnvironment> & {\n plcUrl: string\n appviewUrl: string\n appviewDid: string\n dbPostgresUrl: string\n migration?: string\n signingKey?: ExportableKeypair\n imgInvalidator?: ozone.ImageInvalidator\n}\n\nexport type TestServerParams = {\n dbPostgresUrl: string\n dbPostgresSchema: string\n pds: Partial<PdsConfig>\n plc: Partial<PlcConfig>\n bsky: Partial<BskyConfig>\n ozone: Partial<OzoneConfig>\n introspect: Partial<IntrospectConfig>\n}\n\nexport type DidAndKey = {\n did: DidString\n key: Keypair\n}\n"]}
|
package/dist/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,eAAO,MAAM,oBAAoB,QAAS,OAAO,SAAS,QAAQ,SAMjE,CAAA;AAED,eAAO,MAAM,aAAa,eACZ,UAAU,OACjB,OAAO,qBAEM,MAAM,SAyCzB,CAAA;AAED,eAAO,MAAM,UAAU,QAAS,OAAO,SAQtC,CAAA;AAGD,eAAO,MAAM,YAAY,cAOxB,CAAA;AAED,eAAO,MAAM,eAAe,SAAgB;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACZ,KAAG,OAAO,CAAC,SAAS,CAcpB,CAAA"}
|
package/dist/util.js
CHANGED
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import * as plc from '@did-plc/lib'\nimport { request } from 'undici'\nimport { Secp256k1Keypair } from '@atproto/crypto'\nimport type { IdResolver } from '@atproto/identity'\nimport type { DidString } from '@atproto/lex'\nimport type { TestBsky } from './bsky.js'\nimport type { TestPds } from './pds.js'\nimport type { DidAndKey } from './types.js'\n\nexport const mockNetworkUtilities = (pds: TestPds, bsky?: TestBsky) => {\n mockResolvers(pds.ctx.idResolver, pds)\n if (bsky) {\n mockResolvers(bsky.ctx.idResolver, pds)\n mockResolvers(bsky.dataplane.idResolver, pds)\n }\n}\n\nexport const mockResolvers = (\n idResolver: IdResolver,\n pds: TestPds,\n // handles resolve against the pds by default, but may point elsewhere e.g. an entryway\n handleResolveUrl: string = pds.url,\n) => {\n // Map pds public url to its local url when resolving from plc\n const origResolveDid = idResolver.did.resolveNoCache\n idResolver.did.resolveNoCache = async (did: string) => {\n const result = await (origResolveDid.call(\n idResolver.did,\n did,\n ) as ReturnType<typeof origResolveDid>)\n const service = result?.service?.find((svc) => svc.id === '#atproto_pds')\n if (typeof service?.serviceEndpoint === 'string') {\n service.serviceEndpoint = service.serviceEndpoint.replace(\n pds.ctx.cfg.service.publicUrl,\n `http://localhost:${pds.port}`,\n )\n }\n return result\n }\n\n const origResolveHandleDns = idResolver.handle.resolveDns\n idResolver.handle.resolve = async (handle: string) => {\n const isPdsHandle = pds.ctx.cfg.identity.serviceHandleDomains.some(\n (domain) => handle.endsWith(domain),\n )\n if (!isPdsHandle) {\n return origResolveHandleDns.call(idResolver.handle, handle)\n }\n\n const url = new URL(`/.well-known/atproto-did`, handleResolveUrl)\n try {\n const res = await request(url, { headers: { host: handle } })\n if (res.statusCode !== 200) {\n await res.body.dump()\n return undefined\n }\n\n return res.body.text()\n } catch (err) {\n return undefined\n }\n }\n}\n\nexport const mockMailer = (pds: TestPds) => {\n const mailer = pds.ctx.mailer\n const _origSendMail = mailer.transporter.sendMail\n mailer.transporter.sendMail = async (opts) => {\n const result = await _origSendMail.call(mailer.transporter, opts)\n console.log(`✉️ Email: ${JSON.stringify(result, null, 2)}`)\n return result\n }\n}\n\nconst usedLockIds = new Set()\nexport const uniqueLockId = () => {\n let lockId: number\n do {\n lockId = 1000 + Math.ceil(1000 * Math.random())\n } while (usedLockIds.has(lockId))\n usedLockIds.add(lockId)\n return lockId\n}\n\nexport const createDidAndKey = async (opts: {\n plcUrl: string\n handle: string\n pds: string\n}): Promise<DidAndKey> => {\n const { plcUrl, handle, pds } = opts\n const key = await Secp256k1Keypair.create({ exportable: true })\n const did = await new plc.Client(plcUrl).createDid({\n signingKey: key.did(),\n rotationKeys: [key.did()],\n handle,\n pds,\n signer: key,\n })\n return {\n key,\n did: did as DidString,\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/dev-env",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Local development environment helper for atproto development",
|
|
6
6
|
"keywords": [
|
|
@@ -40,19 +40,19 @@
|
|
|
40
40
|
"multiformats": "^13.0.0",
|
|
41
41
|
"uint8arrays": "^5.0.0",
|
|
42
42
|
"undici": "^8.5.0",
|
|
43
|
-
"@atproto/api": "^0.20.
|
|
44
|
-
"@atproto/bsky": "^0.0.
|
|
45
|
-
"@atproto/
|
|
46
|
-
"@atproto/
|
|
47
|
-
"@atproto/identity": "^0.5.
|
|
48
|
-
"@atproto/
|
|
49
|
-
"@atproto/
|
|
50
|
-
"@atproto/
|
|
51
|
-
"@atproto/
|
|
52
|
-
"@atproto/pds": "^0.5.
|
|
53
|
-
"@atproto/syntax": "^0.7.
|
|
54
|
-
"@atproto/
|
|
55
|
-
"@atproto/
|
|
43
|
+
"@atproto/api": "^0.20.44",
|
|
44
|
+
"@atproto/bsky": "^0.0.280",
|
|
45
|
+
"@atproto/crypto": "^0.5.5",
|
|
46
|
+
"@atproto/bsync": "^0.0.44",
|
|
47
|
+
"@atproto/identity": "^0.5.13",
|
|
48
|
+
"@atproto/lexicon": "^0.7.14",
|
|
49
|
+
"@atproto/ozone": "^0.4.2",
|
|
50
|
+
"@atproto/sync": "^0.4.10",
|
|
51
|
+
"@atproto/lex": "^0.3.11",
|
|
52
|
+
"@atproto/pds": "^0.5.34",
|
|
53
|
+
"@atproto/syntax": "^0.7.6",
|
|
54
|
+
"@atproto/common-web": "^0.5.12",
|
|
55
|
+
"@atproto/xrpc-server": "^0.13.1"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/express": "^4.17.13"
|
package/src/bsky.ts
CHANGED
|
@@ -2,8 +2,9 @@ import { Client as PlcClient } from '@did-plc/lib'
|
|
|
2
2
|
import * as ui8 from 'uint8arrays'
|
|
3
3
|
import { AtpAgent } from '@atproto/api'
|
|
4
4
|
import * as bsky from '@atproto/bsky'
|
|
5
|
+
import { SECOND } from '@atproto/common-web'
|
|
5
6
|
import { Secp256k1Keypair } from '@atproto/crypto'
|
|
6
|
-
import { Client } from '@atproto/lex'
|
|
7
|
+
import { Client, type UriString } from '@atproto/lex'
|
|
7
8
|
import type { DidString } from '@atproto/syntax'
|
|
8
9
|
import { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const.js'
|
|
9
10
|
import getPort from './get-port.js'
|
|
@@ -12,14 +13,14 @@ export * from '@atproto/bsky'
|
|
|
12
13
|
|
|
13
14
|
export class TestBsky {
|
|
14
15
|
constructor(
|
|
15
|
-
public url:
|
|
16
|
+
public url: UriString,
|
|
16
17
|
public port: number,
|
|
17
18
|
public db: bsky.Database,
|
|
18
19
|
public server: bsky.BskyAppView,
|
|
19
20
|
public dataplane: bsky.DataPlaneServer,
|
|
20
21
|
public bsyncSub: bsky.BsyncSubscription,
|
|
21
22
|
public sub: bsky.RepoSubscription,
|
|
22
|
-
public serverDid:
|
|
23
|
+
public serverDid: DidString,
|
|
23
24
|
) {}
|
|
24
25
|
|
|
25
26
|
static async create(cfg: BskyConfig): Promise<TestBsky> {
|
|
@@ -29,7 +30,7 @@ export class TestBsky {
|
|
|
29
30
|
const plcClient = new PlcClient(cfg.plcUrl)
|
|
30
31
|
|
|
31
32
|
const port = cfg.port || (await getPort())
|
|
32
|
-
const url = `http://localhost:${port}`
|
|
33
|
+
const url: UriString = `http://localhost:${port}`
|
|
33
34
|
const serverDid = (await plcClient.createDid({
|
|
34
35
|
signingKey: serviceKeypair.did(),
|
|
35
36
|
rotationKeys: [serviceKeypair.did()],
|
|
@@ -64,6 +65,8 @@ export class TestBsky {
|
|
|
64
65
|
db,
|
|
65
66
|
dataplanePort,
|
|
66
67
|
cfg.plcUrl,
|
|
68
|
+
// Resolves against an in-process PLC on localhost.
|
|
69
|
+
globalThis.fetch,
|
|
67
70
|
)
|
|
68
71
|
|
|
69
72
|
const config = new bsky.ServerConfig({
|
|
@@ -90,6 +93,7 @@ export class TestBsky {
|
|
|
90
93
|
visibilityTagRankPrefix: '',
|
|
91
94
|
debugFieldAllowedDids: new Set(),
|
|
92
95
|
draftsLimit: 500,
|
|
96
|
+
feedGenSkeletonTimeout: 5 * SECOND,
|
|
93
97
|
...cfg,
|
|
94
98
|
adminPasswords: [ADMIN_PASSWORD],
|
|
95
99
|
etcdHosts: [],
|
package/src/network.ts
CHANGED
|
@@ -91,6 +91,7 @@ export class TestNetwork extends TestNetworkNoAppView {
|
|
|
91
91
|
'3f916c70dc69e4c5e83877f013325b11ecac31742e6a42f5c4fb240d0703d9d5=',
|
|
92
92
|
...params.bsky,
|
|
93
93
|
})
|
|
94
|
+
bsync.ctx.dataplaneClients = [bsky.ctx.dataplane]
|
|
94
95
|
|
|
95
96
|
const pds = await TestPds.create({
|
|
96
97
|
port: pdsPort,
|
package/src/ozone.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as plc from '@did-plc/lib'
|
|
|
2
2
|
import * as ui8 from 'uint8arrays'
|
|
3
3
|
import { AtpAgent } from '@atproto/api'
|
|
4
4
|
import { type Keypair, Secp256k1Keypair } from '@atproto/crypto'
|
|
5
|
+
import { Client, type DidString } from '@atproto/lex'
|
|
5
6
|
import * as ozone from '@atproto/ozone'
|
|
6
7
|
import { createServiceJwt } from '@atproto/xrpc-server'
|
|
7
8
|
import { ADMIN_PASSWORD, EXAMPLE_LABELER } from './const.js'
|
|
@@ -103,17 +104,24 @@ export class TestOzone {
|
|
|
103
104
|
return this.server.ctx
|
|
104
105
|
}
|
|
105
106
|
|
|
107
|
+
/** @deprecated use {@link getClient} instead */
|
|
106
108
|
getAgent(): AtpAgent {
|
|
107
109
|
const agent = new AtpAgent({ service: this.url })
|
|
108
110
|
agent.configureLabelers([EXAMPLE_LABELER])
|
|
109
111
|
return agent
|
|
110
112
|
}
|
|
111
113
|
|
|
114
|
+
getClient(): Client {
|
|
115
|
+
return new Client(this.url, {
|
|
116
|
+
labelers: [EXAMPLE_LABELER],
|
|
117
|
+
})
|
|
118
|
+
}
|
|
119
|
+
|
|
112
120
|
getModClient() {
|
|
113
121
|
return new ModeratorClient(this)
|
|
114
122
|
}
|
|
115
123
|
|
|
116
|
-
async addAdminDid(did:
|
|
124
|
+
async addAdminDid(did: DidString) {
|
|
117
125
|
await this.ctx.teamService(this.ctx.db).create({
|
|
118
126
|
did,
|
|
119
127
|
disabled: false,
|
|
@@ -125,7 +133,7 @@ export class TestOzone {
|
|
|
125
133
|
this.ctx.cfg.access.admins.push(did)
|
|
126
134
|
}
|
|
127
135
|
|
|
128
|
-
async addModeratorDid(did:
|
|
136
|
+
async addModeratorDid(did: DidString) {
|
|
129
137
|
await this.ctx.teamService(this.ctx.db).create({
|
|
130
138
|
did,
|
|
131
139
|
disabled: false,
|
|
@@ -137,7 +145,7 @@ export class TestOzone {
|
|
|
137
145
|
this.ctx.cfg.access.moderators.push(did)
|
|
138
146
|
}
|
|
139
147
|
|
|
140
|
-
async addTriageDid(did:
|
|
148
|
+
async addTriageDid(did: DidString) {
|
|
141
149
|
await this.ctx.teamService(this.ctx.db).create({
|
|
142
150
|
did,
|
|
143
151
|
disabled: false,
|
|
@@ -261,7 +269,7 @@ export class TestOzone {
|
|
|
261
269
|
export const createOzoneDid = async (
|
|
262
270
|
plcUrl: string,
|
|
263
271
|
keypair: Keypair,
|
|
264
|
-
): Promise<
|
|
272
|
+
): Promise<DidString> => {
|
|
265
273
|
const plcClient = new plc.Client(plcUrl)
|
|
266
274
|
const plcOp = await plc.signOperation(
|
|
267
275
|
{
|
|
@@ -283,5 +291,5 @@ export const createOzoneDid = async (
|
|
|
283
291
|
)
|
|
284
292
|
const did = await plc.didForCreateOp(plcOp)
|
|
285
293
|
await plcClient.sendOperation(did, plcOp)
|
|
286
|
-
return did
|
|
294
|
+
return did as DidString
|
|
287
295
|
}
|
package/src/pds.ts
CHANGED
|
@@ -4,7 +4,7 @@ import path from 'node:path'
|
|
|
4
4
|
import * as ui8 from 'uint8arrays'
|
|
5
5
|
import { AtpAgent } from '@atproto/api'
|
|
6
6
|
import { Secp256k1Keypair, randomStr } from '@atproto/crypto'
|
|
7
|
-
import { Client } from '@atproto/lex'
|
|
7
|
+
import { Client, type UriString } from '@atproto/lex'
|
|
8
8
|
import { type AppContext, PDS, createSecretKeyObject } from '@atproto/pds'
|
|
9
9
|
import { ADMIN_PASSWORD, EXAMPLE_LABELER, JWT_SECRET } from './const.js'
|
|
10
10
|
import getPort from './get-port.js'
|
|
@@ -12,7 +12,7 @@ import type { PdsConfig } from './types.js'
|
|
|
12
12
|
|
|
13
13
|
export class TestPds {
|
|
14
14
|
constructor(
|
|
15
|
-
public url:
|
|
15
|
+
public url: UriString,
|
|
16
16
|
public port: number,
|
|
17
17
|
public server: PDS,
|
|
18
18
|
) {}
|
|
@@ -23,7 +23,7 @@ export class TestPds {
|
|
|
23
23
|
const recoveryKey = (await Secp256k1Keypair.create()).did()
|
|
24
24
|
|
|
25
25
|
const port = config.port || (await getPort())
|
|
26
|
-
const url = `http://localhost:${port}`
|
|
26
|
+
const url: UriString = `http://localhost:${port}`
|
|
27
27
|
|
|
28
28
|
const blobstoreLoc = path.join(os.tmpdir(), randomStr(8, 'base32'))
|
|
29
29
|
const dataDirectory = path.join(os.tmpdir(), randomStr(8, 'base32'))
|
package/src/types.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type * as bsky from '@atproto/bsky'
|
|
2
2
|
import type * as bsync from '@atproto/bsync'
|
|
3
3
|
import type { ExportableKeypair, Keypair } from '@atproto/crypto'
|
|
4
|
+
import type { DidString } from '@atproto/lex'
|
|
4
5
|
import type * as ozone from '@atproto/ozone'
|
|
5
6
|
import type * as pds from '@atproto/pds'
|
|
6
7
|
|
|
@@ -55,6 +56,6 @@ export type TestServerParams = {
|
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
export type DidAndKey = {
|
|
58
|
-
did:
|
|
59
|
+
did: DidString
|
|
59
60
|
key: Keypair
|
|
60
61
|
}
|
package/src/util.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as plc from '@did-plc/lib'
|
|
|
2
2
|
import { request } from 'undici'
|
|
3
3
|
import { Secp256k1Keypair } from '@atproto/crypto'
|
|
4
4
|
import type { IdResolver } from '@atproto/identity'
|
|
5
|
+
import type { DidString } from '@atproto/lex'
|
|
5
6
|
import type { TestBsky } from './bsky.js'
|
|
6
7
|
import type { TestPds } from './pds.js'
|
|
7
8
|
import type { DidAndKey } from './types.js'
|
|
@@ -97,6 +98,6 @@ export const createDidAndKey = async (opts: {
|
|
|
97
98
|
})
|
|
98
99
|
return {
|
|
99
100
|
key,
|
|
100
|
-
did,
|
|
101
|
+
did: did as DidString,
|
|
101
102
|
}
|
|
102
103
|
}
|