@silvermoon-work/ipfs-payload 0.0.0-stage → 0.1.0-rc.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/LICENSE +21 -0
- package/README.md +102 -2
- package/dist/content-ref.d.ts +9 -0
- package/dist/content-ref.d.ts.map +1 -0
- package/dist/content-ref.js +19 -0
- package/dist/content-ref.js.map +1 -0
- package/dist/contract.d.ts +9 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +280 -0
- package/dist/contract.js.map +1 -0
- package/dist/dag-cbor.d.ts +7 -0
- package/dist/dag-cbor.d.ts.map +1 -0
- package/dist/dag-cbor.js +36 -0
- package/dist/dag-cbor.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +192 -0
- package/dist/index.js.map +1 -0
- package/dist/paths.d.ts +20 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +161 -0
- package/dist/paths.js.map +1 -0
- package/dist/reference.d.ts +15 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.js +14 -0
- package/dist/reference.js.map +1 -0
- package/dist/schema.d.ts +6 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +196 -0
- package/dist/schema.js.map +1 -0
- package/dist/typebox.d.ts +3 -0
- package/dist/typebox.d.ts.map +1 -0
- package/dist/typebox.js +3 -0
- package/dist/typebox.js.map +1 -0
- package/dist/value.d.ts +25 -0
- package/dist/value.d.ts.map +1 -0
- package/dist/value.js +103 -0
- package/dist/value.js.map +1 -0
- package/package.json +56 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 preset-pnpm-monorepo contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,103 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @silvermoon-work/ipfs-payload
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Pure typed references, self-contained JSON payloads and canonical DAG-CBOR.
|
|
4
|
+
No Store, Task SDK, Engine, file-tree dependency, network, pin or content access.
|
|
5
|
+
|
|
6
|
+
```ts
|
|
7
|
+
import { Type, type Static } from "@sinclair/typebox";
|
|
8
|
+
import {
|
|
9
|
+
ContentRef, ContentRefSchema, encodePayload, decodePayload,
|
|
10
|
+
encodePayloadBlock, decodePayloadBlock,
|
|
11
|
+
} from "@silvermoon-work/ipfs-payload";
|
|
12
|
+
|
|
13
|
+
const schema = Type.Object({
|
|
14
|
+
document: ContentRefSchema(),
|
|
15
|
+
label: Type.String(),
|
|
16
|
+
});
|
|
17
|
+
const parameters: Static<typeof schema> = {
|
|
18
|
+
document: ContentRef.fromCID(targetCid),
|
|
19
|
+
label: targetCid.toString(), // ordinary business text
|
|
20
|
+
};
|
|
21
|
+
const json = encodePayload(schema, parameters);
|
|
22
|
+
// { data: { document: "...", label: "..." }, cidPaths: ['$["document"]'] }
|
|
23
|
+
const restored = decodePayload(json, schema);
|
|
24
|
+
restored.document.cid; // native CID; no read methods or path
|
|
25
|
+
const block = await encodePayloadBlock(json, schema);
|
|
26
|
+
const roundTrip = await decodePayloadBlock(block.bytes, schema, { cid: block.cid });
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`ContentRefSchema()` is a TypeBox extension with `Static<> = ContentRef`, a
|
|
30
|
+
registered author-side TypeBox validator, and serializable
|
|
31
|
+
`{ type: "string", "x-ipfs-content-ref": true }` semantics. The package's codecs
|
|
32
|
+
validate this keyword and the complete business schema; an unrelated JSON
|
|
33
|
+
Schema validator ignoring the keyword is **not** sufficient. Current Task
|
|
34
|
+
Builder/Engine protocol integration is a later phase, not added by this package.
|
|
35
|
+
Author fields require `ContentRef.fromCID(CID | string)`, not untyped strings,
|
|
36
|
+
lookalike `{ cid }` objects or bare native CIDs. References retain immutable
|
|
37
|
+
identity only; reading an exposed CID cannot mutate the original identity.
|
|
38
|
+
|
|
39
|
+
## Conversions and validation
|
|
40
|
+
|
|
41
|
+
- `encodePayload(schema, author, options?)` produces `IpfsPayload<JsonOf<T>>`.
|
|
42
|
+
- `validatePayload(unknown, schema?, options?)` validates and snapshots the
|
|
43
|
+
exact `{ data, cidPaths }` envelope.
|
|
44
|
+
- `decodePayload(payload, schema?, options?)` restores `ContentRef` only at
|
|
45
|
+
marked positions. Without a schema it validates the self-contained descriptor,
|
|
46
|
+
not an absent business contract; admission must supply the contract.
|
|
47
|
+
- `toDagPayload` / `fromDagPayload` convert the same envelope between JSON and
|
|
48
|
+
logical DAG values. Marked fields become genuine `multiformats` CID links.
|
|
49
|
+
Every actual link must agree with the metadata, in both directions.
|
|
50
|
+
- `encodePayloadBlock` returns `{ cid, bytes }` using DAG-CBOR and SHA-256.
|
|
51
|
+
`decodePayloadBlock` rejects noncanonical encodings and, when supplied,
|
|
52
|
+
verifies `options.cid`. Neither function stores anything.
|
|
53
|
+
|
|
54
|
+
All conversions snapshot without invoking getters, `toJSON` or prototype
|
|
55
|
+
properties. Ordinary strings, `{ cid: "..." }`, `{ "/": "..." }` and even
|
|
56
|
+
CID-shaped business objects stay ordinary. `./dag-cbor` exposes `encodeDagCbor`
|
|
57
|
+
plus the standard codec `code`/`decode` for generic structured blocks: it reuses
|
|
58
|
+
the standard DAG-CBOR encoder options with identity-only CID detection, rather
|
|
59
|
+
than its permissive object-shape detection. `asNativeCID` rebases native instances
|
|
60
|
+
from separately loaded modern multiformats modules using data descriptors, never
|
|
61
|
+
getters or plain JSON object shapes. This subpath loads no TypeBox/AJV.
|
|
62
|
+
|
|
63
|
+
Finite JSON primitives, objects, arrays and tuples are supported. Sparse arrays,
|
|
64
|
+
undefined, custom prototypes, cycles, nonfinite numbers, negative zero, unsafe
|
|
65
|
+
integers and malformed Unicode fail rather than silently changing on round trip.
|
|
66
|
+
References may contain syntactically valid CIDs; host codec/hash allowlists and
|
|
67
|
+
target integrity/availability are separate Store responsibilities.
|
|
68
|
+
|
|
69
|
+
## Contracts and bounded paths
|
|
70
|
+
|
|
71
|
+
Supported schemas are the JSON-compatible TypeBox primitives, literals/enums,
|
|
72
|
+
objects, optional properties, homogeneous arrays, tuples, and unions. Common
|
|
73
|
+
JSON Schema value constraints are enforced by AJV in strict mode. Reference
|
|
74
|
+
unions require uniquely distinguishing **required literal object properties**;
|
|
75
|
+
direct `ContentRef | string`, optional/duplicate discriminators and ambiguous
|
|
76
|
+
branches fail. Reference-bearing non-object unions (including nullable direct
|
|
77
|
+
refs) are intentionally unsupported; use a tagged object union. `$ref`, recursive
|
|
78
|
+
schemas, transforms, intersections, patternProperties, formats and schema-valued
|
|
79
|
+
tuple additionalItems are rejected explicitly, not ignored.
|
|
80
|
+
|
|
81
|
+
Paths are relative to `data`. `parseCidPath` accepts only `$`, bracket properties,
|
|
82
|
+
nonnegative fixed array indices, array `[*]`, and array literal filters such as
|
|
83
|
+
`$["items"][?@["kind"] == "reference"]["value"]`. Quoted strings may use single
|
|
84
|
+
or double quotes with JSON escapes. No recursive descent, slices, functions,
|
|
85
|
+
logical expressions, evaluation or arbitrary query scripts are supported.
|
|
86
|
+
|
|
87
|
+
Encoding derives paths from the contract **and actual discriminator branches**.
|
|
88
|
+
It uses wildcards/filters only when they match no extra positions, otherwise
|
|
89
|
+
falls back to concrete indices. Re-encoding recomposed results recalculates
|
|
90
|
+
positions. Validation compares the exact selected location sets; missing, extra,
|
|
91
|
+
duplicate or overlapping matches fail. Optional/empty paths may match nothing;
|
|
92
|
+
with a contract such zero-match paths must be schema-declared.
|
|
93
|
+
|
|
94
|
+
`options.limits` may bound path count (default 1,024), each path's length (4,096),
|
|
95
|
+
structure/path depth (64), cumulative visited/evaluated nodes (100,000), and
|
|
96
|
+
JSON/encoded block bytes (2 MiB). Schema inspection and repeated path evaluation
|
|
97
|
+
consume the same operation budget. Canonical encoding fixes CBOR map ordering,
|
|
98
|
+
numbers and CID tags, not the semantic equivalence of differently written
|
|
99
|
+
but valid path expressions. Fixed byte/CID vectors are in `test/payload.test.ts`.
|
|
100
|
+
|
|
101
|
+
Encoding does not prove targets exist; pinning does not commit a business fact.
|
|
102
|
+
SQLite remains the authority. Finalized RunHistory assembly, retention intent
|
|
103
|
+
management and Task protocol switching are outside this foundation package.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CID } from "multiformats/cid";
|
|
2
|
+
/** Immutable identity only; no reads, paths, credentials or host authority. */
|
|
3
|
+
export declare class ContentRef {
|
|
4
|
+
#private;
|
|
5
|
+
private constructor();
|
|
6
|
+
static fromCID(value: CID | string): ContentRef;
|
|
7
|
+
get cid(): CID;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=content-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-ref.d.ts","sourceRoot":"","sources":["../src/content-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,+EAA+E;AAC/E,qBAAa,UAAU;;IAErB,OAAO;IAIP,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU;IAK/C,IAAI,GAAG,IAAI,GAAG,CAEb;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CID } from "multiformats/cid";
|
|
2
|
+
/** Immutable identity only; no reads, paths, credentials or host authority. */
|
|
3
|
+
export class ContentRef {
|
|
4
|
+
#value;
|
|
5
|
+
constructor(cid) {
|
|
6
|
+
this.#value = cid.toString();
|
|
7
|
+
Object.freeze(this);
|
|
8
|
+
}
|
|
9
|
+
static fromCID(value) {
|
|
10
|
+
const cid = typeof value === "string" ? CID.parse(value) : CID.asCID(value);
|
|
11
|
+
if (!cid)
|
|
12
|
+
throw new Error("Expected a CID.");
|
|
13
|
+
return new ContentRef(CID.decode(cid.bytes));
|
|
14
|
+
}
|
|
15
|
+
get cid() {
|
|
16
|
+
return CID.parse(this.#value);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=content-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-ref.js","sourceRoot":"","sources":["../src/content-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,OAAO,UAAU;IACZ,MAAM,CAAS;IACxB,YAAoB,GAAQ;QAC1B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,KAAmB;QAChC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC7C,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,GAAG;QACL,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Ajv2020 } from "ajv/dist/2020.js";
|
|
2
|
+
import { Budget, type JsonValue } from "./value.js";
|
|
3
|
+
export declare function addContentRefKeyword(ajv: Ajv2020): void;
|
|
4
|
+
/** Locate ContentRef positions using the Task JSON Schema dialect; never the P1 keyword allowlist. */
|
|
5
|
+
export declare function inspectTaskSchema(input: unknown, data: JsonValue, budget: Budget, validate?: (data: JsonValue) => void): {
|
|
6
|
+
expected: Map<string, string>;
|
|
7
|
+
rules: Set<string>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAA0B,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAkC5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAEvD;AAmCD,sGAAsG;AACtG,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI;;;EAsQrC"}
|
package/dist/contract.js
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { Ajv2020 } from "ajv/dist/2020.js";
|
|
2
|
+
import { Budget, propertyPath, snapshot } from "./value.js";
|
|
3
|
+
const metadata = new Set([
|
|
4
|
+
"$schema",
|
|
5
|
+
"$id",
|
|
6
|
+
"$anchor",
|
|
7
|
+
"$comment",
|
|
8
|
+
"title",
|
|
9
|
+
"description",
|
|
10
|
+
"default",
|
|
11
|
+
"examples",
|
|
12
|
+
"readOnly",
|
|
13
|
+
"writeOnly",
|
|
14
|
+
"deprecated",
|
|
15
|
+
]);
|
|
16
|
+
export function addContentRefKeyword(ajv) {
|
|
17
|
+
ajv.addKeyword({ keyword: "x-ipfs-content-ref", schemaType: "boolean", errors: false });
|
|
18
|
+
}
|
|
19
|
+
function record(value) {
|
|
20
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
21
|
+
}
|
|
22
|
+
function pointer(root, ref, budget, depth) {
|
|
23
|
+
budget.visit(depth);
|
|
24
|
+
if (typeof ref !== "string" || !ref.startsWith("#") || (ref !== "#" && !ref.startsWith("#/")))
|
|
25
|
+
throw new Error("Only local schema references are supported.");
|
|
26
|
+
if (ref === "#")
|
|
27
|
+
return root;
|
|
28
|
+
let node = root;
|
|
29
|
+
for (const part of ref.slice(2).split("/")) {
|
|
30
|
+
const key = part.replaceAll("~1", "/").replaceAll("~0", "~");
|
|
31
|
+
if (!node || typeof node !== "object" || !Object.hasOwn(node, key))
|
|
32
|
+
throw new Error("Unresolved local schema reference.");
|
|
33
|
+
node = node[key];
|
|
34
|
+
}
|
|
35
|
+
if (typeof node === "boolean")
|
|
36
|
+
return node;
|
|
37
|
+
if (!record(node))
|
|
38
|
+
throw new Error("Reference target is not a schema location.");
|
|
39
|
+
return node;
|
|
40
|
+
}
|
|
41
|
+
function extras(schema) {
|
|
42
|
+
const rest = {};
|
|
43
|
+
for (const [key, value] of Object.entries(schema))
|
|
44
|
+
if (key !== "$ref" && !metadata.has(key))
|
|
45
|
+
Object.defineProperty(rest, key, { value, enumerable: true });
|
|
46
|
+
return rest;
|
|
47
|
+
}
|
|
48
|
+
function isRef(schema) {
|
|
49
|
+
return record(schema) && schema["x-ipfs-content-ref"] === true;
|
|
50
|
+
}
|
|
51
|
+
/** Locate ContentRef positions using the Task JSON Schema dialect; never the P1 keyword allowlist. */
|
|
52
|
+
export function inspectTaskSchema(input, data, budget, validate) {
|
|
53
|
+
const root = snapshot(input, budget, undefined, true);
|
|
54
|
+
budget.bytes(root);
|
|
55
|
+
if (validate)
|
|
56
|
+
validate(data);
|
|
57
|
+
else {
|
|
58
|
+
const ajv = new Ajv2020({
|
|
59
|
+
strict: true,
|
|
60
|
+
strictTuples: false,
|
|
61
|
+
allowUnionTypes: true,
|
|
62
|
+
validateFormats: false,
|
|
63
|
+
ownProperties: true,
|
|
64
|
+
allErrors: false,
|
|
65
|
+
});
|
|
66
|
+
addContentRefKeyword(ajv);
|
|
67
|
+
if (!ajv.validateSchema(root))
|
|
68
|
+
throw new Error("Invalid payload schema.");
|
|
69
|
+
const check = ajv.compile(root);
|
|
70
|
+
if (!check(data))
|
|
71
|
+
throw new Error(`Payload does not match schema: ${ajv.errorsText(check.errors)}.`);
|
|
72
|
+
}
|
|
73
|
+
const cache = new WeakMap();
|
|
74
|
+
const resolve = (schema, depth, trail) => {
|
|
75
|
+
budget.visit(depth);
|
|
76
|
+
if (!record(schema) || schema.$ref === undefined)
|
|
77
|
+
return schema;
|
|
78
|
+
const cached = cache.get(schema);
|
|
79
|
+
if (cached)
|
|
80
|
+
return cached;
|
|
81
|
+
if (trail.has(schema))
|
|
82
|
+
throw new Error("Cyclic schema reference.");
|
|
83
|
+
const target = resolve(pointer(root, schema.$ref, budget, depth + 1), depth + 1, new Set(trail).add(schema));
|
|
84
|
+
const rest = extras(schema);
|
|
85
|
+
const combined = Object.keys(rest).length
|
|
86
|
+
? record(target)
|
|
87
|
+
? { allOf: [target, rest] }
|
|
88
|
+
: rest
|
|
89
|
+
: target;
|
|
90
|
+
cache.set(schema, combined);
|
|
91
|
+
return combined;
|
|
92
|
+
};
|
|
93
|
+
const checkRef = (schema) => {
|
|
94
|
+
if (!isRef(schema))
|
|
95
|
+
return false;
|
|
96
|
+
if (schema.type !== "string" ||
|
|
97
|
+
Object.keys(schema).some((key) => !metadata.has(key) &&
|
|
98
|
+
!["type", "x-ipfs-content-ref", "$ref", "$id", "$anchor"].includes(key)))
|
|
99
|
+
throw new Error("Invalid ContentRef schema.");
|
|
100
|
+
return true;
|
|
101
|
+
};
|
|
102
|
+
const unionOf = (schema) => schema.anyOf ?? schema.oneOf;
|
|
103
|
+
const discriminators = new Map();
|
|
104
|
+
const references = new Map();
|
|
105
|
+
const inspect = (schema, depth, trail) => {
|
|
106
|
+
budget.visit(depth);
|
|
107
|
+
schema = resolve(schema, depth, trail);
|
|
108
|
+
if (typeof schema === "boolean") {
|
|
109
|
+
references.set(schema, false);
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
if (checkRef(schema)) {
|
|
113
|
+
references.set(schema, true);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
let hasRefs = false;
|
|
117
|
+
if (schema.allOf) {
|
|
118
|
+
let refNodes = 0;
|
|
119
|
+
for (const child of schema.allOf) {
|
|
120
|
+
const resolved = resolve(child, depth + 1, trail);
|
|
121
|
+
if (checkRef(resolved))
|
|
122
|
+
refNodes++;
|
|
123
|
+
hasRefs = inspect(child, depth + 1, trail) || hasRefs;
|
|
124
|
+
}
|
|
125
|
+
if (refNodes &&
|
|
126
|
+
schema.allOf.some((child) => {
|
|
127
|
+
const resolved = resolve(child, depth + 1, trail);
|
|
128
|
+
return (record(resolved) &&
|
|
129
|
+
!checkRef(resolved) &&
|
|
130
|
+
!!(resolved.properties || resolved.items || resolved.prefixItems || unionOf(resolved)));
|
|
131
|
+
}))
|
|
132
|
+
throw new Error("Reference unions require a unique required literal discriminator.");
|
|
133
|
+
}
|
|
134
|
+
for (const child of Object.values(schema.properties ?? {}))
|
|
135
|
+
hasRefs = inspect(child, depth + 1, trail) || hasRefs;
|
|
136
|
+
if (record(schema.additionalProperties))
|
|
137
|
+
hasRefs = inspect(schema.additionalProperties, depth + 1, trail) || hasRefs;
|
|
138
|
+
const prefix = schema.prefixItems ?? (Array.isArray(schema.items) ? schema.items : undefined);
|
|
139
|
+
if (prefix)
|
|
140
|
+
for (const child of prefix)
|
|
141
|
+
hasRefs = inspect(child, depth + 1, trail) || hasRefs;
|
|
142
|
+
if (schema.items && !Array.isArray(schema.items))
|
|
143
|
+
hasRefs = inspect(schema.items, depth + 1, trail) || hasRefs;
|
|
144
|
+
if (record(schema.additionalItems))
|
|
145
|
+
throw new Error("Schema-valued additionalItems are unsupported; use a homogeneous array.");
|
|
146
|
+
const options = unionOf(schema);
|
|
147
|
+
if (options) {
|
|
148
|
+
let unionRefs = false;
|
|
149
|
+
for (const branch of options)
|
|
150
|
+
unionRefs = inspect(branch, depth + 1, trail) || unionRefs;
|
|
151
|
+
if (unionRefs) {
|
|
152
|
+
const first = options[0];
|
|
153
|
+
const key = record(first) &&
|
|
154
|
+
Object.keys(first.properties ?? {}).find((key) => {
|
|
155
|
+
const literals = new Set();
|
|
156
|
+
for (const branch of options) {
|
|
157
|
+
const resolved = resolve(branch, depth + 1, trail);
|
|
158
|
+
const property = record(resolved) ? resolved.properties?.[key] : undefined;
|
|
159
|
+
const field = property ? resolve(property, depth + 2, trail) : undefined;
|
|
160
|
+
if (!record(resolved) ||
|
|
161
|
+
!resolved.required?.includes(key) ||
|
|
162
|
+
!record(field) ||
|
|
163
|
+
!Object.hasOwn(field, "const") ||
|
|
164
|
+
(field.const !== null && typeof field.const === "object") ||
|
|
165
|
+
field["x-ipfs-content-ref"] ||
|
|
166
|
+
unionOf(resolved))
|
|
167
|
+
return false;
|
|
168
|
+
const literal = JSON.stringify(field.const);
|
|
169
|
+
if (literals.has(literal))
|
|
170
|
+
return false;
|
|
171
|
+
literals.add(literal);
|
|
172
|
+
}
|
|
173
|
+
return true;
|
|
174
|
+
});
|
|
175
|
+
if (!key)
|
|
176
|
+
throw new Error("Reference unions require a unique required literal discriminator.");
|
|
177
|
+
discriminators.set(schema, key);
|
|
178
|
+
}
|
|
179
|
+
hasRefs = hasRefs || unionRefs;
|
|
180
|
+
}
|
|
181
|
+
if (options &&
|
|
182
|
+
(schema.properties || schema.items || schema.prefixItems || schema.additionalProperties))
|
|
183
|
+
throw new Error("Reference traversal does not support union structural siblings.");
|
|
184
|
+
references.set(schema, hasRefs);
|
|
185
|
+
return hasRefs;
|
|
186
|
+
};
|
|
187
|
+
inspect(root, 0, new Set());
|
|
188
|
+
const expected = new Map();
|
|
189
|
+
const rules = new Set();
|
|
190
|
+
const selected = (schema, value) => {
|
|
191
|
+
const key = discriminators.get(schema);
|
|
192
|
+
const options = unionOf(schema);
|
|
193
|
+
if (!value || typeof value !== "object" || Array.isArray(value) || !Object.hasOwn(value, key))
|
|
194
|
+
throw new Error("Missing payload discriminator.");
|
|
195
|
+
const branches = options.filter((branch) => {
|
|
196
|
+
const resolved = resolve(branch, 0, new Set());
|
|
197
|
+
const property = record(resolved) ? resolved.properties?.[key] : undefined;
|
|
198
|
+
const field = property ? resolve(property, 0, new Set()) : undefined;
|
|
199
|
+
return record(field) && field.const === value[key];
|
|
200
|
+
});
|
|
201
|
+
if (branches.length !== 1)
|
|
202
|
+
throw new Error("Invalid or ambiguous payload discriminator.");
|
|
203
|
+
return resolve(branches[0], 0, new Set());
|
|
204
|
+
};
|
|
205
|
+
const filter = (path, key, literal) => `${path}[?@[${JSON.stringify(key)}] == ${JSON.stringify(literal)}]`;
|
|
206
|
+
const constant = (schema, key) => {
|
|
207
|
+
const property = record(schema) ? schema.properties?.[key] : undefined;
|
|
208
|
+
const field = property ? resolve(property, 0, new Set()) : undefined;
|
|
209
|
+
return record(field) ? field.const : undefined;
|
|
210
|
+
};
|
|
211
|
+
const walk = (schema, value, path, rule, depth) => {
|
|
212
|
+
budget.visit(depth);
|
|
213
|
+
schema = resolve(schema, depth, new Set());
|
|
214
|
+
if (typeof schema === "boolean" || !references.get(schema))
|
|
215
|
+
return;
|
|
216
|
+
if (checkRef(schema)) {
|
|
217
|
+
rules.add(rule);
|
|
218
|
+
if (value !== undefined)
|
|
219
|
+
expected.set(path, rule);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
if (schema.allOf) {
|
|
223
|
+
for (const child of schema.allOf)
|
|
224
|
+
walk(child, value, path, rule, depth + 1);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const options = unionOf(schema);
|
|
228
|
+
if (options) {
|
|
229
|
+
const branch = value === undefined ? undefined : selected(schema, value);
|
|
230
|
+
for (const option of options) {
|
|
231
|
+
const resolved = resolve(option, depth + 1, new Set());
|
|
232
|
+
walk(resolved, resolved === branch ? value : undefined, path, rule, depth + 1);
|
|
233
|
+
}
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (schema.properties)
|
|
237
|
+
for (const [key, child] of Object.entries(schema.properties))
|
|
238
|
+
walk(child, value && typeof value === "object" && !Array.isArray(value) && Object.hasOwn(value, key)
|
|
239
|
+
? value[key]
|
|
240
|
+
: undefined, propertyPath(path, key), propertyPath(rule, key), depth + 1);
|
|
241
|
+
if (record(schema.additionalProperties) &&
|
|
242
|
+
value &&
|
|
243
|
+
typeof value === "object" &&
|
|
244
|
+
!Array.isArray(value))
|
|
245
|
+
for (const [key, item] of Object.entries(value))
|
|
246
|
+
if (!Object.hasOwn(schema.properties ?? {}, key))
|
|
247
|
+
walk(schema.additionalProperties, item, propertyPath(path, key), propertyPath(rule, key), depth + 1);
|
|
248
|
+
const prefix = schema.prefixItems ?? (Array.isArray(schema.items) ? schema.items : undefined);
|
|
249
|
+
if (prefix)
|
|
250
|
+
prefix.forEach((item, i) => {
|
|
251
|
+
walk(item, Array.isArray(value) ? value[i] : undefined, `${path}[${i}]`, `${rule}[${i}]`, depth + 1);
|
|
252
|
+
});
|
|
253
|
+
const rest = schema.items && !Array.isArray(schema.items)
|
|
254
|
+
? resolve(schema.items, depth + 1, new Set())
|
|
255
|
+
: undefined;
|
|
256
|
+
if (rest !== undefined) {
|
|
257
|
+
const key = record(rest) ? discriminators.get(rest) : undefined;
|
|
258
|
+
if (key && record(rest) && unionOf(rest)) {
|
|
259
|
+
for (const branch of unionOf(rest)) {
|
|
260
|
+
const resolved = resolve(branch, depth + 2, new Set());
|
|
261
|
+
walk(resolved, undefined, path, filter(rule, key, constant(resolved, key)), depth + 1);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else
|
|
265
|
+
walk(rest, undefined, path, `${rule}[*]`, depth + 1);
|
|
266
|
+
if (Array.isArray(value))
|
|
267
|
+
value.forEach((child, i) => {
|
|
268
|
+
if (prefix && i < prefix.length)
|
|
269
|
+
return;
|
|
270
|
+
const branch = key && record(rest) ? selected(rest, child) : rest;
|
|
271
|
+
walk(branch, child, `${path}[${i}]`, key ? filter(rule, key, constant(branch, key)) : `${rule}[*]`, depth + 1);
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
walk(root, data, "$", "$", 0);
|
|
276
|
+
if (rules.size > budget.limits.maxPaths)
|
|
277
|
+
throw new Error("Schema reference path capacity exceeded.");
|
|
278
|
+
return { expected, rules };
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CID } from "multiformats/cid";
|
|
2
|
+
export { code, decode } from "@ipld/dag-cbor";
|
|
3
|
+
/** Rebase separately loaded multiformats instances without consulting object getters. */
|
|
4
|
+
export declare function asNativeCID(value: unknown): CID | null;
|
|
5
|
+
/** Reuse the canonical codec, but never interpret a plain business object as a CID. */
|
|
6
|
+
export declare function encodeDagCbor(value: unknown): Uint8Array;
|
|
7
|
+
//# sourceMappingURL=dag-cbor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-cbor.d.ts","sourceRoot":"","sources":["../src/dag-cbor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE9C,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,IAAI,CAYtD;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAWxD"}
|
package/dist/dag-cbor.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { encodeOptions } from "@ipld/dag-cbor";
|
|
2
|
+
import { encode } from "cborg";
|
|
3
|
+
import { CID } from "multiformats/cid";
|
|
4
|
+
export { code, decode } from "@ipld/dag-cbor";
|
|
5
|
+
/** Rebase separately loaded multiformats instances without consulting object getters. */
|
|
6
|
+
export function asNativeCID(value) {
|
|
7
|
+
if (value instanceof CID)
|
|
8
|
+
return value;
|
|
9
|
+
if (!value || typeof value !== "object")
|
|
10
|
+
return null;
|
|
11
|
+
const prototype = Object.getPrototypeOf(value);
|
|
12
|
+
if (prototype === Object.prototype || prototype === null)
|
|
13
|
+
return null;
|
|
14
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
15
|
+
const bytes = descriptors.bytes?.value;
|
|
16
|
+
if (!(bytes instanceof Uint8Array) || descriptors["/"]?.value !== bytes)
|
|
17
|
+
return null;
|
|
18
|
+
const cid = CID.decode(bytes);
|
|
19
|
+
if (cid.version !== descriptors.version?.value || cid.code !== descriptors.code?.value)
|
|
20
|
+
throw new Error("Invalid native CID identity.");
|
|
21
|
+
return cid;
|
|
22
|
+
}
|
|
23
|
+
/** Reuse the canonical codec, but never interpret a plain business object as a CID. */
|
|
24
|
+
export function encodeDagCbor(value) {
|
|
25
|
+
return encode(value, {
|
|
26
|
+
...encodeOptions,
|
|
27
|
+
typeEncoders: {
|
|
28
|
+
...encodeOptions.typeEncoders,
|
|
29
|
+
Object: (object) => {
|
|
30
|
+
const cid = asNativeCID(object);
|
|
31
|
+
return cid ? encodeOptions.typeEncoders.Object(cid) : null;
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=dag-cbor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-cbor.js","sourceRoot":"","sources":["../src/dag-cbor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE9C,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,GAAG;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAY,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;IAChD,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACrF,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,GAAG,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,KAAK;QACpF,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,MAAM,CAAC,KAAK,EAAE;QACnB,GAAG,aAAa;QAChB,YAAY,EAAE;YACZ,GAAG,aAAa,CAAC,YAAY;YAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBAChC,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Static, TSchema } from "@sinclair/typebox";
|
|
2
|
+
import { CID } from "multiformats/cid";
|
|
3
|
+
import { ContentRef } from "./content-ref.js";
|
|
4
|
+
import { Budget, type JsonValue, type PayloadLimits } from "./value.js";
|
|
5
|
+
export { addContentRefKeyword, inspectTaskSchema } from "./contract.js";
|
|
6
|
+
export { ContentRef } from "./content-ref.js";
|
|
7
|
+
export { parseCidPath, type CidPathStep } from "./paths.js";
|
|
8
|
+
export { Budget, defaultPayloadLimits, type JsonValue, type PayloadLimits } from "./value.js";
|
|
9
|
+
export type IpfsPayload<T = JsonValue> = {
|
|
10
|
+
data: T;
|
|
11
|
+
cidPaths: string[];
|
|
12
|
+
};
|
|
13
|
+
export type DagValue = null | boolean | number | string | CID | DagValue[] | {
|
|
14
|
+
[key: string]: DagValue;
|
|
15
|
+
};
|
|
16
|
+
export type DagPayload = IpfsPayload<DagValue>;
|
|
17
|
+
export type JsonOf<T> = T extends ContentRef ? string : T extends readonly unknown[] ? {
|
|
18
|
+
[K in keyof T]: JsonOf<T[K]>;
|
|
19
|
+
} : T extends object ? {
|
|
20
|
+
[K in keyof T]: JsonOf<T[K]>;
|
|
21
|
+
} : T;
|
|
22
|
+
export type PayloadInspector = (schema: unknown, data: JsonValue, budget: Budget) => {
|
|
23
|
+
expected: Map<string, string>;
|
|
24
|
+
rules: Set<string>;
|
|
25
|
+
};
|
|
26
|
+
export interface PayloadOptions {
|
|
27
|
+
limits?: Partial<PayloadLimits>;
|
|
28
|
+
/** Task contracts inject inspectTaskSchema; the P1 profile remains the default. */
|
|
29
|
+
inspect?: PayloadInspector;
|
|
30
|
+
/** Host-supplied Task dialect validator; never skip business keywords. */
|
|
31
|
+
validate?: (data: JsonValue) => void;
|
|
32
|
+
}
|
|
33
|
+
export interface PayloadBlock {
|
|
34
|
+
cid: CID;
|
|
35
|
+
bytes: Uint8Array;
|
|
36
|
+
}
|
|
37
|
+
/** Encode ContentRef instances without a contract; lookalike strings stay ordinary. */
|
|
38
|
+
export declare function encodeReferences(value: unknown, options?: PayloadOptions): IpfsPayload;
|
|
39
|
+
/** Encode author values according to their contract; strings and lookalike objects stay ordinary. */
|
|
40
|
+
export declare function encodePayload<S extends TSchema>(schema: S, value: Static<S>, options?: PayloadOptions): IpfsPayload<JsonOf<Static<S>>>;
|
|
41
|
+
export declare function validatePayload(payload: unknown, schema?: unknown, options?: PayloadOptions): IpfsPayload;
|
|
42
|
+
export declare function decodePayload<S extends TSchema>(payload: unknown, schema: S, options?: PayloadOptions): Static<S>;
|
|
43
|
+
export declare function decodePayload(payload: unknown, schema?: unknown, options?: PayloadOptions): unknown;
|
|
44
|
+
/** The DAG envelope preserves metadata, but reference positions contain real IPLD CID links. */
|
|
45
|
+
export declare function toDagPayload(payload: unknown, schema?: unknown, options?: PayloadOptions): DagPayload;
|
|
46
|
+
export declare function fromDagPayload(value: unknown, schema?: unknown, options?: PayloadOptions): IpfsPayload;
|
|
47
|
+
export declare function encodePayloadBlock(payload: unknown, schema?: unknown, options?: PayloadOptions): Promise<PayloadBlock>;
|
|
48
|
+
export declare function decodePayloadBlock(bytes: Uint8Array, schema?: unknown, options?: PayloadOptions & {
|
|
49
|
+
cid?: CID;
|
|
50
|
+
}): Promise<IpfsPayload>;
|
|
51
|
+
export interface TrustedPayloadContract {
|
|
52
|
+
readonly schema: unknown;
|
|
53
|
+
encode(value: unknown): IpfsPayload;
|
|
54
|
+
decode(payload: unknown): unknown;
|
|
55
|
+
validate(payload: unknown): IpfsPayload;
|
|
56
|
+
toDag(payload: unknown): DagPayload;
|
|
57
|
+
fromDag(value: unknown): IpfsPayload;
|
|
58
|
+
encodeBlock(payload: unknown): Promise<PayloadBlock>;
|
|
59
|
+
decodeBlock(bytes: Uint8Array, cid?: CID): Promise<IpfsPayload>;
|
|
60
|
+
}
|
|
61
|
+
/** Trusted Task-dialect bridge: snapshot/path conversion plus full Schema validation. */
|
|
62
|
+
export declare function compileTrustedContract(schema: unknown, options?: PayloadOptions): TrustedPayloadContract;
|
|
63
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|