@atcute/did-plc 0.1.6 → 0.2.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/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/data.d.ts +7 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +94 -0
- package/dist/data.js.map +1 -1
- package/dist/errors.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/typedefs.d.ts +1 -0
- package/dist/typedefs.d.ts.map +1 -0
- package/dist/typedefs.js +8 -86
- package/dist/typedefs.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -0
- package/lib/data.ts +117 -0
- package/lib/typedefs.ts +8 -101
- package/package.json +10 -10
package/dist/constants.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,QAAY,CAAC"}
|
package/dist/data.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
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
|
*/
|
|
@@ -30,3 +36,4 @@ export interface DisputeCandidate {
|
|
|
30
36
|
* Finds operations that can be disputed by a given key
|
|
31
37
|
*/
|
|
32
38
|
export declare const getDisputeCandidates: (canonical: t.IndexedEntryWithSigner[], key: t.DidKeyString) => DisputeCandidate[];
|
|
39
|
+
//# sourceMappingURL=data.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/data.js
CHANGED
|
@@ -1,11 +1,105 @@
|
|
|
1
1
|
import * as CBOR from '@atcute/cbor';
|
|
2
2
|
import * as CID from '@atcute/cid';
|
|
3
|
+
import { isKeyDid } from '@atcute/identity';
|
|
3
4
|
import { toBase32 } from '@atcute/multibase';
|
|
4
5
|
import { toSha256 } from '@atcute/uint8array';
|
|
5
6
|
import { DISPUTE_WINDOW } from './constants.js';
|
|
6
7
|
import * as err from './errors.js';
|
|
7
8
|
import * as t from './types.js';
|
|
8
9
|
import { isSignedOperationValid, normalizeOp } from './utils.js';
|
|
10
|
+
// soft constraint limits for incoming operations
|
|
11
|
+
const MAX_OP_BYTES = 4000;
|
|
12
|
+
const MAX_AKA_ENTRIES = 10;
|
|
13
|
+
const MAX_AKA_LENGTH = 258; // max handle length (253) plus at:// prefix (5)
|
|
14
|
+
const MAX_ROTATION_ENTRIES = 10;
|
|
15
|
+
const MAX_SERVICE_ENTRIES = 10;
|
|
16
|
+
const MAX_SERVICE_TYPE_LENGTH = 256;
|
|
17
|
+
const MAX_SERVICE_ENDPOINT_LENGTH = 512;
|
|
18
|
+
const MAX_VERIFICATION_METHOD_ENTRIES = 10;
|
|
19
|
+
const MAX_ID_LENGTH = 32;
|
|
20
|
+
const MAX_DID_KEY_LENGTH = 256; // k256 = 57, BLS12-381 = 143
|
|
21
|
+
/**
|
|
22
|
+
* Validate an incoming operation against soft constraints (length limits, counts, duplicates).
|
|
23
|
+
* This should be used when preparing to submit a new operation to plc.directory.
|
|
24
|
+
* Historical operations should only be validated against hard constraints (structure, signatures, hashes).
|
|
25
|
+
*/
|
|
26
|
+
export const validateIncomingOp = (op) => {
|
|
27
|
+
// Check CBOR size limit
|
|
28
|
+
const byteLength = CBOR.encode(op).byteLength;
|
|
29
|
+
if (byteLength > MAX_OP_BYTES) {
|
|
30
|
+
throw new Error(`operation too large (${MAX_OP_BYTES} bytes maximum in cbor encoding)`);
|
|
31
|
+
}
|
|
32
|
+
if (op.type === 'plc_tombstone') {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
op = normalizeOp(op);
|
|
36
|
+
{
|
|
37
|
+
const alsoKnownAs = op.alsoKnownAs;
|
|
38
|
+
if (alsoKnownAs.length > MAX_AKA_ENTRIES) {
|
|
39
|
+
throw new Error(`too many alsoKnownAs entries (max ${MAX_AKA_ENTRIES})`);
|
|
40
|
+
}
|
|
41
|
+
const alsoKnownAsDupe = new Set();
|
|
42
|
+
for (const aka of alsoKnownAs) {
|
|
43
|
+
if (aka.length > MAX_AKA_LENGTH) {
|
|
44
|
+
throw new Error(`alsoKnownAs entry too long (max ${MAX_AKA_LENGTH}): ${aka}`);
|
|
45
|
+
}
|
|
46
|
+
if (alsoKnownAsDupe.has(aka)) {
|
|
47
|
+
throw new Error(`duplicate alsoKnownAs entry: ${aka}`);
|
|
48
|
+
}
|
|
49
|
+
alsoKnownAsDupe.add(aka);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
{
|
|
53
|
+
const rotationKeys = op.rotationKeys;
|
|
54
|
+
if (rotationKeys.length === 0) {
|
|
55
|
+
throw new Error(`missing rotation keys`);
|
|
56
|
+
}
|
|
57
|
+
if (rotationKeys.length > MAX_ROTATION_ENTRIES) {
|
|
58
|
+
throw new Error(`too many rotationKey entries (max ${MAX_ROTATION_ENTRIES})`);
|
|
59
|
+
}
|
|
60
|
+
const rotationKeyDupe = new Set();
|
|
61
|
+
for (const key of rotationKeys) {
|
|
62
|
+
if (rotationKeyDupe.has(key)) {
|
|
63
|
+
throw new Error(`duplicate rotation key: ${key}`);
|
|
64
|
+
}
|
|
65
|
+
rotationKeyDupe.add(key);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
{
|
|
69
|
+
const services = Object.entries(op.services);
|
|
70
|
+
if (services.length > MAX_SERVICE_ENTRIES) {
|
|
71
|
+
throw new Error(`too many service entries (max ${MAX_SERVICE_ENTRIES})`);
|
|
72
|
+
}
|
|
73
|
+
for (const [id, service] of services) {
|
|
74
|
+
if (id.length > MAX_ID_LENGTH) {
|
|
75
|
+
throw new Error(`service id too long (max ${MAX_ID_LENGTH}): ${id}`);
|
|
76
|
+
}
|
|
77
|
+
if (service.type.length > MAX_SERVICE_TYPE_LENGTH) {
|
|
78
|
+
throw new Error(`service type too long (max ${MAX_SERVICE_TYPE_LENGTH})`);
|
|
79
|
+
}
|
|
80
|
+
if (service.endpoint.length > MAX_SERVICE_ENDPOINT_LENGTH) {
|
|
81
|
+
throw new Error(`service endpoint too long (max ${MAX_SERVICE_ENDPOINT_LENGTH})`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
{
|
|
86
|
+
const verificationMethods = Object.entries(op.verificationMethods);
|
|
87
|
+
if (verificationMethods.length > MAX_VERIFICATION_METHOD_ENTRIES) {
|
|
88
|
+
throw new Error(`too many verification method entries (max ${MAX_VERIFICATION_METHOD_ENTRIES})`);
|
|
89
|
+
}
|
|
90
|
+
for (const [id, key] of verificationMethods) {
|
|
91
|
+
if (id.length > MAX_ID_LENGTH) {
|
|
92
|
+
throw new Error(`verification method id too long (max ${MAX_ID_LENGTH}): ${id}`);
|
|
93
|
+
}
|
|
94
|
+
if (key.length > MAX_DID_KEY_LENGTH) {
|
|
95
|
+
throw new Error(`verification method key too long (max ${MAX_DID_KEY_LENGTH}): ${key}`);
|
|
96
|
+
}
|
|
97
|
+
if (!isKeyDid(key)) {
|
|
98
|
+
throw new Error(`invalid verification method key: ${key}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
};
|
|
9
103
|
/**
|
|
10
104
|
* Process an indexed entry by validating it and integrating it into the canonical log.
|
|
11
105
|
*/
|
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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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -0,0 +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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +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"}
|
package/dist/typedefs.d.ts
CHANGED
|
@@ -16,3 +16,4 @@ 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
|
+
//# sourceMappingURL=typedefs.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/typedefs.js
CHANGED
|
@@ -34,10 +34,8 @@ const _unsignedLegacyCreateOperation = v.object({
|
|
|
34
34
|
prev: v.null(),
|
|
35
35
|
signingKey: didKeyString,
|
|
36
36
|
recoveryKey: didKeyString,
|
|
37
|
-
handle: v.string()
|
|
38
|
-
service: v
|
|
39
|
-
.string()
|
|
40
|
-
.assert((input) => input.length <= 512, `service endpoint too long (max 512 characters)`),
|
|
37
|
+
handle: v.string(),
|
|
38
|
+
service: v.string(),
|
|
41
39
|
});
|
|
42
40
|
export const unsignedLegacyCreateOperation = _unsignedLegacyCreateOperation;
|
|
43
41
|
export const legacyCreateOperation = _unsignedLegacyCreateOperation.extend({
|
|
@@ -46,92 +44,16 @@ export const legacyCreateOperation = _unsignedLegacyCreateOperation.extend({
|
|
|
46
44
|
// #endregion
|
|
47
45
|
// #region plc_operation
|
|
48
46
|
export const service = v.object({
|
|
49
|
-
type: v.string()
|
|
50
|
-
endpoint: v
|
|
51
|
-
.string()
|
|
52
|
-
.assert((input) => input.length <= 512, `service endpoint too long (max 512 characters)`),
|
|
47
|
+
type: v.string(),
|
|
48
|
+
endpoint: v.string(),
|
|
53
49
|
});
|
|
54
50
|
const _unsignedOperation = v.object({
|
|
55
51
|
type: v.literal('plc_operation'),
|
|
56
52
|
prev: v.string().nullable(),
|
|
57
|
-
rotationKeys: v.array(didKeyString)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
else if (length > 10) {
|
|
63
|
-
return v.err(`too many rotation keys (max 10 keys)`);
|
|
64
|
-
}
|
|
65
|
-
for (let i = 0; i < length; i++) {
|
|
66
|
-
const key = input[i];
|
|
67
|
-
for (let j = 0; j < i; j++) {
|
|
68
|
-
if (input[j] === key) {
|
|
69
|
-
return v.err({
|
|
70
|
-
message: `duplicate "${key}" rotation key`,
|
|
71
|
-
path: [i],
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return v.ok(input);
|
|
77
|
-
}),
|
|
78
|
-
verificationMethods: v.record(permissiveDidKeyString).chain((input) => {
|
|
79
|
-
const length = Object.keys(input).length;
|
|
80
|
-
if (length > 10) {
|
|
81
|
-
return v.err(`too many verification method entries (max 10)`);
|
|
82
|
-
}
|
|
83
|
-
for (const id in input) {
|
|
84
|
-
const key = input[id];
|
|
85
|
-
if (id.length > 32) {
|
|
86
|
-
return v.err({
|
|
87
|
-
message: `verification method id too long (max 32 characters)`,
|
|
88
|
-
path: [id],
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
if (key.length > 256) {
|
|
92
|
-
return v.err({
|
|
93
|
-
message: `verification method key too long (max 256 characters)`,
|
|
94
|
-
path: [id],
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return v.ok(input);
|
|
99
|
-
}),
|
|
100
|
-
alsoKnownAs: v
|
|
101
|
-
.array(v.string().assert((input) => input.length <= 256, `aka entry too long (max 256 characters)`))
|
|
102
|
-
.chain((input) => {
|
|
103
|
-
const length = input.length;
|
|
104
|
-
if (length > 10) {
|
|
105
|
-
return v.err(`too many aka entries (max 10)`);
|
|
106
|
-
}
|
|
107
|
-
for (let i = 0; i < length; i++) {
|
|
108
|
-
const aka = input[i];
|
|
109
|
-
for (let j = 0; j < i; j++) {
|
|
110
|
-
if (input[j] === aka) {
|
|
111
|
-
return v.err({
|
|
112
|
-
message: `duplicate "${aka}" aka entry`,
|
|
113
|
-
path: [i],
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return v.ok(input);
|
|
119
|
-
}),
|
|
120
|
-
services: v.record(service).chain((input) => {
|
|
121
|
-
const length = Object.keys(input).length;
|
|
122
|
-
if (length > 10) {
|
|
123
|
-
return v.err(`too many service entries (max 10)`);
|
|
124
|
-
}
|
|
125
|
-
for (const id in input) {
|
|
126
|
-
if (id.length > 32) {
|
|
127
|
-
return v.err({
|
|
128
|
-
message: `service id too long (max 32 characters)`,
|
|
129
|
-
path: [id],
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return v.ok(input);
|
|
134
|
-
}),
|
|
53
|
+
rotationKeys: v.array(didKeyString),
|
|
54
|
+
verificationMethods: v.record(permissiveDidKeyString),
|
|
55
|
+
alsoKnownAs: v.array(v.string()),
|
|
56
|
+
services: v.record(service),
|
|
135
57
|
});
|
|
136
58
|
export const unsignedOperation = _unsignedOperation;
|
|
137
59
|
export const operation = _unsignedOperation.extend({
|
package/dist/typedefs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typedefs.js","sourceRoot":"","sources":["../lib/typedefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAEhC,kBAAkB;AAClB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtD,IAAI,CAAC;QACJ,WAAW,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAChC,OAAO,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,CAAC,EAAE,CAAC,KAAuB,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC5C,IAAI,CAAC;QACJ,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AACH,aAAa;AAEb,iBAAiB;AACjB,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;IACd,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,YAAY;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"typedefs.js","sourceRoot":"","sources":["../lib/typedefs.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -0,0 +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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export declare const wrapHttpPrefix: (str: string) => string;
|
|
|
3
3
|
export declare const wrapAtprotoPrefix: (str: string) => string;
|
|
4
4
|
export declare const normalizeOp: (op: t.CompatibleOperation) => t.Operation;
|
|
5
5
|
export declare const isSignedOperationValid: (allowedKeys: t.DidKeyString[], op: t.CompatibleOperationOrTombstone) => Promise<t.DidKeyString | null>;
|
|
6
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +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"}
|
package/lib/data.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as CBOR from '@atcute/cbor';
|
|
2
2
|
import * as CID from '@atcute/cid';
|
|
3
|
+
import { isKeyDid } from '@atcute/identity';
|
|
3
4
|
import { toBase32 } from '@atcute/multibase';
|
|
4
5
|
import { toSha256 } from '@atcute/uint8array';
|
|
5
6
|
|
|
@@ -8,6 +9,122 @@ import * as err from './errors.js';
|
|
|
8
9
|
import * as t from './types.js';
|
|
9
10
|
import { isSignedOperationValid, normalizeOp } from './utils.js';
|
|
10
11
|
|
|
12
|
+
// soft constraint limits for incoming operations
|
|
13
|
+
const MAX_OP_BYTES = 4000;
|
|
14
|
+
const MAX_AKA_ENTRIES = 10;
|
|
15
|
+
const MAX_AKA_LENGTH = 258; // max handle length (253) plus at:// prefix (5)
|
|
16
|
+
const MAX_ROTATION_ENTRIES = 10;
|
|
17
|
+
const MAX_SERVICE_ENTRIES = 10;
|
|
18
|
+
const MAX_SERVICE_TYPE_LENGTH = 256;
|
|
19
|
+
const MAX_SERVICE_ENDPOINT_LENGTH = 512;
|
|
20
|
+
const MAX_VERIFICATION_METHOD_ENTRIES = 10;
|
|
21
|
+
const MAX_ID_LENGTH = 32;
|
|
22
|
+
const MAX_DID_KEY_LENGTH = 256; // k256 = 57, BLS12-381 = 143
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Validate an incoming operation against soft constraints (length limits, counts, duplicates).
|
|
26
|
+
* This should be used when preparing to submit a new operation to plc.directory.
|
|
27
|
+
* Historical operations should only be validated against hard constraints (structure, signatures, hashes).
|
|
28
|
+
*/
|
|
29
|
+
export const validateIncomingOp = (op: t.CompatibleOperationOrTombstone): void => {
|
|
30
|
+
// Check CBOR size limit
|
|
31
|
+
const byteLength = CBOR.encode(op).byteLength;
|
|
32
|
+
if (byteLength > MAX_OP_BYTES) {
|
|
33
|
+
throw new Error(`operation too large (${MAX_OP_BYTES} bytes maximum in cbor encoding)`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (op.type === 'plc_tombstone') {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
op = normalizeOp(op);
|
|
41
|
+
|
|
42
|
+
{
|
|
43
|
+
const alsoKnownAs = op.alsoKnownAs;
|
|
44
|
+
|
|
45
|
+
if (alsoKnownAs.length > MAX_AKA_ENTRIES) {
|
|
46
|
+
throw new Error(`too many alsoKnownAs entries (max ${MAX_AKA_ENTRIES})`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const alsoKnownAsDupe = new Set<string>();
|
|
50
|
+
for (const aka of alsoKnownAs) {
|
|
51
|
+
if (aka.length > MAX_AKA_LENGTH) {
|
|
52
|
+
throw new Error(`alsoKnownAs entry too long (max ${MAX_AKA_LENGTH}): ${aka}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (alsoKnownAsDupe.has(aka)) {
|
|
56
|
+
throw new Error(`duplicate alsoKnownAs entry: ${aka}`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
alsoKnownAsDupe.add(aka);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
{
|
|
64
|
+
const rotationKeys = op.rotationKeys;
|
|
65
|
+
|
|
66
|
+
if (rotationKeys.length === 0) {
|
|
67
|
+
throw new Error(`missing rotation keys`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (rotationKeys.length > MAX_ROTATION_ENTRIES) {
|
|
71
|
+
throw new Error(`too many rotationKey entries (max ${MAX_ROTATION_ENTRIES})`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const rotationKeyDupe = new Set<string>();
|
|
75
|
+
for (const key of rotationKeys) {
|
|
76
|
+
if (rotationKeyDupe.has(key)) {
|
|
77
|
+
throw new Error(`duplicate rotation key: ${key}`);
|
|
78
|
+
}
|
|
79
|
+
rotationKeyDupe.add(key);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
{
|
|
84
|
+
const services = Object.entries(op.services);
|
|
85
|
+
|
|
86
|
+
if (services.length > MAX_SERVICE_ENTRIES) {
|
|
87
|
+
throw new Error(`too many service entries (max ${MAX_SERVICE_ENTRIES})`);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
for (const [id, service] of services) {
|
|
91
|
+
if (id.length > MAX_ID_LENGTH) {
|
|
92
|
+
throw new Error(`service id too long (max ${MAX_ID_LENGTH}): ${id}`);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (service.type.length > MAX_SERVICE_TYPE_LENGTH) {
|
|
96
|
+
throw new Error(`service type too long (max ${MAX_SERVICE_TYPE_LENGTH})`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (service.endpoint.length > MAX_SERVICE_ENDPOINT_LENGTH) {
|
|
100
|
+
throw new Error(`service endpoint too long (max ${MAX_SERVICE_ENDPOINT_LENGTH})`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
{
|
|
106
|
+
const verificationMethods = Object.entries(op.verificationMethods);
|
|
107
|
+
|
|
108
|
+
if (verificationMethods.length > MAX_VERIFICATION_METHOD_ENTRIES) {
|
|
109
|
+
throw new Error(`too many verification method entries (max ${MAX_VERIFICATION_METHOD_ENTRIES})`);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
for (const [id, key] of verificationMethods) {
|
|
113
|
+
if (id.length > MAX_ID_LENGTH) {
|
|
114
|
+
throw new Error(`verification method id too long (max ${MAX_ID_LENGTH}): ${id}`);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (key.length > MAX_DID_KEY_LENGTH) {
|
|
118
|
+
throw new Error(`verification method key too long (max ${MAX_DID_KEY_LENGTH}): ${key}`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (!isKeyDid(key)) {
|
|
122
|
+
throw new Error(`invalid verification method key: ${key}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
11
128
|
/**
|
|
12
129
|
* Process an indexed entry by validating it and integrating it into the canonical log.
|
|
13
130
|
*/
|
package/lib/typedefs.ts
CHANGED
|
@@ -42,10 +42,8 @@ const _unsignedLegacyCreateOperation = v.object({
|
|
|
42
42
|
prev: v.null(),
|
|
43
43
|
signingKey: didKeyString,
|
|
44
44
|
recoveryKey: didKeyString,
|
|
45
|
-
handle: v.string()
|
|
46
|
-
service: v
|
|
47
|
-
.string()
|
|
48
|
-
.assert((input) => input.length <= 512, `service endpoint too long (max 512 characters)`),
|
|
45
|
+
handle: v.string(),
|
|
46
|
+
service: v.string(),
|
|
49
47
|
}) satisfies v.Type<t.UnsignedLegacyCreateOperation>;
|
|
50
48
|
|
|
51
49
|
export const unsignedLegacyCreateOperation: v.Type<t.UnsignedLegacyCreateOperation> =
|
|
@@ -58,108 +56,17 @@ export const legacyCreateOperation: v.Type<t.LegacyCreateOperation> = _unsignedL
|
|
|
58
56
|
|
|
59
57
|
// #region plc_operation
|
|
60
58
|
export const service: v.Type<t.Service> = v.object({
|
|
61
|
-
type: v.string()
|
|
62
|
-
endpoint: v
|
|
63
|
-
.string()
|
|
64
|
-
.assert((input) => input.length <= 512, `service endpoint too long (max 512 characters)`),
|
|
59
|
+
type: v.string(),
|
|
60
|
+
endpoint: v.string(),
|
|
65
61
|
});
|
|
66
62
|
|
|
67
63
|
const _unsignedOperation = v.object({
|
|
68
64
|
type: v.literal('plc_operation'),
|
|
69
65
|
prev: v.string().nullable(),
|
|
70
|
-
rotationKeys: v.array(didKeyString)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return v.err(`missing rotation keys`);
|
|
75
|
-
} else if (length > 10) {
|
|
76
|
-
return v.err(`too many rotation keys (max 10 keys)`);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
for (let i = 0; i < length; i++) {
|
|
80
|
-
const key = input[i];
|
|
81
|
-
|
|
82
|
-
for (let j = 0; j < i; j++) {
|
|
83
|
-
if (input[j] === key) {
|
|
84
|
-
return v.err({
|
|
85
|
-
message: `duplicate "${key}" rotation key`,
|
|
86
|
-
path: [i],
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return v.ok(input);
|
|
93
|
-
}),
|
|
94
|
-
verificationMethods: v.record(permissiveDidKeyString).chain((input) => {
|
|
95
|
-
const length = Object.keys(input).length;
|
|
96
|
-
|
|
97
|
-
if (length > 10) {
|
|
98
|
-
return v.err(`too many verification method entries (max 10)`);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
for (const id in input) {
|
|
102
|
-
const key = input[id];
|
|
103
|
-
|
|
104
|
-
if (id.length > 32) {
|
|
105
|
-
return v.err({
|
|
106
|
-
message: `verification method id too long (max 32 characters)`,
|
|
107
|
-
path: [id],
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (key.length > 256) {
|
|
112
|
-
return v.err({
|
|
113
|
-
message: `verification method key too long (max 256 characters)`,
|
|
114
|
-
path: [id],
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return v.ok(input);
|
|
120
|
-
}),
|
|
121
|
-
alsoKnownAs: v
|
|
122
|
-
.array(v.string().assert((input) => input.length <= 256, `aka entry too long (max 256 characters)`))
|
|
123
|
-
.chain((input) => {
|
|
124
|
-
const length = input.length;
|
|
125
|
-
|
|
126
|
-
if (length > 10) {
|
|
127
|
-
return v.err(`too many aka entries (max 10)`);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
for (let i = 0; i < length; i++) {
|
|
131
|
-
const aka = input[i];
|
|
132
|
-
|
|
133
|
-
for (let j = 0; j < i; j++) {
|
|
134
|
-
if (input[j] === aka) {
|
|
135
|
-
return v.err({
|
|
136
|
-
message: `duplicate "${aka}" aka entry`,
|
|
137
|
-
path: [i],
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return v.ok(input);
|
|
144
|
-
}),
|
|
145
|
-
services: v.record(service).chain((input) => {
|
|
146
|
-
const length = Object.keys(input).length;
|
|
147
|
-
|
|
148
|
-
if (length > 10) {
|
|
149
|
-
return v.err(`too many service entries (max 10)`);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
for (const id in input) {
|
|
153
|
-
if (id.length > 32) {
|
|
154
|
-
return v.err({
|
|
155
|
-
message: `service id too long (max 32 characters)`,
|
|
156
|
-
path: [id],
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
return v.ok(input);
|
|
162
|
-
}),
|
|
66
|
+
rotationKeys: v.array(didKeyString),
|
|
67
|
+
verificationMethods: v.record(permissiveDidKeyString),
|
|
68
|
+
alsoKnownAs: v.array(v.string()),
|
|
69
|
+
services: v.record(service),
|
|
163
70
|
}) satisfies v.Type<t.UnsignedOperation>;
|
|
164
71
|
|
|
165
72
|
export const unsignedOperation: v.Type<t.UnsignedOperation> = _unsignedOperation;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/did-plc",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"description": "validations, type definitions and schemas for did:plc operations",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"atproto",
|
|
@@ -24,17 +24,17 @@
|
|
|
24
24
|
},
|
|
25
25
|
"sideEffects": false,
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@types/bun": "^1.
|
|
27
|
+
"@types/bun": "^1.3.1"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@badrap/valita": "^0.4.
|
|
31
|
-
"@atcute/cbor": "^2.2.
|
|
32
|
-
"@atcute/cid": "^2.2.
|
|
33
|
-
"@atcute/crypto": "^2.2.
|
|
34
|
-
"@atcute/identity": "^1.
|
|
35
|
-
"@atcute/lexicons": "^1.
|
|
36
|
-
"@atcute/multibase": "^1.1.
|
|
37
|
-
"@atcute/uint8array": "^1.0.
|
|
30
|
+
"@badrap/valita": "^0.4.6",
|
|
31
|
+
"@atcute/cbor": "^2.2.7",
|
|
32
|
+
"@atcute/cid": "^2.2.6",
|
|
33
|
+
"@atcute/crypto": "^2.2.6",
|
|
34
|
+
"@atcute/identity": "^1.1.1",
|
|
35
|
+
"@atcute/lexicons": "^1.2.2",
|
|
36
|
+
"@atcute/multibase": "^1.1.6",
|
|
37
|
+
"@atcute/uint8array": "^1.0.5"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
40
|
"build": "tsc --project tsconfig.build.json",
|