@atcute/did-plc 0.2.0 → 0.3.1

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/README.md CHANGED
@@ -1,15 +1,93 @@
1
1
  # @atcute/did-plc
2
2
 
3
- validations, type definitions and schemas for did:plc operations
3
+ validate, sign, and interact with did:plc operations.
4
+
5
+ ```sh
6
+ npm install @atcute/did-plc
7
+ ```
8
+
9
+ did:plc is a self-certifying DID method where the audit log serves as the source of truth. this
10
+ package validates that operations are properly signed and chained, and provides utilities for
11
+ creating and submitting new operations.
12
+
13
+ ## usage
14
+
15
+ ### using the client
16
+
17
+ ```ts
18
+ import { PlcClient } from '@atcute/did-plc';
19
+
20
+ const client = new PlcClient();
21
+
22
+ // fetch DID document
23
+ const doc = await client.getDocument('did:plc:ragtjsm2j2vknwkz3zp4oxrd');
24
+
25
+ // fetch current identity state
26
+ const state = await client.getState('did:plc:ragtjsm2j2vknwkz3zp4oxrd');
27
+
28
+ // fetch operation log
29
+ const log = await client.getOperationLog('did:plc:ragtjsm2j2vknwkz3zp4oxrd');
30
+
31
+ // fetch last operation
32
+ const lastOp = await client.getLastOperation('did:plc:ragtjsm2j2vknwkz3zp4oxrd');
33
+
34
+ // submit a signed operation
35
+ await client.submitOperation('did:plc:ragtjsm2j2vknwkz3zp4oxrd', signedOperation);
36
+ ```
37
+
38
+ ### signing operations
4
39
 
5
40
  ```ts
6
- import { defs, validateIndexedOperationLog } from '@atcute/did-plc';
41
+ import { signOperation, signTombstone, deriveDidFromGenesisOp } from '@atcute/did-plc';
42
+
43
+ // sign an unsigned operation
44
+ const signedOp = await signOperation(unsignedOp, rotationKey);
7
45
 
8
- const did = `did:plc:ragtjsm2j2vknwkz3zp4oxrd`;
46
+ // sign a tombstone
47
+ const signedTombstone = await signTombstone(unsignedTombstone, rotationKey);
48
+
49
+ // derive did:plc from genesis operation
50
+ const did = await deriveDidFromGenesisOp(signedGenesisOp);
51
+ ```
52
+
53
+ ### validating audit logs
54
+
55
+ ```ts
56
+ import { defs, processIndexedEntryLog } from '@atcute/did-plc';
57
+
58
+ const did = 'did:plc:ragtjsm2j2vknwkz3zp4oxrd';
9
59
 
10
60
  const response = await fetch(`https://plc.directory/${did}/log/audit`);
11
61
  const json = await response.json();
12
62
 
13
- const logs = defs.indexedOperationLog.parse(json);
14
- await validateIndexedOperationLog(did, logs);
63
+ const logs = defs.indexedEntryLog.parse(json);
64
+ const { canonical, nullified } = await processIndexedEntryLog(did, logs);
65
+ ```
66
+
67
+ ### validating new operations
68
+
69
+ before submitting a new operation to plc.directory:
70
+
71
+ ```ts
72
+ import { validateIncomingOp } from '@atcute/did-plc';
73
+
74
+ // throws if operation exceeds size limits or has invalid structure
75
+ validateIncomingOp(operation);
76
+ ```
77
+
78
+ ### checking dispute windows
79
+
80
+ ```ts
81
+ import { isDisputePeriodActive, getDisputeCandidates } from '@atcute/did-plc';
82
+
83
+ // assuming `canonical` from processIndexedEntryLog result above
84
+
85
+ // find operations that a rotation key can dispute
86
+ const candidates = getDisputeCandidates(canonical, 'did:key:z...');
87
+
88
+ // check if a specific operation can still be disputed (72-hour window)
89
+ const entry = canonical.at(-1);
90
+ if (entry && isDisputePeriodActive(entry)) {
91
+ // entry is still within the dispute window
92
+ }
15
93
  ```
@@ -0,0 +1,86 @@
1
+ import type { DidDocument } from '@atcute/identity';
2
+ import * as t from './types.js';
3
+ export interface PlcErrorBody {
4
+ message: string;
5
+ }
6
+ /**
7
+ * error thrown when the plc server returns a non-ok response
8
+ */
9
+ export declare class PlcClientError extends Error {
10
+ status: number;
11
+ body: PlcErrorBody | null;
12
+ readonly name = "PlcClientError";
13
+ constructor(status: number, body: PlcErrorBody | null, message: string);
14
+ /**
15
+ * creates a PlcClientError from a failed fetch response
16
+ * @param response the failed response
17
+ * @returns the error with parsed body if available
18
+ */
19
+ static fromResponse(response: Response): Promise<PlcClientError>;
20
+ }
21
+ export interface PlcClientOptions {
22
+ /** plc directory URL, defaults to https://plc.directory */
23
+ serviceUrl?: string;
24
+ /** custom fetch function */
25
+ fetch?: typeof globalThis.fetch;
26
+ }
27
+ export interface PlcRequestOptions {
28
+ signal?: AbortSignal;
29
+ }
30
+ /**
31
+ * client for interacting with plc.directory
32
+ */
33
+ export declare class PlcClient {
34
+ #private;
35
+ readonly serviceUrl: string;
36
+ constructor({ serviceUrl, fetch: fetchFn }?: PlcClientOptions);
37
+ /**
38
+ * fetches the DID document for a did:plc
39
+ * @param did the did:plc identifier
40
+ * @param options request options
41
+ * @returns the DID document
42
+ */
43
+ getDocument(did: t.DidPlcString, options?: PlcRequestOptions): Promise<DidDocument>;
44
+ /**
45
+ * fetches the current identity state for a did:plc
46
+ * @param did the did:plc identifier
47
+ * @param options request options
48
+ * @returns the current plc state
49
+ */
50
+ getState(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.PlcState>;
51
+ /**
52
+ * fetches the operation log for a did:plc
53
+ * @param did the did:plc identifier
54
+ * @param options request options
55
+ * @returns the operation log
56
+ */
57
+ getOperationLog(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.OperationLog>;
58
+ /**
59
+ * fetches the auditable log for a did:plc (includes CIDs and timestamps)
60
+ * @param did the did:plc identifier
61
+ * @param options request options
62
+ * @returns the indexed entry log
63
+ */
64
+ getAuditLog(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.IndexedEntryLog>;
65
+ /**
66
+ * fetches the last operation for a did:plc
67
+ * @param did the did:plc identifier
68
+ * @param options request options
69
+ * @returns the last operation or tombstone
70
+ */
71
+ getLastOperation(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.CompatibleOperationOrTombstone>;
72
+ /**
73
+ * submits a signed operation to plc.directory
74
+ * @param did the did:plc identifier
75
+ * @param operation the signed operation to submit
76
+ * @param options request options
77
+ */
78
+ submitOperation(did: t.DidPlcString, operation: t.OperationOrTombstone, options?: PlcRequestOptions): Promise<void>;
79
+ /**
80
+ * checks if the plc directory is reachable
81
+ * @param options request options
82
+ * @returns true if reachable
83
+ */
84
+ ping(options?: PlcRequestOptions): Promise<boolean>;
85
+ }
86
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKpD,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAIhC,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAIhC,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,YAAY,GAAG,IAAI;IAJjC,SAAkB,IAAI,oBAAoB;IAE1C,YACQ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,GAAG,IAAI,EAChC,OAAO,EAAE,MAAM,EAGf;IAED;;;;OAIG;IACH,OAAa,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAkBrE;CACD;AAuCD,MAAM,WAAW,gBAAgB;IAChC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,SAAS;;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAG5B,YAAY,EAAE,UAAoC,EAAE,KAAK,EAAE,OAAe,EAAE,GAAE,gBAAqB,EAGlG;IAED;;;;;OAKG;IACG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAUxF;IAED;;;;;OAKG;IACG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAUpF;IAED;;;;;OAKG;IACG,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAU/F;IAED;;;;;OAKG;IACG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAU9F;IAED;;;;;OAKG;IACG,gBAAgB,CACrB,GAAG,EAAE,CAAC,CAAC,YAAY,EACnB,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAU3C;IAED;;;;;OAKG;IACG,eAAe,CACpB,GAAG,EAAE,CAAC,CAAC,YAAY,EACnB,SAAS,EAAE,CAAC,CAAC,oBAAoB,EACjC,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAaf;IAED;;;;OAIG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYxD;CACD"}
package/dist/client.js ADDED
@@ -0,0 +1,173 @@
1
+ import { defs as identityDefs } from '@atcute/identity';
2
+ import { parseResponseAsJson, pipe, validateJsonWith } from '@atcute/util-fetch';
3
+ import * as defs from './typedefs.js';
4
+ import * as t from './types.js';
5
+ const MAX_RESPONSE_SIZE = 64 * 1024;
6
+ /**
7
+ * error thrown when the plc server returns a non-ok response
8
+ */
9
+ export class PlcClientError extends Error {
10
+ status;
11
+ body;
12
+ name = 'PlcClientError';
13
+ constructor(status, body, message) {
14
+ super(message);
15
+ this.status = status;
16
+ this.body = body;
17
+ }
18
+ /**
19
+ * creates a PlcClientError from a failed fetch response
20
+ * @param response the failed response
21
+ * @returns the error with parsed body if available
22
+ */
23
+ static async fromResponse(response) {
24
+ const status = response.status;
25
+ let body = null;
26
+ let message = `got http ${status}`;
27
+ try {
28
+ const text = await response.text();
29
+ const json = JSON.parse(text);
30
+ if (typeof json.message === 'string') {
31
+ body = { message: json.message };
32
+ message = json.message;
33
+ }
34
+ }
35
+ catch {
36
+ // failed to parse response body, use default message
37
+ }
38
+ return new PlcClientError(status, body, message);
39
+ }
40
+ }
41
+ const assertResponseOk = async (response) => {
42
+ if (response.ok) {
43
+ return response;
44
+ }
45
+ throw await PlcClientError.fromResponse(response);
46
+ };
47
+ const handleDocument = pipe(assertResponseOk, parseResponseAsJson(/^application\/(did\+ld\+)?json$/, MAX_RESPONSE_SIZE), validateJsonWith(identityDefs.didDocument, { mode: 'passthrough' }));
48
+ const handlePlcState = pipe(assertResponseOk, parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE), validateJsonWith(defs.plcState, { mode: 'passthrough' }));
49
+ const handleOperationLog = pipe(assertResponseOk, parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE), validateJsonWith(defs.operationLog, { mode: 'passthrough' }));
50
+ const handleIndexedEntryLog = pipe(assertResponseOk, parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE), validateJsonWith(defs.indexedEntryLog, { mode: 'passthrough' }));
51
+ const handleLastOperation = pipe(assertResponseOk, parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE), validateJsonWith(defs.compatibleOperationOrTombstone, { mode: 'passthrough' }));
52
+ /**
53
+ * client for interacting with plc.directory
54
+ */
55
+ export class PlcClient {
56
+ serviceUrl;
57
+ #fetch;
58
+ constructor({ serviceUrl = 'https://plc.directory', fetch: fetchFn = fetch } = {}) {
59
+ this.serviceUrl = serviceUrl;
60
+ this.#fetch = fetchFn;
61
+ }
62
+ /**
63
+ * fetches the DID document for a did:plc
64
+ * @param did the did:plc identifier
65
+ * @param options request options
66
+ * @returns the DID document
67
+ */
68
+ async getDocument(did, options) {
69
+ const url = new URL(`/${encodeURIComponent(did)}`, this.serviceUrl);
70
+ const response = await (0, this.#fetch)(url, {
71
+ signal: options?.signal,
72
+ headers: { accept: 'application/did+ld+json,application/json' },
73
+ });
74
+ const { json } = await handleDocument(response);
75
+ return json;
76
+ }
77
+ /**
78
+ * fetches the current identity state for a did:plc
79
+ * @param did the did:plc identifier
80
+ * @param options request options
81
+ * @returns the current plc state
82
+ */
83
+ async getState(did, options) {
84
+ const url = new URL(`/${encodeURIComponent(did)}/data`, this.serviceUrl);
85
+ const response = await (0, this.#fetch)(url, {
86
+ signal: options?.signal,
87
+ headers: { accept: 'application/json' },
88
+ });
89
+ const { json } = await handlePlcState(response);
90
+ return json;
91
+ }
92
+ /**
93
+ * fetches the operation log for a did:plc
94
+ * @param did the did:plc identifier
95
+ * @param options request options
96
+ * @returns the operation log
97
+ */
98
+ async getOperationLog(did, options) {
99
+ const url = new URL(`/${encodeURIComponent(did)}/log`, this.serviceUrl);
100
+ const response = await (0, this.#fetch)(url, {
101
+ signal: options?.signal,
102
+ headers: { accept: 'application/json' },
103
+ });
104
+ const { json } = await handleOperationLog(response);
105
+ return json;
106
+ }
107
+ /**
108
+ * fetches the auditable log for a did:plc (includes CIDs and timestamps)
109
+ * @param did the did:plc identifier
110
+ * @param options request options
111
+ * @returns the indexed entry log
112
+ */
113
+ async getAuditLog(did, options) {
114
+ const url = new URL(`/${encodeURIComponent(did)}/log/audit`, this.serviceUrl);
115
+ const response = await (0, this.#fetch)(url, {
116
+ signal: options?.signal,
117
+ headers: { accept: 'application/json' },
118
+ });
119
+ const { json } = await handleIndexedEntryLog(response);
120
+ return json;
121
+ }
122
+ /**
123
+ * fetches the last operation for a did:plc
124
+ * @param did the did:plc identifier
125
+ * @param options request options
126
+ * @returns the last operation or tombstone
127
+ */
128
+ async getLastOperation(did, options) {
129
+ const url = new URL(`/${encodeURIComponent(did)}/log/last`, this.serviceUrl);
130
+ const response = await (0, this.#fetch)(url, {
131
+ signal: options?.signal,
132
+ headers: { accept: 'application/json' },
133
+ });
134
+ const { json } = await handleLastOperation(response);
135
+ return json;
136
+ }
137
+ /**
138
+ * submits a signed operation to plc.directory
139
+ * @param did the did:plc identifier
140
+ * @param operation the signed operation to submit
141
+ * @param options request options
142
+ */
143
+ async submitOperation(did, operation, options) {
144
+ const url = new URL(`/${encodeURIComponent(did)}`, this.serviceUrl);
145
+ const response = await (0, this.#fetch)(url, {
146
+ method: 'POST',
147
+ signal: options?.signal,
148
+ headers: { 'content-type': 'application/json' },
149
+ body: JSON.stringify(operation),
150
+ });
151
+ if (!response.ok) {
152
+ throw await PlcClientError.fromResponse(response);
153
+ }
154
+ }
155
+ /**
156
+ * checks if the plc directory is reachable
157
+ * @param options request options
158
+ * @returns true if reachable
159
+ */
160
+ async ping(options) {
161
+ const url = new URL('/_health', this.serviceUrl);
162
+ try {
163
+ const response = await (0, this.#fetch)(url, {
164
+ signal: options?.signal,
165
+ });
166
+ return response.ok;
167
+ }
168
+ catch {
169
+ return false;
170
+ }
171
+ }
172
+ }
173
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../lib/client.ts"],"names":[],"mappings":"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"}
package/dist/data.d.ts CHANGED
@@ -8,26 +8,26 @@ export declare const validateIncomingOp: (op: t.CompatibleOperationOrTombstone)
8
8
  /**
9
9
  * Process an indexed entry by validating it and integrating it into the canonical log.
10
10
  */
11
- export declare const processIndexedEntry: (did: t.DidPlcString, canonical: t.IndexedEntryWithSigner[], proposed: t.IndexedEntry) => Promise<{
11
+ export declare const processIndexedEntry: (did: `did:plc:${string}`, canonical: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>[], proposed: t.IndexedEntry<t.CompatibleOperationOrTombstone>) => Promise<{
12
12
  prev: string | null;
13
- ops: t.IndexedEntryWithSigner[];
14
- nullified: t.IndexedEntryWithSigner[];
13
+ ops: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>[];
14
+ nullified: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>[];
15
15
  }>;
16
16
  /**
17
17
  * Process an indexed entry log by sequentially processing each operation.
18
18
  */
19
- export declare const processIndexedEntryLog: (did: t.DidPlcString, ops: t.IndexedEntryLog) => Promise<{
20
- canonical: t.IndexedEntryWithSigner[];
21
- nullified: t.IndexedEntryWithSigner[];
19
+ export declare const processIndexedEntryLog: (did: `did:plc:${string}`, ops: t.IndexedEntryLog) => Promise<{
20
+ canonical: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>[];
21
+ nullified: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>[];
22
22
  }>;
23
23
  /**
24
24
  * Check whether an operation can still be disputed
25
25
  */
26
- export declare const isDisputePeriodActive: (disputed: t.IndexedEntry, now?: number) => boolean;
26
+ export declare const isDisputePeriodActive: (disputed: t.IndexedEntry<t.CompatibleOperationOrTombstone>, now?: number) => boolean;
27
27
  /**
28
28
  * Check if a key is authorized to dispute an operation
29
29
  */
30
- export declare const isAuthorizedForDispute: (base: t.IndexedEntryWithSigner<t.CompatibleOperation>, disputed: t.IndexedEntryWithSigner, key: t.DidKeyString) => boolean;
30
+ export declare const isAuthorizedForDispute: (base: t.IndexedEntryWithSigner<t.CompatibleOperation>, disputed: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>, key: `did:key:${string}`) => boolean;
31
31
  export interface DisputeCandidate {
32
32
  base: t.IndexedEntryWithSigner<t.CompatibleOperation>;
33
33
  disputed: t.IndexedEntryWithSigner;
@@ -35,5 +35,5 @@ export interface DisputeCandidate {
35
35
  /**
36
36
  * Finds operations that can be disputed by a given key
37
37
  */
38
- export declare const getDisputeCandidates: (canonical: t.IndexedEntryWithSigner[], key: t.DidKeyString) => DisputeCandidate[];
38
+ export declare const getDisputeCandidates: (canonical: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>[], key: `did:key:${string}`) => DisputeCandidate[];
39
39
  //# sourceMappingURL=data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../lib/data.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAehC;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,IAAI,CAAC,CAAC,8BAA8B,KAAG,IAiGzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC/B,KAAK,CAAC,CAAC,YAAY,EACnB,WAAW,CAAC,CAAC,sBAAsB,EAAE,EACrC,UAAU,CAAC,CAAC,YAAY,KACtB,OAAO,CAAC;IACV,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAC;CACtC,CA+IA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAClC,KAAK,CAAC,CAAC,YAAY,EACnB,KAAK,CAAC,CAAC,eAAe,KACpB,OAAO,CAAC;IAAE,SAAS,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAC;IAAC,SAAS,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAA;CAAE,CAc1F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,CAAC,CAAC,YAAY,EAAE,YAAgB,KAAG,OAGlF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAClC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,mBAAmB,CAAC,EACrD,UAAU,CAAC,CAAC,sBAAsB,EAClC,KAAK,CAAC,CAAC,YAAY,KACjB,OAWF,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,sBAAsB,CAAC;CACnC;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,WAAW,CAAC,CAAC,sBAAsB,EAAE,EAAE,KAAK,CAAC,CAAC,YAAY,uBAoB9F,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../lib/data.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAehC;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,gDAiG9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;EAsJ/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;EAiBlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,uFAGjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,oKAelC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,sBAAsB,CAAC;CACnC;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,2HAoBhC,CAAC"}
package/dist/data.js CHANGED
@@ -1,12 +1,10 @@
1
1
  import * as CBOR from '@atcute/cbor';
2
2
  import * as CID from '@atcute/cid';
3
3
  import { isKeyDid } from '@atcute/identity';
4
- import { toBase32 } from '@atcute/multibase';
5
- import { toSha256 } from '@atcute/uint8array';
6
4
  import { DISPUTE_WINDOW } from './constants.js';
7
5
  import * as err from './errors.js';
8
6
  import * as t from './types.js';
9
- import { isSignedOperationValid, normalizeOp } from './utils.js';
7
+ import { deriveDidFromGenesisOp, isSignedOperationValid, normalizeOp } from './utils.js';
10
8
  // soft constraint limits for incoming operations
11
9
  const MAX_OP_BYTES = 4000;
12
10
  const MAX_AKA_ENTRIES = 10;
@@ -113,11 +111,11 @@ export const processIndexedEntry = async (did, canonical, proposed) => {
113
111
  }
114
112
  // Check if CID and DID matches
115
113
  {
116
- const opBytes = CBOR.encode(proposed.operation);
117
- const expectedDid = `did:plc:${toBase32(await toSha256(opBytes)).slice(0, 24)}`;
114
+ const expectedDid = await deriveDidFromGenesisOp(proposed.operation);
118
115
  if (expectedDid !== did) {
119
116
  throw new err.GenesisHashError(proposed, did);
120
117
  }
118
+ const opBytes = CBOR.encode(proposed.operation);
121
119
  const expectedCid = CID.toString(await CID.create(CID.CODEC_DCBOR, opBytes));
122
120
  if (expectedCid !== proposed.cid) {
123
121
  throw new err.InvalidHashError(proposed, expectedCid);
package/dist/data.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../lib/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../lib/data.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAEhC,qBAAa,QAAS,SAAQ,KAAK;IACzB,IAAI,SAAc;CAC3B;AAED,qBAAa,sBAAuB,SAAQ,QAAQ;IAI3C,SAAS,EAAE,CAAC,CAAC,YAAY;IACzB,MAAM,EAAE,MAAM;IAJb,IAAI,SAA4B;gBAGjC,SAAS,EAAE,CAAC,CAAC,YAAY,EACzB,MAAM,EAAE,MAAM;CAItB;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;IAG/B,SAAS,EAAE,CAAC,CAAC,YAAY;IAFnC,IAAI,SAA2B;gBAErB,SAAS,EAAE,CAAC,CAAC,YAAY;CAG5C;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS,EAAE,CAAC,CAAC,YAAY;IACzB,QAAQ,EAAE,MAAM;IAJf,IAAI,SAAsB;gBAG3B,SAAS,EAAE,CAAC,CAAC,YAAY,EACzB,QAAQ,EAAE,MAAM;CAIxB;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS,EAAE,CAAC,CAAC,YAAY;IACzB,GAAG,EAAE,CAAC,CAAC,YAAY;IAJlB,IAAI,SAAsB;gBAG3B,SAAS,EAAE,CAAC,CAAC,YAAY,EACzB,GAAG,EAAE,CAAC,CAAC,YAAY;CAI3B;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS,EAAE,CAAC,CAAC,YAAY;IACzB,MAAM,EAAE,MAAM;IAJb,IAAI,SAAsB;gBAG3B,SAAS,EAAE,CAAC,CAAC,YAAY,EACzB,MAAM,EAAE,MAAM;CAItB"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAEhC,qBAAa,QAAS,SAAQ,KAAK;IACzB,IAAI,SAAc;CAC3B;AAED,qBAAa,sBAAuB,SAAQ,QAAQ;IAI3C,SAAS,EAAE,CAAC,CAAC,YAAY;IACzB,MAAM,EAAE,MAAM;IAJb,IAAI,SAA4B;IAEzC,YACQ,SAAS,EAAE,CAAC,CAAC,YAAY,EACzB,MAAM,EAAE,MAAM,EAGrB;CACD;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;IAG/B,SAAS,EAAE,CAAC,CAAC,YAAY;IAFnC,IAAI,SAA2B;IAExC,YAAmB,SAAS,EAAE,CAAC,CAAC,YAAY,EAE3C;CACD;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS,EAAE,CAAC,CAAC,YAAY;IACzB,QAAQ,EAAE,MAAM;IAJf,IAAI,SAAsB;IAEnC,YACQ,SAAS,EAAE,CAAC,CAAC,YAAY,EACzB,QAAQ,EAAE,MAAM,EAGvB;CACD;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS,EAAE,CAAC,CAAC,YAAY;IACzB,GAAG,EAAE,CAAC,CAAC,YAAY;IAJlB,IAAI,SAAsB;IAEnC,YACQ,SAAS,EAAE,CAAC,CAAC,YAAY,EACzB,GAAG,EAAE,CAAC,CAAC,YAAY,EAG1B;CACD;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS,EAAE,CAAC,CAAC,YAAY;IACzB,MAAM,EAAE,MAAM;IAJb,IAAI,SAAsB;IAEnC,YACQ,SAAS,EAAE,CAAC,CAAC,YAAY,EACzB,MAAM,EAAE,MAAM,EAGrB;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAEhC,MAAM,OAAO,QAAS,SAAQ,KAAK;IACzB,IAAI,GAAG,UAAU,CAAC;CAC3B;AAED,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAI3C;IACA;IAJC,IAAI,GAAG,wBAAwB,CAAC;IAEzC,YACQ,SAAyB,EACzB,MAAc;QAErB,KAAK,CAAC,2BAA2B,SAAS,CAAC,GAAG,YAAY,MAAM,EAAE,CAAC,CAAC;QAH7D,cAAS,GAAT,SAAS,CAAgB;QACzB,WAAM,GAAN,MAAM,CAAQ;IAGtB,CAAC;CACD;AAED,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IAG/B;IAFV,IAAI,GAAG,uBAAuB,CAAC;IAExC,YAAmB,SAAyB;QAC3C,KAAK,CAAC,0BAA0B,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QAD/B,cAAS,GAAT,SAAS,CAAgB;IAE5C,CAAC;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAIrC;IACA;IAJC,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YACQ,SAAyB,EACzB,QAAgB;QAEvB,KAAK,CAAC,0BAA0B,QAAQ,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QAH3D,cAAS,GAAT,SAAS,CAAgB;QACzB,aAAQ,GAAR,QAAQ,CAAQ;IAGxB,CAAC;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAIrC;IACA;IAJC,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YACQ,SAAyB,EACzB,GAAmB;QAE1B,KAAK,CAAC,iCAAiC,GAAG,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QAH7D,cAAS,GAAT,SAAS,CAAgB;QACzB,QAAG,GAAH,GAAG,CAAgB;IAG3B,CAAC;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAIrC;IACA;IAJC,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YACQ,SAAyB,EACzB,MAAc;QAErB,KAAK,CAAC,oDAAoD,SAAS,CAAC,GAAG,YAAY,MAAM,EAAE,CAAC,CAAC;QAHtF,cAAS,GAAT,SAAS,CAAgB;QACzB,WAAM,GAAN,MAAM,CAAQ;IAGtB,CAAC;CACD"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAEhC,MAAM,OAAO,QAAS,SAAQ,KAAK;IACzB,IAAI,GAAG,UAAU,CAAC;CAC3B;AAED,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAI3C,SAAS;IACT,MAAM;IAJL,IAAI,GAAG,wBAAwB,CAAC;IAEzC,YACQ,SAAyB,EACzB,MAAc,EACpB;QACD,KAAK,CAAC,2BAA2B,SAAS,CAAC,GAAG,YAAY,MAAM,EAAE,CAAC,CAAC;yBAH7D,SAAS;sBACT,MAAM;IAEuD,CACpE;CACD;AAED,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IAG/B,SAAS;IAFnB,IAAI,GAAG,uBAAuB,CAAC;IAExC,YAAmB,SAAyB,EAAE;QAC7C,KAAK,CAAC,0BAA0B,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;yBAD/B,SAAS;IACsB,CACjD;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS;IACT,QAAQ;IAJP,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YACQ,SAAyB,EACzB,QAAgB,EACtB;QACD,KAAK,CAAC,0BAA0B,QAAQ,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;yBAH3D,SAAS;wBACT,QAAQ;IAEmD,CAClE;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS;IACT,GAAG;IAJF,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YACQ,SAAyB,EACzB,GAAmB,EACzB;QACD,KAAK,CAAC,iCAAiC,GAAG,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;yBAH7D,SAAS;mBACT,GAAG;IAE0D,CACpE;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAIrC,SAAS;IACT,MAAM;IAJL,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YACQ,SAAyB,EACzB,MAAc,EACpB;QACD,KAAK,CAAC,oDAAoD,SAAS,CAAC,GAAG,YAAY,MAAM,EAAE,CAAC,CAAC;yBAHtF,SAAS;sBACT,MAAM;IAEgF,CAC7F;CACD"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * as defs from './typedefs.js';
2
2
  export * from './types.js';
3
+ export * from './client.js';
3
4
  export * from './constants.js';
4
5
  export * from './data.js';
5
6
  export * from './errors.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,cAAc,YAAY,CAAC;AAE3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,cAAc,YAAY,CAAC;AAE3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * as defs from './typedefs.js';
2
2
  export * from './types.js';
3
+ export * from './client.js';
3
4
  export * from './constants.js';
4
5
  export * from './data.js';
5
6
  export * from './errors.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,cAAc,YAAY,CAAC;AAE3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,cAAc,YAAY,CAAC;AAE3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -16,4 +16,6 @@ export declare const operationOrTombstone: v.Type<t.OperationOrTombstone>;
16
16
  export declare const operationLog: v.Type<t.OperationLog>;
17
17
  export declare const indexedEntry: v.Type<t.IndexedEntry>;
18
18
  export declare const indexedEntryLog: v.Type<t.IndexedEntryLog>;
19
+ export declare const plcState: v.Type<t.PlcState>;
20
+ export declare const sequencedEntry: v.Type<t.SequencedEntry>;
19
21
  //# sourceMappingURL=typedefs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typedefs.d.ts","sourceRoot":"","sources":["../lib/typedefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAMpC,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAGhC,eAAO,MAAM,YAAY,6BAAmD,CAAC;AAE7E,eAAO,MAAM,sBAAsB,6BAAmD,CAAC;AAEvF,eAAO,MAAM,YAAY,6BAYvB,CAAC;AAuBH,eAAO,MAAM,6BAA6B,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CACnD,CAAC;AAEhC,eAAO,MAAM,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAEhE,CAAC;AAIH,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAGpC,CAAC;AAWH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAsB,CAAC;AAEjF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAExC,CAAC;AASH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAsB,CAAC;AAEjF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAExC,CAAC;AAIH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAA6C,CAAC;AAE5G,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAInF,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAiC,CAAC;AAElG,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAET,CAAC;AAYxC,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAiB,CAAC;AAElE,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAEsB,CAAC"}
1
+ {"version":3,"file":"typedefs.d.ts","sourceRoot":"","sources":["../lib/typedefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAMpC,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAGhC,eAAO,MAAM,YAAY,6BAAmD,CAAC;AAE7E,eAAO,MAAM,sBAAsB,6BAAmD,CAAC;AAEvF,eAAO,MAAM,YAAY,6BAYvB,CAAC;AAuBH,eAAO,MAAM,6BAA6B,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CACnD,CAAC;AAEhC,eAAO,MAAM,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAEhE,CAAC;AAIH,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAGpC,CAAC;AAWH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAsB,CAAC;AAEjF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAExC,CAAC;AASH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAsB,CAAC;AAEjF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAExC,CAAC;AAIH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAA6C,CAAC;AAE5G,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAInF,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAiC,CAAC;AAElG,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAET,CAAC;AAYxC,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAiB,CAAC;AAElE,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAEsB,CAAC;AAI7E,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAMtC,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAGlD,CAAC"}
package/dist/typedefs.js CHANGED
@@ -91,4 +91,17 @@ export const indexedEntryLog = v
91
91
  .tuple([_indexedEntry.extend({ operation: compatibleOperation })])
92
92
  .concat(v.array(_indexedEntry.extend({ operation: operationOrTombstone })));
93
93
  // #endregion
94
+ // #region Client response schemas
95
+ export const plcState = v.object({
96
+ did: didPlcString,
97
+ rotationKeys: v.array(didKeyString),
98
+ verificationMethods: v.record(permissiveDidKeyString),
99
+ alsoKnownAs: v.array(v.string()),
100
+ services: v.record(service),
101
+ });
102
+ export const sequencedEntry = _indexedEntry.extend({
103
+ type: v.literal('sequenced_op'),
104
+ seq: v.number(),
105
+ });
106
+ // #endregion
94
107
  //# sourceMappingURL=typedefs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typedefs.js","sourceRoot":"","sources":["../lib/typedefs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typedefs.js","sourceRoot":"","sources":["../lib/typedefs.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -53,4 +53,21 @@ export type IndexedEntryLog = [
53
53
  genesis: IndexedEntry<CompatibleOperation>,
54
54
  ...IndexedEntry<OperationOrTombstone>[]
55
55
  ];
56
+ /**
57
+ * current identity state derived from the did:plc operation log
58
+ */
59
+ export interface PlcState {
60
+ did: DidPlcString;
61
+ rotationKeys: DidKeyString[];
62
+ verificationMethods: Record<string, DidKeyString>;
63
+ alsoKnownAs: string[];
64
+ services: Record<string, Service>;
65
+ }
66
+ /**
67
+ * operation entry with sequence number from /export endpoint
68
+ */
69
+ export interface SequencedEntry extends IndexedEntry {
70
+ type: 'sequenced_op';
71
+ seq: number;
72
+ }
56
73
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAEtC,MAAM,WAAW,6BAA6B;IAC7C,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,EAAE,YAAY,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAsB,SAAQ,6BAA6B;IAC3E,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,SAAU,SAAQ,iBAAiB;IACnD,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAU,SAAQ,iBAAiB;IACnD,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,qBAAqB,CAAC;AAEpE,MAAM,MAAM,8BAA8B,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,oBAAoB,EAAE,CAAC,CAAC;AAErF,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,8BAA8B,GAAG,8BAA8B;IACtG,GAAG,EAAE,YAAY,CAAC;IAClB,SAAS,EAAE,CAAC,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB,CACtC,CAAC,SAAS,8BAA8B,GAAG,8BAA8B,CACxE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACxB,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,YAAY,CAAC,mBAAmB,CAAC;IAC1C,GAAG,YAAY,CAAC,oBAAoB,CAAC,EAAE;CACvC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAEtC,MAAM,WAAW,6BAA6B;IAC7C,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,EAAE,YAAY,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAsB,SAAQ,6BAA6B;IAC3E,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,SAAU,SAAQ,iBAAiB;IACnD,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAU,SAAQ,iBAAiB;IACnD,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,qBAAqB,CAAC;AAEpE,MAAM,MAAM,8BAA8B,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,oBAAoB,EAAE,CAAC,CAAC;AAErF,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,8BAA8B,GAAG,8BAA8B;IACtG,GAAG,EAAE,YAAY,CAAC;IAClB,SAAS,EAAE,CAAC,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB,CACtC,CAAC,SAAS,8BAA8B,GAAG,8BAA8B,CACxE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACxB,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,YAAY,CAAC,mBAAmB,CAAC;IAC1C,GAAG,YAAY,CAAC,oBAAoB,CAAC,EAAE;CACvC,CAAC;AAIF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,GAAG,EAAE,YAAY,CAAC;IAClB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,YAAY;IACnD,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACZ"}
package/dist/types.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export {};
2
+ // #endregion
2
3
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":";AA+FA,aAAa"}
package/dist/utils.d.ts CHANGED
@@ -1,6 +1,27 @@
1
+ import type { PrivateKey } from '@atcute/crypto';
1
2
  import * as t from './types.js';
2
3
  export declare const wrapHttpPrefix: (str: string) => string;
3
4
  export declare const wrapAtprotoPrefix: (str: string) => string;
5
+ /**
6
+ * derives the did:plc identifier from a genesis operation
7
+ * @param op signed genesis operation
8
+ * @returns the did:plc string
9
+ */
10
+ export declare const deriveDidFromGenesisOp: (op: t.CompatibleOperation) => Promise<`did:plc:${string}`>;
4
11
  export declare const normalizeOp: (op: t.CompatibleOperation) => t.Operation;
5
- export declare const isSignedOperationValid: (allowedKeys: t.DidKeyString[], op: t.CompatibleOperationOrTombstone) => Promise<t.DidKeyString | null>;
12
+ export declare const isSignedOperationValid: (allowedKeys: `did:key:${string}`[], op: t.CompatibleOperationOrTombstone) => Promise<`did:key:${string}` | null>;
13
+ /**
14
+ * signs an unsigned plc operation
15
+ * @param op unsigned operation to sign
16
+ * @param key private key to sign with (must be one of the rotation keys)
17
+ * @returns signed operation
18
+ */
19
+ export declare const signOperation: (op: t.UnsignedOperation, key: PrivateKey) => Promise<t.Operation>;
20
+ /**
21
+ * signs an unsigned plc tombstone
22
+ * @param op unsigned tombstone to sign
23
+ * @param key private key to sign with (must be one of the rotation keys)
24
+ * @returns signed tombstone
25
+ */
26
+ export declare const signTombstone: (op: t.UnsignedTombstone, key: PrivateKey) => Promise<t.Tombstone>;
6
27
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAEhC,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAM5C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MAQ/C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,IAAI,CAAC,CAAC,mBAAmB,KAAG,CAAC,CAAC,SAqBzD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAClC,aAAa,CAAC,CAAC,YAAY,EAAE,EAC7B,IAAI,CAAC,CAAC,8BAA8B,KAClC,OAAO,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAe/B,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKjD,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAEhC,eAAO,MAAM,cAAc,yBAM1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,yBAQ7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,6DAIlC,CAAC;AAEF,eAAO,MAAM,WAAW,4CAqBvB,CAAC;AAEF,eAAO,MAAM,sBAAsB,mHAkBlC,CAAC;AAIF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,oEAKzB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,oEAKzB,CAAC"}
package/dist/utils.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as CBOR from '@atcute/cbor';
2
2
  import { verifySigWithDidKey } from '@atcute/crypto';
3
- import { fromBase64Url } from '@atcute/multibase';
3
+ import { fromBase64Url, toBase32, toBase64Url } from '@atcute/multibase';
4
+ import { toSha256 } from '@atcute/uint8array';
4
5
  import * as t from './types.js';
5
6
  export const wrapHttpPrefix = (str) => {
6
7
  if (str.startsWith('http://') || str.startsWith('https://')) {
@@ -15,6 +16,16 @@ export const wrapAtprotoPrefix = (str) => {
15
16
  const stripped = str.replace('http://', '').replace('https://', '');
16
17
  return `at://${stripped}`;
17
18
  };
19
+ /**
20
+ * derives the did:plc identifier from a genesis operation
21
+ * @param op signed genesis operation
22
+ * @returns the did:plc string
23
+ */
24
+ export const deriveDidFromGenesisOp = async (op) => {
25
+ const opBytes = CBOR.encode(op);
26
+ const hash = await toSha256(opBytes);
27
+ return `did:plc:${toBase32(hash).slice(0, 24)}`;
28
+ };
18
29
  export const normalizeOp = (op) => {
19
30
  if (op.type === 'create') {
20
31
  return {
@@ -48,4 +59,28 @@ export const isSignedOperationValid = async (allowedKeys, op) => {
48
59
  }
49
60
  return null;
50
61
  };
62
+ // #region signing operations
63
+ /**
64
+ * signs an unsigned plc operation
65
+ * @param op unsigned operation to sign
66
+ * @param key private key to sign with (must be one of the rotation keys)
67
+ * @returns signed operation
68
+ */
69
+ export const signOperation = async (op, key) => {
70
+ const data = CBOR.encode(op);
71
+ const sig = await key.sign(data);
72
+ return { ...op, sig: toBase64Url(sig) };
73
+ };
74
+ /**
75
+ * signs an unsigned plc tombstone
76
+ * @param op unsigned tombstone to sign
77
+ * @param key private key to sign with (must be one of the rotation keys)
78
+ * @returns signed tombstone
79
+ */
80
+ export const signTombstone = async (op, key) => {
81
+ const data = CBOR.encode(op);
82
+ const sig = await key.sign(data);
83
+ return { ...op, sig: toBase64Url(sig) };
84
+ };
85
+ // #endregion
51
86
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAEhC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAU,EAAE;IACrD,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,WAAW,GAAG,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAU,EAAE;IACxD,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEpE,OAAO,QAAQ,QAAQ,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAyB,EAAe,EAAE;IACrE,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO;YACN,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,GAAG,EAAE,EAAE,CAAC,GAAG;YACX,YAAY,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC;YAC7C,mBAAmB,EAAE;gBACpB,OAAO,EAAE,EAAE,CAAC,UAAU;aACtB;YACD,WAAW,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAC3C,QAAQ,EAAE;gBACT,WAAW,EAAE;oBACZ,IAAI,EAAE,2BAA2B;oBACjC,QAAQ,EAAE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC;iBACpC;aACD;SACD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAC1C,WAA6B,EAC7B,EAAoC,EACH,EAAE;IACnC,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,CAAC;IAElC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAExC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,EAAE,EAAE,CAAC;YACR,OAAO,GAAG,CAAC;QACZ,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"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"}
package/lib/client.ts ADDED
@@ -0,0 +1,250 @@
1
+ import type { DidDocument } from '@atcute/identity';
2
+ import { defs as identityDefs } from '@atcute/identity';
3
+ import { parseResponseAsJson, pipe, validateJsonWith } from '@atcute/util-fetch';
4
+
5
+ import * as defs from './typedefs.js';
6
+ import * as t from './types.js';
7
+
8
+ const MAX_RESPONSE_SIZE = 64 * 1024;
9
+
10
+ export interface PlcErrorBody {
11
+ message: string;
12
+ }
13
+
14
+ /**
15
+ * error thrown when the plc server returns a non-ok response
16
+ */
17
+ export class PlcClientError extends Error {
18
+ override readonly name = 'PlcClientError';
19
+
20
+ constructor(
21
+ public status: number,
22
+ public body: PlcErrorBody | null,
23
+ message: string,
24
+ ) {
25
+ super(message);
26
+ }
27
+
28
+ /**
29
+ * creates a PlcClientError from a failed fetch response
30
+ * @param response the failed response
31
+ * @returns the error with parsed body if available
32
+ */
33
+ static async fromResponse(response: Response): Promise<PlcClientError> {
34
+ const status = response.status;
35
+ let body: PlcErrorBody | null = null;
36
+ let message = `got http ${status}`;
37
+
38
+ try {
39
+ const text = await response.text();
40
+ const json = JSON.parse(text);
41
+
42
+ if (typeof json.message === 'string') {
43
+ body = { message: json.message };
44
+ message = json.message;
45
+ }
46
+ } catch {
47
+ // failed to parse response body, use default message
48
+ }
49
+
50
+ return new PlcClientError(status, body, message);
51
+ }
52
+ }
53
+
54
+ const assertResponseOk = async (response: Response): Promise<Response> => {
55
+ if (response.ok) {
56
+ return response;
57
+ }
58
+ throw await PlcClientError.fromResponse(response);
59
+ };
60
+
61
+ const handleDocument = pipe(
62
+ assertResponseOk,
63
+ parseResponseAsJson(/^application\/(did\+ld\+)?json$/, MAX_RESPONSE_SIZE),
64
+ validateJsonWith(identityDefs.didDocument, { mode: 'passthrough' }),
65
+ );
66
+
67
+ const handlePlcState = pipe(
68
+ assertResponseOk,
69
+ parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE),
70
+ validateJsonWith(defs.plcState, { mode: 'passthrough' }),
71
+ );
72
+
73
+ const handleOperationLog = pipe(
74
+ assertResponseOk,
75
+ parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE),
76
+ validateJsonWith(defs.operationLog, { mode: 'passthrough' }),
77
+ );
78
+
79
+ const handleIndexedEntryLog = pipe(
80
+ assertResponseOk,
81
+ parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE),
82
+ validateJsonWith(defs.indexedEntryLog, { mode: 'passthrough' }),
83
+ );
84
+
85
+ const handleLastOperation = pipe(
86
+ assertResponseOk,
87
+ parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE),
88
+ validateJsonWith(defs.compatibleOperationOrTombstone, { mode: 'passthrough' }),
89
+ );
90
+
91
+ export interface PlcClientOptions {
92
+ /** plc directory URL, defaults to https://plc.directory */
93
+ serviceUrl?: string;
94
+ /** custom fetch function */
95
+ fetch?: typeof globalThis.fetch;
96
+ }
97
+
98
+ export interface PlcRequestOptions {
99
+ signal?: AbortSignal;
100
+ }
101
+
102
+ /**
103
+ * client for interacting with plc.directory
104
+ */
105
+ export class PlcClient {
106
+ readonly serviceUrl: string;
107
+ #fetch: typeof globalThis.fetch;
108
+
109
+ constructor({ serviceUrl = 'https://plc.directory', fetch: fetchFn = fetch }: PlcClientOptions = {}) {
110
+ this.serviceUrl = serviceUrl;
111
+ this.#fetch = fetchFn;
112
+ }
113
+
114
+ /**
115
+ * fetches the DID document for a did:plc
116
+ * @param did the did:plc identifier
117
+ * @param options request options
118
+ * @returns the DID document
119
+ */
120
+ async getDocument(did: t.DidPlcString, options?: PlcRequestOptions): Promise<DidDocument> {
121
+ const url = new URL(`/${encodeURIComponent(did)}`, this.serviceUrl);
122
+
123
+ const response = await (0, this.#fetch)(url, {
124
+ signal: options?.signal,
125
+ headers: { accept: 'application/did+ld+json,application/json' },
126
+ });
127
+
128
+ const { json } = await handleDocument(response);
129
+ return json;
130
+ }
131
+
132
+ /**
133
+ * fetches the current identity state for a did:plc
134
+ * @param did the did:plc identifier
135
+ * @param options request options
136
+ * @returns the current plc state
137
+ */
138
+ async getState(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.PlcState> {
139
+ const url = new URL(`/${encodeURIComponent(did)}/data`, this.serviceUrl);
140
+
141
+ const response = await (0, this.#fetch)(url, {
142
+ signal: options?.signal,
143
+ headers: { accept: 'application/json' },
144
+ });
145
+
146
+ const { json } = await handlePlcState(response);
147
+ return json;
148
+ }
149
+
150
+ /**
151
+ * fetches the operation log for a did:plc
152
+ * @param did the did:plc identifier
153
+ * @param options request options
154
+ * @returns the operation log
155
+ */
156
+ async getOperationLog(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.OperationLog> {
157
+ const url = new URL(`/${encodeURIComponent(did)}/log`, this.serviceUrl);
158
+
159
+ const response = await (0, this.#fetch)(url, {
160
+ signal: options?.signal,
161
+ headers: { accept: 'application/json' },
162
+ });
163
+
164
+ const { json } = await handleOperationLog(response);
165
+ return json;
166
+ }
167
+
168
+ /**
169
+ * fetches the auditable log for a did:plc (includes CIDs and timestamps)
170
+ * @param did the did:plc identifier
171
+ * @param options request options
172
+ * @returns the indexed entry log
173
+ */
174
+ async getAuditLog(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.IndexedEntryLog> {
175
+ const url = new URL(`/${encodeURIComponent(did)}/log/audit`, this.serviceUrl);
176
+
177
+ const response = await (0, this.#fetch)(url, {
178
+ signal: options?.signal,
179
+ headers: { accept: 'application/json' },
180
+ });
181
+
182
+ const { json } = await handleIndexedEntryLog(response);
183
+ return json;
184
+ }
185
+
186
+ /**
187
+ * fetches the last operation for a did:plc
188
+ * @param did the did:plc identifier
189
+ * @param options request options
190
+ * @returns the last operation or tombstone
191
+ */
192
+ async getLastOperation(
193
+ did: t.DidPlcString,
194
+ options?: PlcRequestOptions,
195
+ ): Promise<t.CompatibleOperationOrTombstone> {
196
+ const url = new URL(`/${encodeURIComponent(did)}/log/last`, this.serviceUrl);
197
+
198
+ const response = await (0, this.#fetch)(url, {
199
+ signal: options?.signal,
200
+ headers: { accept: 'application/json' },
201
+ });
202
+
203
+ const { json } = await handleLastOperation(response);
204
+ return json;
205
+ }
206
+
207
+ /**
208
+ * submits a signed operation to plc.directory
209
+ * @param did the did:plc identifier
210
+ * @param operation the signed operation to submit
211
+ * @param options request options
212
+ */
213
+ async submitOperation(
214
+ did: t.DidPlcString,
215
+ operation: t.OperationOrTombstone,
216
+ options?: PlcRequestOptions,
217
+ ): Promise<void> {
218
+ const url = new URL(`/${encodeURIComponent(did)}`, this.serviceUrl);
219
+
220
+ const response = await (0, this.#fetch)(url, {
221
+ method: 'POST',
222
+ signal: options?.signal,
223
+ headers: { 'content-type': 'application/json' },
224
+ body: JSON.stringify(operation),
225
+ });
226
+
227
+ if (!response.ok) {
228
+ throw await PlcClientError.fromResponse(response);
229
+ }
230
+ }
231
+
232
+ /**
233
+ * checks if the plc directory is reachable
234
+ * @param options request options
235
+ * @returns true if reachable
236
+ */
237
+ async ping(options?: PlcRequestOptions): Promise<boolean> {
238
+ const url = new URL('/_health', this.serviceUrl);
239
+
240
+ try {
241
+ const response = await (0, this.#fetch)(url, {
242
+ signal: options?.signal,
243
+ });
244
+
245
+ return response.ok;
246
+ } catch {
247
+ return false;
248
+ }
249
+ }
250
+ }
package/lib/data.ts CHANGED
@@ -1,13 +1,11 @@
1
1
  import * as CBOR from '@atcute/cbor';
2
2
  import * as CID from '@atcute/cid';
3
3
  import { isKeyDid } from '@atcute/identity';
4
- import { toBase32 } from '@atcute/multibase';
5
- import { toSha256 } from '@atcute/uint8array';
6
4
 
7
5
  import { DISPUTE_WINDOW } from './constants.js';
8
6
  import * as err from './errors.js';
9
7
  import * as t from './types.js';
10
- import { isSignedOperationValid, normalizeOp } from './utils.js';
8
+ import { deriveDidFromGenesisOp, isSignedOperationValid, normalizeOp } from './utils.js';
11
9
 
12
10
  // soft constraint limits for incoming operations
13
11
  const MAX_OP_BYTES = 4000;
@@ -148,13 +146,12 @@ export const processIndexedEntry = async (
148
146
 
149
147
  // Check if CID and DID matches
150
148
  {
151
- const opBytes = CBOR.encode(proposed.operation);
152
-
153
- const expectedDid = `did:plc:${toBase32(await toSha256(opBytes)).slice(0, 24)}`;
149
+ const expectedDid = await deriveDidFromGenesisOp(proposed.operation);
154
150
  if (expectedDid !== did) {
155
151
  throw new err.GenesisHashError(proposed, did);
156
152
  }
157
153
 
154
+ const opBytes = CBOR.encode(proposed.operation);
158
155
  const expectedCid = CID.toString(await CID.create(CID.CODEC_DCBOR, opBytes));
159
156
  if (expectedCid !== proposed.cid) {
160
157
  throw new err.InvalidHashError(proposed, expectedCid);
package/lib/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * as defs from './typedefs.js';
2
2
  export * from './types.js';
3
3
 
4
+ export * from './client.js';
4
5
  export * from './constants.js';
5
6
  export * from './data.js';
6
7
  export * from './errors.js';
package/lib/typedefs.ts CHANGED
@@ -120,3 +120,18 @@ export const indexedEntryLog: v.Type<t.IndexedEntryLog> = v
120
120
  .tuple([_indexedEntry.extend({ operation: compatibleOperation })])
121
121
  .concat(v.array(_indexedEntry.extend({ operation: operationOrTombstone })));
122
122
  // #endregion
123
+
124
+ // #region Client response schemas
125
+ export const plcState: v.Type<t.PlcState> = v.object({
126
+ did: didPlcString,
127
+ rotationKeys: v.array(didKeyString),
128
+ verificationMethods: v.record(permissiveDidKeyString),
129
+ alsoKnownAs: v.array(v.string()),
130
+ services: v.record(service),
131
+ });
132
+
133
+ export const sequencedEntry: v.Type<t.SequencedEntry> = _indexedEntry.extend({
134
+ type: v.literal('sequenced_op'),
135
+ seq: v.number(),
136
+ });
137
+ // #endregion
package/lib/types.ts CHANGED
@@ -71,3 +71,26 @@ export type IndexedEntryLog = [
71
71
  genesis: IndexedEntry<CompatibleOperation>,
72
72
  ...IndexedEntry<OperationOrTombstone>[],
73
73
  ];
74
+
75
+ // #region client response types
76
+
77
+ /**
78
+ * current identity state derived from the did:plc operation log
79
+ */
80
+ export interface PlcState {
81
+ did: DidPlcString;
82
+ rotationKeys: DidKeyString[];
83
+ verificationMethods: Record<string, DidKeyString>;
84
+ alsoKnownAs: string[];
85
+ services: Record<string, Service>;
86
+ }
87
+
88
+ /**
89
+ * operation entry with sequence number from /export endpoint
90
+ */
91
+ export interface SequencedEntry extends IndexedEntry {
92
+ type: 'sequenced_op';
93
+ seq: number;
94
+ }
95
+
96
+ // #endregion
package/lib/utils.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import * as CBOR from '@atcute/cbor';
2
+ import type { PrivateKey } from '@atcute/crypto';
2
3
  import { verifySigWithDidKey } from '@atcute/crypto';
3
- import { fromBase64Url } from '@atcute/multibase';
4
+ import { fromBase64Url, toBase32, toBase64Url } from '@atcute/multibase';
5
+ import { toSha256 } from '@atcute/uint8array';
4
6
 
5
7
  import * as t from './types.js';
6
8
 
@@ -22,6 +24,17 @@ export const wrapAtprotoPrefix = (str: string): string => {
22
24
  return `at://${stripped}`;
23
25
  };
24
26
 
27
+ /**
28
+ * derives the did:plc identifier from a genesis operation
29
+ * @param op signed genesis operation
30
+ * @returns the did:plc string
31
+ */
32
+ export const deriveDidFromGenesisOp = async (op: t.CompatibleOperation): Promise<t.DidPlcString> => {
33
+ const opBytes = CBOR.encode(op);
34
+ const hash = await toSha256(opBytes);
35
+ return `did:plc:${toBase32(hash).slice(0, 24)}`;
36
+ };
37
+
25
38
  export const normalizeOp = (op: t.CompatibleOperation): t.Operation => {
26
39
  if (op.type === 'create') {
27
40
  return {
@@ -64,3 +77,33 @@ export const isSignedOperationValid = async (
64
77
 
65
78
  return null;
66
79
  };
80
+
81
+ // #region signing operations
82
+
83
+ /**
84
+ * signs an unsigned plc operation
85
+ * @param op unsigned operation to sign
86
+ * @param key private key to sign with (must be one of the rotation keys)
87
+ * @returns signed operation
88
+ */
89
+ export const signOperation = async (op: t.UnsignedOperation, key: PrivateKey): Promise<t.Operation> => {
90
+ const data = CBOR.encode(op);
91
+ const sig = await key.sign(data);
92
+
93
+ return { ...op, sig: toBase64Url(sig) };
94
+ };
95
+
96
+ /**
97
+ * signs an unsigned plc tombstone
98
+ * @param op unsigned tombstone to sign
99
+ * @param key private key to sign with (must be one of the rotation keys)
100
+ * @returns signed tombstone
101
+ */
102
+ export const signTombstone = async (op: t.UnsignedTombstone, key: PrivateKey): Promise<t.Tombstone> => {
103
+ const data = CBOR.encode(op);
104
+ const sig = await key.sign(data);
105
+
106
+ return { ...op, sig: toBase64Url(sig) };
107
+ };
108
+
109
+ // #endregion
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@atcute/did-plc",
4
- "version": "0.2.0",
4
+ "version": "0.3.1",
5
5
  "description": "validations, type definitions and schemas for did:plc operations",
6
6
  "keywords": [
7
7
  "atproto",
@@ -13,6 +13,9 @@
13
13
  "url": "https://github.com/mary-ext/atcute",
14
14
  "directory": "packages/identity/did-plc"
15
15
  },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
16
19
  "files": [
17
20
  "dist/",
18
21
  "lib/",
@@ -24,21 +27,24 @@
24
27
  },
25
28
  "sideEffects": false,
26
29
  "devDependencies": {
27
- "@types/bun": "^1.3.1"
30
+ "@vitest/coverage-v8": "^4.0.16",
31
+ "vitest": "^4.0.16",
32
+ "@atcute/internal-dev-env": "^1.0.2"
28
33
  },
29
34
  "dependencies": {
30
35
  "@badrap/valita": "^0.4.6",
31
- "@atcute/cbor": "^2.2.7",
36
+ "@atcute/cbor": "^2.2.8",
32
37
  "@atcute/cid": "^2.2.6",
33
- "@atcute/crypto": "^2.2.6",
34
- "@atcute/identity": "^1.1.1",
35
- "@atcute/lexicons": "^1.2.2",
38
+ "@atcute/crypto": "^2.3.0",
39
+ "@atcute/lexicons": "^1.2.6",
40
+ "@atcute/identity": "^1.1.3",
36
41
  "@atcute/multibase": "^1.1.6",
37
- "@atcute/uint8array": "^1.0.5"
42
+ "@atcute/uint8array": "^1.0.6",
43
+ "@atcute/util-fetch": "^1.0.4"
38
44
  },
39
45
  "scripts": {
40
- "build": "tsc --project tsconfig.build.json",
41
- "test": "bun test --coverage",
46
+ "build": "tsgo --project tsconfig.build.json",
47
+ "test": "vitest",
42
48
  "prepublish": "rm -rf dist; pnpm run build"
43
49
  }
44
50
  }