@atcute/did-plc 0.1.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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,68 @@
1
+ import type { DidDocument } from '@atcute/identity';
2
+ import * as t from './types.js';
3
+ export interface PlcClientOptions {
4
+ /** plc directory URL, defaults to https://plc.directory */
5
+ serviceUrl?: string;
6
+ /** custom fetch function */
7
+ fetch?: typeof globalThis.fetch;
8
+ }
9
+ export interface PlcRequestOptions {
10
+ signal?: AbortSignal;
11
+ }
12
+ /**
13
+ * client for interacting with plc.directory
14
+ */
15
+ export declare class PlcClient {
16
+ #private;
17
+ readonly serviceUrl: string;
18
+ constructor({ serviceUrl, fetch: fetchFn }?: PlcClientOptions);
19
+ /**
20
+ * fetches the DID document for a did:plc
21
+ * @param did the did:plc identifier
22
+ * @param options request options
23
+ * @returns the DID document
24
+ */
25
+ getDocument(did: t.DidPlcString, options?: PlcRequestOptions): Promise<DidDocument>;
26
+ /**
27
+ * fetches the current identity state for a did:plc
28
+ * @param did the did:plc identifier
29
+ * @param options request options
30
+ * @returns the current plc state
31
+ */
32
+ getState(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.PlcState>;
33
+ /**
34
+ * fetches the operation log for a did:plc
35
+ * @param did the did:plc identifier
36
+ * @param options request options
37
+ * @returns the operation log
38
+ */
39
+ getOperationLog(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.OperationLog>;
40
+ /**
41
+ * fetches the auditable log for a did:plc (includes CIDs and timestamps)
42
+ * @param did the did:plc identifier
43
+ * @param options request options
44
+ * @returns the indexed entry log
45
+ */
46
+ getAuditLog(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.IndexedEntryLog>;
47
+ /**
48
+ * fetches the last operation for a did:plc
49
+ * @param did the did:plc identifier
50
+ * @param options request options
51
+ * @returns the last operation or tombstone
52
+ */
53
+ getLastOperation(did: t.DidPlcString, options?: PlcRequestOptions): Promise<t.CompatibleOperationOrTombstone>;
54
+ /**
55
+ * submits a signed operation to plc.directory
56
+ * @param did the did:plc identifier
57
+ * @param operation the signed operation to submit
58
+ * @param options request options
59
+ */
60
+ submitOperation(did: t.DidPlcString, operation: t.OperationOrTombstone, options?: PlcRequestOptions): Promise<void>;
61
+ /**
62
+ * checks if the plc directory is reachable
63
+ * @param options request options
64
+ * @returns true if reachable
65
+ */
66
+ ping(options?: PlcRequestOptions): Promise<boolean>;
67
+ }
68
+ //# 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;AAkChC,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,CAQxD;CACD"}
package/dist/client.js ADDED
@@ -0,0 +1,127 @@
1
+ import { defs as identityDefs } from '@atcute/identity';
2
+ import { FailedResponseError, isResponseOk, 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
+ const handleDocument = pipe(isResponseOk, parseResponseAsJson(/^application\/(did\+ld\+)?json$/, MAX_RESPONSE_SIZE), validateJsonWith(identityDefs.didDocument, { mode: 'passthrough' }));
7
+ const handlePlcState = pipe(isResponseOk, parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE), validateJsonWith(defs.plcState, { mode: 'passthrough' }));
8
+ const handleOperationLog = pipe(isResponseOk, parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE), validateJsonWith(defs.operationLog, { mode: 'passthrough' }));
9
+ const handleIndexedEntryLog = pipe(isResponseOk, parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE), validateJsonWith(defs.indexedEntryLog, { mode: 'passthrough' }));
10
+ const handleLastOperation = pipe(isResponseOk, parseResponseAsJson(/^application\/json$/, MAX_RESPONSE_SIZE), validateJsonWith(defs.compatibleOperationOrTombstone, { mode: 'passthrough' }));
11
+ /**
12
+ * client for interacting with plc.directory
13
+ */
14
+ export class PlcClient {
15
+ serviceUrl;
16
+ #fetch;
17
+ constructor({ serviceUrl = 'https://plc.directory', fetch: fetchFn = fetch } = {}) {
18
+ this.serviceUrl = serviceUrl;
19
+ this.#fetch = fetchFn;
20
+ }
21
+ /**
22
+ * fetches the DID document for a did:plc
23
+ * @param did the did:plc identifier
24
+ * @param options request options
25
+ * @returns the DID document
26
+ */
27
+ async getDocument(did, options) {
28
+ const url = new URL(`/${encodeURIComponent(did)}`, this.serviceUrl);
29
+ const response = await this.#fetch(url, {
30
+ signal: options?.signal,
31
+ headers: { accept: 'application/did+ld+json,application/json' },
32
+ });
33
+ const { json } = await handleDocument(response);
34
+ return json;
35
+ }
36
+ /**
37
+ * fetches the current identity state for a did:plc
38
+ * @param did the did:plc identifier
39
+ * @param options request options
40
+ * @returns the current plc state
41
+ */
42
+ async getState(did, options) {
43
+ const url = new URL(`/${encodeURIComponent(did)}/data`, this.serviceUrl);
44
+ const response = await this.#fetch(url, {
45
+ signal: options?.signal,
46
+ headers: { accept: 'application/json' },
47
+ });
48
+ const { json } = await handlePlcState(response);
49
+ return json;
50
+ }
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
+ async getOperationLog(did, options) {
58
+ const url = new URL(`/${encodeURIComponent(did)}/log`, this.serviceUrl);
59
+ const response = await this.#fetch(url, {
60
+ signal: options?.signal,
61
+ headers: { accept: 'application/json' },
62
+ });
63
+ const { json } = await handleOperationLog(response);
64
+ return json;
65
+ }
66
+ /**
67
+ * fetches the auditable log for a did:plc (includes CIDs and timestamps)
68
+ * @param did the did:plc identifier
69
+ * @param options request options
70
+ * @returns the indexed entry log
71
+ */
72
+ async getAuditLog(did, options) {
73
+ const url = new URL(`/${encodeURIComponent(did)}/log/audit`, this.serviceUrl);
74
+ const response = await this.#fetch(url, {
75
+ signal: options?.signal,
76
+ headers: { accept: 'application/json' },
77
+ });
78
+ const { json } = await handleIndexedEntryLog(response);
79
+ return json;
80
+ }
81
+ /**
82
+ * fetches the last operation for a did:plc
83
+ * @param did the did:plc identifier
84
+ * @param options request options
85
+ * @returns the last operation or tombstone
86
+ */
87
+ async getLastOperation(did, options) {
88
+ const url = new URL(`/${encodeURIComponent(did)}/log/last`, this.serviceUrl);
89
+ const response = await this.#fetch(url, {
90
+ signal: options?.signal,
91
+ headers: { accept: 'application/json' },
92
+ });
93
+ const { json } = await handleLastOperation(response);
94
+ return json;
95
+ }
96
+ /**
97
+ * submits a signed operation to plc.directory
98
+ * @param did the did:plc identifier
99
+ * @param operation the signed operation to submit
100
+ * @param options request options
101
+ */
102
+ async submitOperation(did, operation, options) {
103
+ const url = new URL(`/${encodeURIComponent(did)}`, this.serviceUrl);
104
+ const response = await this.#fetch(url, {
105
+ method: 'POST',
106
+ signal: options?.signal,
107
+ headers: { 'content-type': 'application/json' },
108
+ body: JSON.stringify(operation),
109
+ });
110
+ if (!response.ok) {
111
+ throw new FailedResponseError(response);
112
+ }
113
+ }
114
+ /**
115
+ * checks if the plc directory is reachable
116
+ * @param options request options
117
+ * @returns true if reachable
118
+ */
119
+ async ping(options) {
120
+ const url = new URL('/_health', this.serviceUrl);
121
+ const response = await this.#fetch(url, {
122
+ signal: options?.signal,
123
+ });
124
+ return response.ok;
125
+ }
126
+ }
127
+ //# 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
@@ -1,27 +1,33 @@
1
1
  import * as t from './types.js';
2
+ /**
3
+ * Validate an incoming operation against soft constraints (length limits, counts, duplicates).
4
+ * This should be used when preparing to submit a new operation to plc.directory.
5
+ * Historical operations should only be validated against hard constraints (structure, signatures, hashes).
6
+ */
7
+ export declare const validateIncomingOp: (op: t.CompatibleOperationOrTombstone) => void;
2
8
  /**
3
9
  * Process an indexed entry by validating it and integrating it into the canonical log.
4
10
  */
5
- 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<{
6
12
  prev: string | null;
7
- ops: t.IndexedEntryWithSigner[];
8
- nullified: t.IndexedEntryWithSigner[];
13
+ ops: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>[];
14
+ nullified: t.IndexedEntryWithSigner<t.CompatibleOperationOrTombstone>[];
9
15
  }>;
10
16
  /**
11
17
  * Process an indexed entry log by sequentially processing each operation.
12
18
  */
13
- export declare const processIndexedEntryLog: (did: t.DidPlcString, ops: t.IndexedEntryLog) => Promise<{
14
- canonical: t.IndexedEntryWithSigner[];
15
- 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>[];
16
22
  }>;
17
23
  /**
18
24
  * Check whether an operation can still be disputed
19
25
  */
20
- export declare const isDisputePeriodActive: (disputed: t.IndexedEntry, now?: number) => boolean;
26
+ export declare const isDisputePeriodActive: (disputed: t.IndexedEntry<t.CompatibleOperationOrTombstone>, now?: number) => boolean;
21
27
  /**
22
28
  * Check if a key is authorized to dispute an operation
23
29
  */
24
- 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;
25
31
  export interface DisputeCandidate {
26
32
  base: t.IndexedEntryWithSigner<t.CompatibleOperation>;
27
33
  disputed: t.IndexedEntryWithSigner;
@@ -29,5 +35,5 @@ export interface DisputeCandidate {
29
35
  /**
30
36
  * Finds operations that can be disputed by a given key
31
37
  */
32
- 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[];
33
39
  //# sourceMappingURL=data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../lib/data.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAGhC;;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,11 +1,103 @@
1
1
  import * as CBOR from '@atcute/cbor';
2
2
  import * as CID from '@atcute/cid';
3
- import { toBase32 } from '@atcute/multibase';
4
- import { toSha256 } from '@atcute/uint8array';
3
+ import { isKeyDid } from '@atcute/identity';
5
4
  import { DISPUTE_WINDOW } from './constants.js';
6
5
  import * as err from './errors.js';
7
6
  import * as t from './types.js';
8
- import { isSignedOperationValid, normalizeOp } from './utils.js';
7
+ import { deriveDidFromGenesisOp, isSignedOperationValid, normalizeOp } from './utils.js';
8
+ // soft constraint limits for incoming operations
9
+ const MAX_OP_BYTES = 4000;
10
+ const MAX_AKA_ENTRIES = 10;
11
+ const MAX_AKA_LENGTH = 258; // max handle length (253) plus at:// prefix (5)
12
+ const MAX_ROTATION_ENTRIES = 10;
13
+ const MAX_SERVICE_ENTRIES = 10;
14
+ const MAX_SERVICE_TYPE_LENGTH = 256;
15
+ const MAX_SERVICE_ENDPOINT_LENGTH = 512;
16
+ const MAX_VERIFICATION_METHOD_ENTRIES = 10;
17
+ const MAX_ID_LENGTH = 32;
18
+ const MAX_DID_KEY_LENGTH = 256; // k256 = 57, BLS12-381 = 143
19
+ /**
20
+ * Validate an incoming operation against soft constraints (length limits, counts, duplicates).
21
+ * This should be used when preparing to submit a new operation to plc.directory.
22
+ * Historical operations should only be validated against hard constraints (structure, signatures, hashes).
23
+ */
24
+ export const validateIncomingOp = (op) => {
25
+ // Check CBOR size limit
26
+ const byteLength = CBOR.encode(op).byteLength;
27
+ if (byteLength > MAX_OP_BYTES) {
28
+ throw new Error(`operation too large (${MAX_OP_BYTES} bytes maximum in cbor encoding)`);
29
+ }
30
+ if (op.type === 'plc_tombstone') {
31
+ return;
32
+ }
33
+ op = normalizeOp(op);
34
+ {
35
+ const alsoKnownAs = op.alsoKnownAs;
36
+ if (alsoKnownAs.length > MAX_AKA_ENTRIES) {
37
+ throw new Error(`too many alsoKnownAs entries (max ${MAX_AKA_ENTRIES})`);
38
+ }
39
+ const alsoKnownAsDupe = new Set();
40
+ for (const aka of alsoKnownAs) {
41
+ if (aka.length > MAX_AKA_LENGTH) {
42
+ throw new Error(`alsoKnownAs entry too long (max ${MAX_AKA_LENGTH}): ${aka}`);
43
+ }
44
+ if (alsoKnownAsDupe.has(aka)) {
45
+ throw new Error(`duplicate alsoKnownAs entry: ${aka}`);
46
+ }
47
+ alsoKnownAsDupe.add(aka);
48
+ }
49
+ }
50
+ {
51
+ const rotationKeys = op.rotationKeys;
52
+ if (rotationKeys.length === 0) {
53
+ throw new Error(`missing rotation keys`);
54
+ }
55
+ if (rotationKeys.length > MAX_ROTATION_ENTRIES) {
56
+ throw new Error(`too many rotationKey entries (max ${MAX_ROTATION_ENTRIES})`);
57
+ }
58
+ const rotationKeyDupe = new Set();
59
+ for (const key of rotationKeys) {
60
+ if (rotationKeyDupe.has(key)) {
61
+ throw new Error(`duplicate rotation key: ${key}`);
62
+ }
63
+ rotationKeyDupe.add(key);
64
+ }
65
+ }
66
+ {
67
+ const services = Object.entries(op.services);
68
+ if (services.length > MAX_SERVICE_ENTRIES) {
69
+ throw new Error(`too many service entries (max ${MAX_SERVICE_ENTRIES})`);
70
+ }
71
+ for (const [id, service] of services) {
72
+ if (id.length > MAX_ID_LENGTH) {
73
+ throw new Error(`service id too long (max ${MAX_ID_LENGTH}): ${id}`);
74
+ }
75
+ if (service.type.length > MAX_SERVICE_TYPE_LENGTH) {
76
+ throw new Error(`service type too long (max ${MAX_SERVICE_TYPE_LENGTH})`);
77
+ }
78
+ if (service.endpoint.length > MAX_SERVICE_ENDPOINT_LENGTH) {
79
+ throw new Error(`service endpoint too long (max ${MAX_SERVICE_ENDPOINT_LENGTH})`);
80
+ }
81
+ }
82
+ }
83
+ {
84
+ const verificationMethods = Object.entries(op.verificationMethods);
85
+ if (verificationMethods.length > MAX_VERIFICATION_METHOD_ENTRIES) {
86
+ throw new Error(`too many verification method entries (max ${MAX_VERIFICATION_METHOD_ENTRIES})`);
87
+ }
88
+ for (const [id, key] of verificationMethods) {
89
+ if (id.length > MAX_ID_LENGTH) {
90
+ throw new Error(`verification method id too long (max ${MAX_ID_LENGTH}): ${id}`);
91
+ }
92
+ if (key.length > MAX_DID_KEY_LENGTH) {
93
+ throw new Error(`verification method key too long (max ${MAX_DID_KEY_LENGTH}): ${key}`);
94
+ }
95
+ if (!isKeyDid(key)) {
96
+ throw new Error(`invalid verification method key: ${key}`);
97
+ }
98
+ }
99
+ }
100
+ };
9
101
  /**
10
102
  * Process an indexed entry by validating it and integrating it into the canonical log.
11
103
  */
@@ -19,11 +111,11 @@ export const processIndexedEntry = async (did, canonical, proposed) => {
19
111
  }
20
112
  // Check if CID and DID matches
21
113
  {
22
- const opBytes = CBOR.encode(proposed.operation);
23
- const expectedDid = `did:plc:${toBase32(await toSha256(opBytes)).slice(0, 24)}`;
114
+ const expectedDid = await deriveDidFromGenesisOp(proposed.operation);
24
115
  if (expectedDid !== did) {
25
116
  throw new err.GenesisHashError(proposed, did);
26
117
  }
118
+ const opBytes = CBOR.encode(proposed.operation);
27
119
  const expectedCid = CID.toString(await CID.create(CID.CODEC_DCBOR, opBytes));
28
120
  if (expectedCid !== proposed.cid) {
29
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":"AAAA,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzF,iDAAiD;AACjD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,gDAAgD;AAC5E,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAC3C,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,kBAAkB,GAAG,GAAG,CAAC,CAAC,6BAA6B;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAoC,EAAQ,EAAE,CAAC;IACjF,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;IAC9C,IAAI,UAAU,GAAG,YAAY,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,kCAAkC,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACjC,OAAO;IACR,CAAC;IAED,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAErB,CAAC;QACA,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;QAEnC,IAAI,WAAW,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,qCAAqC,eAAe,GAAG,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,cAAc,MAAM,GAAG,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IAED,CAAC;QACA,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;QAErC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,qCAAqC,oBAAoB,GAAG,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IAED,CAAC;QACA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,iCAAiC,mBAAmB,GAAG,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACtC,IAAI,EAAE,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,aAAa,MAAM,EAAE,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,8BAA8B,uBAAuB,GAAG,CAAC,CAAC;YAC3E,CAAC;YAED,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,2BAA2B,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,kCAAkC,2BAA2B,GAAG,CAAC,CAAC;YACnF,CAAC;QACF,CAAC;IACF,CAAC;IAED,CAAC;QACA,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAEnE,IAAI,mBAAmB,CAAC,MAAM,GAAG,+BAA+B,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,6CAA6C,+BAA+B,GAAG,CAAC,CAAC;QAClG,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,mBAAmB,EAAE,CAAC;YAC7C,IAAI,EAAE,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,wCAAwC,aAAa,MAAM,EAAE,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,yCAAyC,kBAAkB,MAAM,GAAG,EAAE,CAAC,CAAC;YACzF,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;YAC5D,CAAC;QACF,CAAC;IACF,CAAC;AAAA,CACD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACvC,GAAmB,EACnB,SAAqC,EACrC,QAAwB,EAKtB,EAAE,CAAC;IACL,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,QAAQ,EAAE,yCAAyC,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;QACpF,CAAC;QAED,+BAA+B;QAC/B,CAAC;YACA,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7E,IAAI,WAAW,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QAED,8BAA8B;QAC9B,IAAI,cAAgC,CAAC;QACrC,IAAI,QAAwB,CAAC;QAE7B,CAAC;YACA,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzD,MAAM,EAAE,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAE1E,IAAI,CAAC,EAAE,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;YAED,cAAc,GAAG,YAAY,CAAC;YAC9B,QAAQ,GAAG,EAAE,CAAC;QACf,CAAC;QAED,OAAO;YACN,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,EAAE;YACb,GAAG,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;SAChD,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC;IACzE,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IAC1E,CAAC;IAED,2BAA2B;IAC3B,CAAC;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,IAAI,WAAW,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;IAED,qCAAqC;IACrC,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpC,oEAAoE;IACpE,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,MAAM,cAAc,GAAG,gBAAgB,CAAC,YAAY,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;YACN,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,EAAE;YACb,GAAG,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;SAC9D,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,gEAAgE;IAChE,8BAA8B;IAE9B,wBAAwB;IACxB,oFAAoF;IACpF,KAAK;IACL,IAAI;IAEJ,gDAAgD;IAChD,CAAC;QACA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAErG,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;IAED,gCAAgC;IAChC,CAAC;QACA,IAAI,cAAgC,CAAC;QACrC,IAAI,QAAwB,CAAC;QAE7B,CAAC;YACA,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC;YAE/C,MAAM,aAAa,GAAG,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC5E,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAE/E,MAAM,EAAE,GAAG,MAAM,sBAAsB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9E,IAAI,CAAC,EAAE,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;YAED,cAAc,GAAG,gBAAgB,CAAC;YAClC,QAAQ,GAAG,EAAE,CAAC;QACf,CAAC;QAED,OAAO;YACN,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE,CAAC,GAAG,cAAc,EAAE,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;SACnE,CAAC;IACH,CAAC;AAAA,CACD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAC1C,GAAmB,EACnB,GAAsB,EACsE,EAAE,CAAC;IAC/F,IAAI,SAAS,GAA+B,EAAE,CAAC;IAC/C,IAAI,SAAS,GAA+B,EAAE,CAAC;IAE/C,KAAK,MAAM,SAAS,IAAI,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACpE,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;QAEvB,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAwB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAW,EAAE,CAAC;IAC7F,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5D,OAAO,MAAM,IAAI,cAAc,CAAC;AAAA,CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,IAAqD,EACrD,QAAkC,EAClC,GAAmB,EACT,EAAE,CAAC;IACb,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAErD,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACzC,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,WAAW,KAAK,CAAC,CAAC,IAAI,WAAW,GAAG,aAAa,CAAC;AAAA,CACzD,CAAC;AAOF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAqC,EAAE,GAAmB,EAAE,EAAE,CAAC;IACnG,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAoD,CAAC;QACnF,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAEhC,0DAA0D;QAC1D,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;YAC3C,SAAS;QACV,CAAC;QAED,kEAAkE;QAClE,IAAI,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;IAED,OAAO,UAAU,CAAC;AAAA,CAClB,CAAC"}
@@ -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;AAyBH,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,CAKpC,CAAC;AAoGH,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"}