@contractspec/lib.overlay-engine 1.56.1 → 1.58.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/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +535 -8
- package/dist/merger.d.ts +5 -9
- package/dist/merger.d.ts.map +1 -1
- package/dist/merger.js +120 -101
- package/dist/node/index.js +534 -0
- package/dist/node/merger.js +125 -0
- package/dist/node/react.js +21 -0
- package/dist/node/registry.js +262 -0
- package/dist/node/runtime.js +176 -0
- package/dist/node/signer.js +81 -0
- package/dist/node/spec.js +15 -0
- package/dist/node/types.js +0 -0
- package/dist/node/validator.js +131 -0
- package/dist/react.d.ts +6 -9
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +17 -18
- package/dist/registry.d.ts +22 -25
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +254 -98
- package/dist/runtime.d.ts +19 -23
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +174 -51
- package/dist/signer.d.ts +13 -17
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +71 -52
- package/dist/spec.d.ts +65 -69
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js +13 -12
- package/dist/types.d.ts +25 -28
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/validator.d.ts +12 -16
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +123 -92
- package/package.json +75 -31
- package/dist/merger.js.map +0 -1
- package/dist/react.js.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/signer.js.map +0 -1
- package/dist/spec.js.map +0 -1
- package/dist/validator.js.map +0 -1
package/dist/runtime.js
CHANGED
|
@@ -1,54 +1,177 @@
|
|
|
1
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
// src/merger.ts
|
|
3
|
+
function applyOverlayModifications(target, overlays, options = {}) {
|
|
4
|
+
if (!overlays.length) {
|
|
5
|
+
return target;
|
|
6
|
+
}
|
|
7
|
+
const states = target.fields.map((field) => ({
|
|
8
|
+
key: field.key,
|
|
9
|
+
field: { ...field },
|
|
10
|
+
hidden: field.visible === false
|
|
11
|
+
}));
|
|
12
|
+
const fieldMap = new Map(states.map((state) => [state.key, state]));
|
|
13
|
+
let orderSequence = target.fields.map((field) => field.key);
|
|
14
|
+
const handleMissing = (field, overlayId) => {
|
|
15
|
+
if (options.strict) {
|
|
16
|
+
throw new Error(`Overlay "${overlayId}" referenced unknown field "${field}".`);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
overlays.forEach((overlay) => {
|
|
20
|
+
overlay.modifications.forEach((modification) => {
|
|
21
|
+
switch (modification.type) {
|
|
22
|
+
case "hideField": {
|
|
23
|
+
const state = fieldMap.get(modification.field);
|
|
24
|
+
if (!state)
|
|
25
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
26
|
+
state.hidden = true;
|
|
27
|
+
state.field.visible = false;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case "renameLabel": {
|
|
31
|
+
const state = fieldMap.get(modification.field);
|
|
32
|
+
if (!state)
|
|
33
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
34
|
+
state.field.label = modification.newLabel;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case "setDefault": {
|
|
38
|
+
const state = fieldMap.get(modification.field);
|
|
39
|
+
if (!state)
|
|
40
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
41
|
+
state.field.defaultValue = modification.value;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case "addHelpText": {
|
|
45
|
+
const state = fieldMap.get(modification.field);
|
|
46
|
+
if (!state)
|
|
47
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
48
|
+
state.field.helpText = modification.text;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case "makeRequired": {
|
|
52
|
+
const state = fieldMap.get(modification.field);
|
|
53
|
+
if (!state)
|
|
54
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
55
|
+
state.field.required = modification.required ?? true;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case "reorderFields": {
|
|
59
|
+
const { filtered, missing } = normalizeOrderList(modification.fields, fieldMap);
|
|
60
|
+
if (missing.length && options.strict) {
|
|
61
|
+
missing.forEach((field) => handleMissing(field, overlay.overlayId));
|
|
62
|
+
}
|
|
63
|
+
orderSequence = applyReorder(orderSequence, filtered);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
default:
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
const visibleFields = [];
|
|
72
|
+
const seen = new Set;
|
|
73
|
+
orderSequence.forEach((key) => {
|
|
74
|
+
const state = fieldMap.get(key);
|
|
75
|
+
if (!state || state.hidden) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
seen.add(key);
|
|
79
|
+
visibleFields.push(state.field);
|
|
80
|
+
});
|
|
81
|
+
states.forEach((state) => {
|
|
82
|
+
if (state.hidden || seen.has(state.key)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
visibleFields.push(state.field);
|
|
86
|
+
});
|
|
87
|
+
visibleFields.forEach((field, index) => {
|
|
88
|
+
field.order = index;
|
|
89
|
+
field.visible = true;
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
...target,
|
|
93
|
+
fields: visibleFields
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function normalizeOrderList(fields, fieldMap) {
|
|
97
|
+
const filtered = [];
|
|
98
|
+
const missing = [];
|
|
99
|
+
const seen = new Set;
|
|
100
|
+
fields.forEach((field) => {
|
|
101
|
+
if (!field?.trim()) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (!fieldMap.has(field)) {
|
|
105
|
+
missing.push(field);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (seen.has(field)) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
seen.add(field);
|
|
112
|
+
filtered.push(field);
|
|
113
|
+
});
|
|
114
|
+
return { filtered, missing };
|
|
115
|
+
}
|
|
116
|
+
function applyReorder(sequence, orderedFields) {
|
|
117
|
+
if (!orderedFields.length) {
|
|
118
|
+
return sequence;
|
|
119
|
+
}
|
|
120
|
+
const orderedSet = new Set(orderedFields);
|
|
121
|
+
const remainder = sequence.filter((key) => !orderedSet.has(key));
|
|
122
|
+
return [...orderedFields, ...remainder];
|
|
123
|
+
}
|
|
2
124
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
};
|
|
125
|
+
// src/runtime.ts
|
|
126
|
+
class OverlayEngine {
|
|
127
|
+
registry;
|
|
128
|
+
audit;
|
|
129
|
+
constructor(options) {
|
|
130
|
+
this.registry = options.registry;
|
|
131
|
+
this.audit = options.audit;
|
|
132
|
+
}
|
|
133
|
+
apply(params) {
|
|
134
|
+
const overlays = params.overlays ?? this.registry.forContext({
|
|
135
|
+
capability: params.capability,
|
|
136
|
+
workflow: params.workflow,
|
|
137
|
+
dataView: params.dataView,
|
|
138
|
+
presentation: params.presentation,
|
|
139
|
+
operation: params.operation,
|
|
140
|
+
tenantId: params.tenantId,
|
|
141
|
+
role: params.role,
|
|
142
|
+
userId: params.userId,
|
|
143
|
+
device: params.device,
|
|
144
|
+
tags: params.tags
|
|
145
|
+
});
|
|
146
|
+
const merged = applyOverlayModifications(params.target, overlays, {
|
|
147
|
+
strict: params.strict
|
|
148
|
+
});
|
|
149
|
+
const context = extractContext(params);
|
|
150
|
+
overlays.forEach((overlay) => {
|
|
151
|
+
this.audit?.({
|
|
152
|
+
overlay: {
|
|
153
|
+
overlayId: overlay.overlayId,
|
|
154
|
+
version: overlay.version
|
|
155
|
+
},
|
|
156
|
+
context,
|
|
157
|
+
timestamp: new Date().toISOString()
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
target: merged,
|
|
162
|
+
overlaysApplied: overlays
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
42
166
|
function extractContext(params) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
167
|
+
return {
|
|
168
|
+
tenantId: params.tenantId,
|
|
169
|
+
role: params.role,
|
|
170
|
+
userId: params.userId,
|
|
171
|
+
device: params.device,
|
|
172
|
+
tags: params.tags
|
|
173
|
+
};
|
|
50
174
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
//# sourceMappingURL=runtime.js.map
|
|
175
|
+
export {
|
|
176
|
+
OverlayEngine
|
|
177
|
+
};
|
package/dist/signer.d.ts
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
metadata?: Record<string, unknown>;
|
|
11
|
-
publicKey?: string;
|
|
1
|
+
import { type KeyLike } from 'crypto';
|
|
2
|
+
import type { OverlaySignatureAlgorithm, OverlaySpec, SignedOverlaySpec } from './spec';
|
|
3
|
+
export interface SignOverlayOptions {
|
|
4
|
+
algorithm?: OverlaySignatureAlgorithm;
|
|
5
|
+
keyId?: string;
|
|
6
|
+
issuedAt?: Date | string;
|
|
7
|
+
expiresAt?: Date | string;
|
|
8
|
+
metadata?: Record<string, unknown>;
|
|
9
|
+
publicKey?: string;
|
|
12
10
|
}
|
|
13
|
-
declare function signOverlay(spec: OverlaySpec, privateKey: KeyLike | string | Buffer, options?: SignOverlayOptions): SignedOverlaySpec;
|
|
14
|
-
declare function verifyOverlaySignature(overlay: SignedOverlaySpec): boolean;
|
|
15
|
-
declare function canonicalizeOverlay(spec: OverlaySpec | SignedOverlaySpec): string;
|
|
16
|
-
declare function stripSignature<T extends OverlaySpec | SignedOverlaySpec>(spec: T): OverlaySpec;
|
|
17
|
-
//#endregion
|
|
18
|
-
export { SignOverlayOptions, canonicalizeOverlay, signOverlay, stripSignature, verifyOverlaySignature };
|
|
11
|
+
export declare function signOverlay(spec: OverlaySpec, privateKey: KeyLike | string | Buffer, options?: SignOverlayOptions): SignedOverlaySpec;
|
|
12
|
+
export declare function verifyOverlaySignature(overlay: SignedOverlaySpec): boolean;
|
|
13
|
+
export declare function canonicalizeOverlay(spec: OverlaySpec | SignedOverlaySpec): string;
|
|
14
|
+
export declare function stripSignature<T extends OverlaySpec | SignedOverlaySpec>(spec: T): OverlaySpec;
|
|
19
15
|
//# sourceMappingURL=signer.d.ts.map
|
package/dist/signer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,OAAO,EAGb,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EACV,yBAAyB,EACzB,WAAW,EACX,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAEhB,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EACrC,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAuCnB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CA8B1E;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,iBAAiB,GACpC,MAAM,CAGR;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,iBAAiB,EACtE,IAAI,EAAE,CAAC,GACN,WAAW,CAGb"}
|
package/dist/signer.js
CHANGED
|
@@ -1,63 +1,82 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/signer.ts
|
|
1
3
|
import stringify from "fast-json-stable-stringify";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
import {
|
|
5
|
+
constants,
|
|
6
|
+
createPrivateKey,
|
|
7
|
+
createPublicKey,
|
|
8
|
+
sign,
|
|
9
|
+
verify
|
|
10
|
+
} from "crypto";
|
|
5
11
|
function signOverlay(spec, privateKey, options = {}) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
12
|
+
const algorithm = options.algorithm ?? "ed25519";
|
|
13
|
+
const keyObject = typeof privateKey === "string" || Buffer.isBuffer(privateKey) ? createPrivateKey(privateKey) : privateKey;
|
|
14
|
+
const payload = Buffer.from(canonicalizeOverlay(spec), "utf8");
|
|
15
|
+
let rawSignature;
|
|
16
|
+
if (algorithm === "ed25519") {
|
|
17
|
+
rawSignature = sign(null, payload, keyObject);
|
|
18
|
+
} else if (algorithm === "rsa-pss-sha256") {
|
|
19
|
+
rawSignature = sign("sha256", payload, {
|
|
20
|
+
key: keyObject,
|
|
21
|
+
padding: constants.RSA_PKCS1_PSS_PADDING,
|
|
22
|
+
saltLength: 32
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
throw new Error(`Unsupported overlay signature algorithm: ${algorithm}`);
|
|
26
|
+
}
|
|
27
|
+
const publicKey = options.publicKey ?? createPublicKey(keyObject).export({ format: "pem", type: "spki" }).toString();
|
|
28
|
+
return {
|
|
29
|
+
...spec,
|
|
30
|
+
signature: {
|
|
31
|
+
algorithm,
|
|
32
|
+
signature: rawSignature.toString("base64"),
|
|
33
|
+
publicKey,
|
|
34
|
+
keyId: options.keyId,
|
|
35
|
+
issuedAt: toIso(options.issuedAt) ?? new Date().toISOString(),
|
|
36
|
+
expiresAt: toIso(options.expiresAt),
|
|
37
|
+
metadata: options.metadata
|
|
38
|
+
}
|
|
39
|
+
};
|
|
33
40
|
}
|
|
34
41
|
function verifyOverlaySignature(overlay) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
if (!overlay.signature?.signature) {
|
|
43
|
+
throw new Error(`Overlay "${overlay.overlayId}" is missing signature metadata.`);
|
|
44
|
+
}
|
|
45
|
+
const payload = Buffer.from(canonicalizeOverlay(overlay), "utf8");
|
|
46
|
+
const signature = Buffer.from(overlay.signature.signature, "base64");
|
|
47
|
+
const publicKey = createPublicKey(overlay.signature.publicKey);
|
|
48
|
+
if (overlay.signature.algorithm === "ed25519") {
|
|
49
|
+
return verify(null, payload, publicKey, signature);
|
|
50
|
+
}
|
|
51
|
+
if (overlay.signature.algorithm === "rsa-pss-sha256") {
|
|
52
|
+
return verify("sha256", payload, {
|
|
53
|
+
key: publicKey,
|
|
54
|
+
padding: constants.RSA_PKCS1_PSS_PADDING,
|
|
55
|
+
saltLength: 32
|
|
56
|
+
}, signature);
|
|
57
|
+
}
|
|
58
|
+
throw new Error(`Unsupported overlay signature algorithm: ${overlay.signature.algorithm}`);
|
|
46
59
|
}
|
|
47
60
|
function canonicalizeOverlay(spec) {
|
|
48
|
-
|
|
49
|
-
|
|
61
|
+
const { signature, ...rest } = spec;
|
|
62
|
+
return stringify(rest);
|
|
50
63
|
}
|
|
51
64
|
function stripSignature(spec) {
|
|
52
|
-
|
|
53
|
-
|
|
65
|
+
const { signature, ...rest } = spec;
|
|
66
|
+
return { ...rest };
|
|
54
67
|
}
|
|
55
68
|
function toIso(value) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
if (!value) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (typeof value === "string") {
|
|
73
|
+
return new Date(value).toISOString();
|
|
74
|
+
}
|
|
75
|
+
return value.toISOString();
|
|
59
76
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
77
|
+
export {
|
|
78
|
+
verifyOverlaySignature,
|
|
79
|
+
stripSignature,
|
|
80
|
+
signOverlay,
|
|
81
|
+
canonicalizeOverlay
|
|
82
|
+
};
|
package/dist/spec.d.ts
CHANGED
|
@@ -1,83 +1,79 @@
|
|
|
1
|
-
import { AnyOperationSpec } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
device?: string;
|
|
10
|
-
tags?: string[];
|
|
1
|
+
import type { AnyOperationSpec } from '@contractspec/lib.contracts';
|
|
2
|
+
export type OverlayScopeKey = 'tenantId' | 'role' | 'userId' | 'device' | 'tags';
|
|
3
|
+
export interface OverlayScopeContext {
|
|
4
|
+
tenantId?: string;
|
|
5
|
+
role?: string;
|
|
6
|
+
userId?: string;
|
|
7
|
+
device?: string;
|
|
8
|
+
tags?: string[];
|
|
11
9
|
}
|
|
12
|
-
interface OverlayTargetRef {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
export interface OverlayTargetRef {
|
|
11
|
+
capability?: string;
|
|
12
|
+
workflow?: string;
|
|
13
|
+
dataView?: string;
|
|
14
|
+
presentation?: string;
|
|
15
|
+
operation?: AnyOperationSpec['meta']['key'];
|
|
18
16
|
}
|
|
19
|
-
interface OverlayAppliesTo extends OverlayScopeContext, OverlayTargetRef {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
export interface OverlayAppliesTo extends OverlayScopeContext, OverlayTargetRef {
|
|
18
|
+
/**
|
|
19
|
+
* Optional label to describe why this overlay exists (displayed in tooling).
|
|
20
|
+
*/
|
|
21
|
+
label?: string;
|
|
24
22
|
}
|
|
25
|
-
type OverlayModification = HideFieldModification | RenameLabelModification | ReorderFieldsModification | SetDefaultModification | AddHelpTextModification | MakeRequiredModification;
|
|
26
|
-
interface OverlayFieldModificationBase {
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
export type OverlayModification = HideFieldModification | RenameLabelModification | ReorderFieldsModification | SetDefaultModification | AddHelpTextModification | MakeRequiredModification;
|
|
24
|
+
export interface OverlayFieldModificationBase {
|
|
25
|
+
field: string;
|
|
26
|
+
description?: string;
|
|
29
27
|
}
|
|
30
|
-
interface HideFieldModification extends OverlayFieldModificationBase {
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
export interface HideFieldModification extends OverlayFieldModificationBase {
|
|
29
|
+
type: 'hideField';
|
|
30
|
+
reason?: string;
|
|
33
31
|
}
|
|
34
|
-
interface RenameLabelModification extends OverlayFieldModificationBase {
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
export interface RenameLabelModification extends OverlayFieldModificationBase {
|
|
33
|
+
type: 'renameLabel';
|
|
34
|
+
newLabel: string;
|
|
37
35
|
}
|
|
38
|
-
interface ReorderFieldsModification {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
export interface ReorderFieldsModification {
|
|
37
|
+
type: 'reorderFields';
|
|
38
|
+
fields: string[];
|
|
39
|
+
description?: string;
|
|
42
40
|
}
|
|
43
|
-
interface SetDefaultModification extends OverlayFieldModificationBase {
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
export interface SetDefaultModification extends OverlayFieldModificationBase {
|
|
42
|
+
type: 'setDefault';
|
|
43
|
+
value: unknown;
|
|
46
44
|
}
|
|
47
|
-
interface AddHelpTextModification extends OverlayFieldModificationBase {
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
export interface AddHelpTextModification extends OverlayFieldModificationBase {
|
|
46
|
+
type: 'addHelpText';
|
|
47
|
+
text: string;
|
|
50
48
|
}
|
|
51
|
-
interface MakeRequiredModification extends OverlayFieldModificationBase {
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
export interface MakeRequiredModification extends OverlayFieldModificationBase {
|
|
50
|
+
type: 'makeRequired';
|
|
51
|
+
required?: boolean;
|
|
54
52
|
}
|
|
55
|
-
interface OverlaySpec {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
export interface OverlaySpec {
|
|
54
|
+
overlayId: string;
|
|
55
|
+
version: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
appliesTo: OverlayAppliesTo;
|
|
58
|
+
modifications: OverlayModification[];
|
|
59
|
+
metadata?: Record<string, unknown>;
|
|
60
|
+
createdBy?: string;
|
|
61
|
+
createdAt?: string;
|
|
64
62
|
}
|
|
65
|
-
type OverlaySignatureAlgorithm = 'ed25519' | 'rsa-pss-sha256';
|
|
66
|
-
interface OverlaySignatureBlock {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
export type OverlaySignatureAlgorithm = 'ed25519' | 'rsa-pss-sha256';
|
|
64
|
+
export interface OverlaySignatureBlock {
|
|
65
|
+
algorithm: OverlaySignatureAlgorithm;
|
|
66
|
+
signature: string;
|
|
67
|
+
publicKey: string;
|
|
68
|
+
keyId?: string;
|
|
69
|
+
issuedAt?: string;
|
|
70
|
+
expiresAt?: string;
|
|
71
|
+
metadata?: Record<string, unknown>;
|
|
74
72
|
}
|
|
75
|
-
type SignedOverlaySpec = OverlaySpec & {
|
|
76
|
-
|
|
73
|
+
export type SignedOverlaySpec = OverlaySpec & {
|
|
74
|
+
signature: OverlaySignatureBlock;
|
|
77
75
|
};
|
|
78
|
-
type OverlayInput = OverlaySpec | SignedOverlaySpec;
|
|
79
|
-
declare const OVERLAY_SCOPE_ORDER: OverlayScopeKey[];
|
|
80
|
-
declare function defineOverlay<T extends OverlaySpec>(spec: T): T;
|
|
81
|
-
//#endregion
|
|
82
|
-
export { AddHelpTextModification, HideFieldModification, MakeRequiredModification, OVERLAY_SCOPE_ORDER, OverlayAppliesTo, OverlayFieldModificationBase, OverlayInput, OverlayModification, OverlayScopeContext, OverlayScopeKey, OverlaySignatureAlgorithm, OverlaySignatureBlock, OverlaySpec, OverlayTargetRef, RenameLabelModification, ReorderFieldsModification, SetDefaultModification, SignedOverlaySpec, defineOverlay };
|
|
76
|
+
export type OverlayInput = OverlaySpec | SignedOverlaySpec;
|
|
77
|
+
export declare const OVERLAY_SCOPE_ORDER: OverlayScopeKey[];
|
|
78
|
+
export declare function defineOverlay<T extends OverlaySpec>(spec: T): T;
|
|
83
79
|
//# sourceMappingURL=spec.d.ts.map
|
package/dist/spec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.d.ts","
|
|
1
|
+
{"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
|
package/dist/spec.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
// src/spec.ts
|
|
3
|
+
var OVERLAY_SCOPE_ORDER = [
|
|
4
|
+
"tenantId",
|
|
5
|
+
"role",
|
|
6
|
+
"userId",
|
|
7
|
+
"device",
|
|
8
|
+
"tags"
|
|
8
9
|
];
|
|
9
10
|
function defineOverlay(spec) {
|
|
10
|
-
|
|
11
|
+
return spec;
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
export {
|
|
14
|
+
defineOverlay,
|
|
15
|
+
OVERLAY_SCOPE_ORDER
|
|
16
|
+
};
|