@nexart/codemode-sdk 1.8.4 → 1.9.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/CHANGELOG.md +58 -0
- package/README.md +120 -1
- package/dist/cjs/browser.cjs +1 -1
- package/dist/cjs/browser.js +1 -1
- package/dist/cjs/core.cjs +339 -1
- package/dist/cjs/core.js +332 -2
- package/dist/cjs/node.cjs +1 -1
- package/dist/cjs/node.js +1 -1
- package/dist/esm/browser.cjs +1 -1
- package/dist/esm/browser.js +1 -1
- package/dist/esm/core.cjs +339 -1
- package/dist/esm/core.js +332 -2
- package/dist/esm/node.cjs +1 -1
- package/dist/esm/node.js +1 -1
- package/dist/types/sdk/codemode/attestation.d.ts +24 -0
- package/dist/types/sdk/codemode/attestation.d.ts.map +1 -0
- package/dist/types/sdk/codemode/canonicalJson.d.ts +16 -0
- package/dist/types/sdk/codemode/canonicalJson.d.ts.map +1 -0
- package/dist/types/sdk/codemode/core-index.d.ts +5 -1
- package/dist/types/sdk/codemode/core-index.d.ts.map +1 -1
- package/dist/types/sdk/codemode/entry/browser.d.ts +1 -1
- package/dist/types/sdk/codemode/nodeReceipt.d.ts +65 -0
- package/dist/types/sdk/codemode/nodeReceipt.d.ts.map +1 -0
- package/dist/types/sdk/codemode/runtime.d.ts +1 -1
- package/dist/types/sdk/codemode/types.d.ts +96 -0
- package/dist/types/sdk/codemode/types.d.ts.map +1 -1
- package/dist/types/sdk/codemode/version.d.ts +2 -2
- package/examples/sketch-minimal.js +27 -0
- package/examples/sketch-vars.js +59 -0
- package/examples/sketch.js +24 -0
- package/package.json +8 -2
package/dist/esm/core.cjs
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var ed25519 = require('@noble/ed25519');
|
|
4
|
+
var sha2_js = require('@noble/hashes/sha2.js');
|
|
5
|
+
|
|
3
6
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
4
7
|
// version.ts
|
|
5
|
-
var SDK_VERSION = "1.
|
|
8
|
+
var SDK_VERSION = "1.9.0";
|
|
6
9
|
var PROTOCOL_VERSION = "1.2.0";
|
|
7
10
|
var PROTOCOL_PHASE = 3;
|
|
8
11
|
|
|
@@ -25,6 +28,20 @@ var DEFAULT_CONFIG = {
|
|
|
25
28
|
minDuration: 1,
|
|
26
29
|
maxDuration: 4
|
|
27
30
|
};
|
|
31
|
+
var CodeVerifyCode = {
|
|
32
|
+
OK: "OK",
|
|
33
|
+
CERTIFICATE_HASH_MISMATCH: "CERTIFICATE_HASH_MISMATCH",
|
|
34
|
+
SNAPSHOT_HASH_MISMATCH: "SNAPSHOT_HASH_MISMATCH",
|
|
35
|
+
RENDER_HASH_MISMATCH: "RENDER_HASH_MISMATCH",
|
|
36
|
+
INVALID_SHA256_FORMAT: "INVALID_SHA256_FORMAT",
|
|
37
|
+
CANONICALIZATION_ERROR: "CANONICALIZATION_ERROR",
|
|
38
|
+
SCHEMA_ERROR: "SCHEMA_ERROR",
|
|
39
|
+
NODE_RECEIPT_MISSING: "NODE_RECEIPT_MISSING",
|
|
40
|
+
NODE_RECEIPT_KEY_NOT_FOUND: "NODE_RECEIPT_KEY_NOT_FOUND",
|
|
41
|
+
NODE_RECEIPT_INVALID_SIGNATURE: "NODE_RECEIPT_INVALID_SIGNATURE",
|
|
42
|
+
NODE_RECEIPT_KEY_FORMAT_UNSUPPORTED: "NODE_RECEIPT_KEY_FORMAT_UNSUPPORTED",
|
|
43
|
+
UNKNOWN_ERROR: "UNKNOWN_ERROR"
|
|
44
|
+
};
|
|
28
45
|
|
|
29
46
|
// p5-runtime.ts
|
|
30
47
|
var CODE_MODE_PROTOCOL_VERSION = PROTOCOL_VERSION;
|
|
@@ -1632,6 +1649,319 @@ function createEngine(config) {
|
|
|
1632
1649
|
};
|
|
1633
1650
|
}
|
|
1634
1651
|
|
|
1652
|
+
// canonicalJson.ts
|
|
1653
|
+
function toCanonicalJson(value) {
|
|
1654
|
+
if (value === null) return "null";
|
|
1655
|
+
if (typeof value === "boolean") return value ? "true" : "false";
|
|
1656
|
+
if (typeof value === "number") {
|
|
1657
|
+
if (!isFinite(value)) throw new Error(`toCanonicalJson: non-finite number ${value}`);
|
|
1658
|
+
return JSON.stringify(value);
|
|
1659
|
+
}
|
|
1660
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
1661
|
+
if (Array.isArray(value)) {
|
|
1662
|
+
return "[" + value.map(toCanonicalJson).join(",") + "]";
|
|
1663
|
+
}
|
|
1664
|
+
if (typeof value === "object") {
|
|
1665
|
+
const obj = value;
|
|
1666
|
+
const keys = Object.keys(obj).sort();
|
|
1667
|
+
return "{" + keys.filter((k) => obj[k] !== void 0 && typeof obj[k] !== "function").map((k) => `${JSON.stringify(k)}:${toCanonicalJson(obj[k])}`).join(",") + "}";
|
|
1668
|
+
}
|
|
1669
|
+
throw new Error(`toCanonicalJson: unsupported type ${typeof value}`);
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
// nodeReceipt.ts
|
|
1673
|
+
ed25519.hashes.sha512 = sha2_js.sha512;
|
|
1674
|
+
function base64urlToBytes(s) {
|
|
1675
|
+
const pad = s.length % 4;
|
|
1676
|
+
const base64 = s.replace(/-/g, "+").replace(/_/g, "/") + (pad ? "=".repeat(4 - pad) : "");
|
|
1677
|
+
if (typeof Buffer !== "undefined") {
|
|
1678
|
+
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
1679
|
+
}
|
|
1680
|
+
const binary = atob(base64);
|
|
1681
|
+
return Uint8Array.from(binary, (c) => c.charCodeAt(0));
|
|
1682
|
+
}
|
|
1683
|
+
async function verifyNodeReceiptSignature(params) {
|
|
1684
|
+
try {
|
|
1685
|
+
const { receipt, signatureB64Url, key } = params;
|
|
1686
|
+
let pubKeyBytes;
|
|
1687
|
+
if (key.jwk) {
|
|
1688
|
+
if (key.jwk.kty !== "OKP" || key.jwk.crv !== "Ed25519") {
|
|
1689
|
+
return {
|
|
1690
|
+
ok: false,
|
|
1691
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_FORMAT_UNSUPPORTED,
|
|
1692
|
+
details: [
|
|
1693
|
+
`JWK must have kty=OKP and crv=Ed25519, got kty=${key.jwk.kty} crv=${key.jwk.crv}`
|
|
1694
|
+
]
|
|
1695
|
+
};
|
|
1696
|
+
}
|
|
1697
|
+
pubKeyBytes = base64urlToBytes(key.jwk.x);
|
|
1698
|
+
} else if (key.rawB64Url) {
|
|
1699
|
+
pubKeyBytes = base64urlToBytes(key.rawB64Url);
|
|
1700
|
+
} else if (key.spkiB64) {
|
|
1701
|
+
const spkiBytes = base64urlToBytes(key.spkiB64);
|
|
1702
|
+
if (spkiBytes.length < 32) {
|
|
1703
|
+
return {
|
|
1704
|
+
ok: false,
|
|
1705
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_FORMAT_UNSUPPORTED,
|
|
1706
|
+
details: ["SPKI key too short to extract Ed25519 public key"]
|
|
1707
|
+
};
|
|
1708
|
+
}
|
|
1709
|
+
pubKeyBytes = spkiBytes.slice(spkiBytes.length - 32);
|
|
1710
|
+
} else {
|
|
1711
|
+
return {
|
|
1712
|
+
ok: false,
|
|
1713
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_FORMAT_UNSUPPORTED,
|
|
1714
|
+
details: ["No usable key provided: supply jwk, rawB64Url, or spkiB64"]
|
|
1715
|
+
};
|
|
1716
|
+
}
|
|
1717
|
+
if (pubKeyBytes.length !== 32) {
|
|
1718
|
+
return {
|
|
1719
|
+
ok: false,
|
|
1720
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_FORMAT_UNSUPPORTED,
|
|
1721
|
+
details: [`Ed25519 public key must be 32 bytes, got ${pubKeyBytes.length}`]
|
|
1722
|
+
};
|
|
1723
|
+
}
|
|
1724
|
+
const sigBytes = base64urlToBytes(signatureB64Url);
|
|
1725
|
+
if (sigBytes.length !== 64) {
|
|
1726
|
+
return {
|
|
1727
|
+
ok: false,
|
|
1728
|
+
code: CodeVerifyCode.NODE_RECEIPT_INVALID_SIGNATURE,
|
|
1729
|
+
details: [`Ed25519 signature must be 64 bytes, got ${sigBytes.length}`]
|
|
1730
|
+
};
|
|
1731
|
+
}
|
|
1732
|
+
const msgBytes = new TextEncoder().encode(toCanonicalJson(receipt));
|
|
1733
|
+
const isValid = await ed25519.verify(sigBytes, msgBytes, pubKeyBytes);
|
|
1734
|
+
if (!isValid) {
|
|
1735
|
+
return {
|
|
1736
|
+
ok: false,
|
|
1737
|
+
code: CodeVerifyCode.NODE_RECEIPT_INVALID_SIGNATURE,
|
|
1738
|
+
details: ["Ed25519 signature verification failed"]
|
|
1739
|
+
};
|
|
1740
|
+
}
|
|
1741
|
+
return { ok: true, code: CodeVerifyCode.OK };
|
|
1742
|
+
} catch (err) {
|
|
1743
|
+
return {
|
|
1744
|
+
ok: false,
|
|
1745
|
+
code: CodeVerifyCode.NODE_RECEIPT_INVALID_SIGNATURE,
|
|
1746
|
+
details: [err instanceof Error ? err.message : String(err)]
|
|
1747
|
+
};
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
async function fetchNodeKeys(nodeUrl) {
|
|
1751
|
+
const url = `${nodeUrl.replace(/\/+$/, "")}/.well-known/nexart-node.json`;
|
|
1752
|
+
const response = await fetch(url);
|
|
1753
|
+
if (!response.ok) {
|
|
1754
|
+
throw new Error(`Failed to fetch node keys from ${url}: HTTP ${response.status}`);
|
|
1755
|
+
}
|
|
1756
|
+
const data = await response.json();
|
|
1757
|
+
if (typeof data !== "object" || data === null) {
|
|
1758
|
+
throw new Error("Node keys response is not an object");
|
|
1759
|
+
}
|
|
1760
|
+
const doc = data;
|
|
1761
|
+
if (typeof doc.nodeId !== "string" || !Array.isArray(doc.keys)) {
|
|
1762
|
+
throw new Error("Node keys document missing required fields (nodeId, keys)");
|
|
1763
|
+
}
|
|
1764
|
+
return data;
|
|
1765
|
+
}
|
|
1766
|
+
function selectNodeKey(doc, kid) {
|
|
1767
|
+
if (kid) {
|
|
1768
|
+
const found = doc.keys.find((k) => k.kid === kid);
|
|
1769
|
+
if (!found) {
|
|
1770
|
+
return {
|
|
1771
|
+
error: {
|
|
1772
|
+
ok: false,
|
|
1773
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_NOT_FOUND,
|
|
1774
|
+
details: [`Key with kid="${kid}" not found in node keys document`]
|
|
1775
|
+
}
|
|
1776
|
+
};
|
|
1777
|
+
}
|
|
1778
|
+
return { key: found };
|
|
1779
|
+
}
|
|
1780
|
+
if (doc.activeKid) {
|
|
1781
|
+
const found = doc.keys.find((k) => k.kid === doc.activeKid);
|
|
1782
|
+
if (!found) {
|
|
1783
|
+
return {
|
|
1784
|
+
error: {
|
|
1785
|
+
ok: false,
|
|
1786
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_NOT_FOUND,
|
|
1787
|
+
details: [`activeKid="${doc.activeKid}" not found in keys array`]
|
|
1788
|
+
}
|
|
1789
|
+
};
|
|
1790
|
+
}
|
|
1791
|
+
return { key: found };
|
|
1792
|
+
}
|
|
1793
|
+
if (doc.keys.length === 0) {
|
|
1794
|
+
return {
|
|
1795
|
+
error: {
|
|
1796
|
+
ok: false,
|
|
1797
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_NOT_FOUND,
|
|
1798
|
+
details: ["No keys available in node keys document"]
|
|
1799
|
+
}
|
|
1800
|
+
};
|
|
1801
|
+
}
|
|
1802
|
+
return { key: doc.keys[0] };
|
|
1803
|
+
}
|
|
1804
|
+
function extractReceiptAndSignature(bundle) {
|
|
1805
|
+
if (typeof bundle !== "object" || bundle === null) return null;
|
|
1806
|
+
const b = bundle;
|
|
1807
|
+
if (typeof b.receipt === "object" && b.receipt !== null && typeof b.signature === "string") {
|
|
1808
|
+
return {
|
|
1809
|
+
receipt: b.receipt,
|
|
1810
|
+
signatureB64Url: b.signature,
|
|
1811
|
+
attestorKeyId: typeof b.attestorKeyId === "string" ? b.attestorKeyId : void 0
|
|
1812
|
+
};
|
|
1813
|
+
}
|
|
1814
|
+
if (typeof b.attestation === "object" && b.attestation !== null) {
|
|
1815
|
+
const att = b.attestation;
|
|
1816
|
+
if (typeof att.receipt === "object" && att.receipt !== null && typeof att.signature === "string") {
|
|
1817
|
+
return {
|
|
1818
|
+
receipt: att.receipt,
|
|
1819
|
+
signatureB64Url: att.signature,
|
|
1820
|
+
attestorKeyId: typeof att.attestorKeyId === "string" ? att.attestorKeyId : void 0
|
|
1821
|
+
};
|
|
1822
|
+
}
|
|
1823
|
+
}
|
|
1824
|
+
if (typeof b.meta === "object" && b.meta !== null) {
|
|
1825
|
+
const meta = b.meta;
|
|
1826
|
+
if (typeof meta.attestation === "object" && meta.attestation !== null) {
|
|
1827
|
+
const att = meta.attestation;
|
|
1828
|
+
if (typeof att.receipt === "object" && att.receipt !== null && typeof att.signature === "string") {
|
|
1829
|
+
return {
|
|
1830
|
+
receipt: att.receipt,
|
|
1831
|
+
signatureB64Url: att.signature,
|
|
1832
|
+
attestorKeyId: typeof att.attestorKeyId === "string" ? att.attestorKeyId : void 0
|
|
1833
|
+
};
|
|
1834
|
+
}
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
return null;
|
|
1838
|
+
}
|
|
1839
|
+
async function verifyBundleAttestation(bundle, options) {
|
|
1840
|
+
const extracted = extractReceiptAndSignature(bundle);
|
|
1841
|
+
if (!extracted) {
|
|
1842
|
+
return {
|
|
1843
|
+
ok: false,
|
|
1844
|
+
code: CodeVerifyCode.NODE_RECEIPT_MISSING,
|
|
1845
|
+
details: ["No signed receipt found in bundle (expected bundle.receipt + bundle.signature or bundle.attestation envelope)"]
|
|
1846
|
+
};
|
|
1847
|
+
}
|
|
1848
|
+
const nodeId = extracted.receipt.nodeId;
|
|
1849
|
+
const resolvedKid = options.kid ?? extracted.attestorKeyId ?? extracted.receipt.attestorKeyId;
|
|
1850
|
+
function ctx() {
|
|
1851
|
+
const lines = [];
|
|
1852
|
+
if (nodeId) lines.push(`nodeId: ${nodeId}`);
|
|
1853
|
+
if (resolvedKid) lines.push(`kid: ${resolvedKid}`);
|
|
1854
|
+
return lines;
|
|
1855
|
+
}
|
|
1856
|
+
if (typeof bundle.certificateHash === "string") {
|
|
1857
|
+
const bundleCertHash = bundle.certificateHash;
|
|
1858
|
+
if (extracted.receipt.certificateHash !== bundleCertHash) {
|
|
1859
|
+
return {
|
|
1860
|
+
ok: false,
|
|
1861
|
+
code: CodeVerifyCode.CERTIFICATE_HASH_MISMATCH,
|
|
1862
|
+
details: [
|
|
1863
|
+
"Receipt certificateHash does not match bundle certificateHash",
|
|
1864
|
+
`receipt.certificateHash: ${extracted.receipt.certificateHash}`,
|
|
1865
|
+
`bundle.certificateHash: ${bundleCertHash}`,
|
|
1866
|
+
...ctx()
|
|
1867
|
+
]
|
|
1868
|
+
};
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
1871
|
+
let keysDoc;
|
|
1872
|
+
try {
|
|
1873
|
+
keysDoc = await fetchNodeKeys(options.nodeUrl);
|
|
1874
|
+
} catch (err) {
|
|
1875
|
+
return {
|
|
1876
|
+
ok: false,
|
|
1877
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_NOT_FOUND,
|
|
1878
|
+
details: [...ctx(), err instanceof Error ? err.message : String(err)]
|
|
1879
|
+
};
|
|
1880
|
+
}
|
|
1881
|
+
const selected = selectNodeKey(keysDoc, resolvedKid);
|
|
1882
|
+
if (selected.error) {
|
|
1883
|
+
return {
|
|
1884
|
+
...selected.error,
|
|
1885
|
+
details: [...ctx(), ...selected.error.details ?? []]
|
|
1886
|
+
};
|
|
1887
|
+
}
|
|
1888
|
+
const keyEntry = selected.key;
|
|
1889
|
+
const keyParam = {};
|
|
1890
|
+
if (keyEntry.publicKeyJwk) keyParam.jwk = keyEntry.publicKeyJwk;
|
|
1891
|
+
else if (keyEntry.publicKey) keyParam.rawB64Url = keyEntry.publicKey;
|
|
1892
|
+
else if (keyEntry.publicKeySpkiB64) keyParam.spkiB64 = keyEntry.publicKeySpkiB64;
|
|
1893
|
+
else {
|
|
1894
|
+
return {
|
|
1895
|
+
ok: false,
|
|
1896
|
+
code: CodeVerifyCode.NODE_RECEIPT_KEY_FORMAT_UNSUPPORTED,
|
|
1897
|
+
details: [
|
|
1898
|
+
`Key kid="${keyEntry.kid}" has no usable public key field (publicKeyJwk, publicKey, or publicKeySpkiB64)`,
|
|
1899
|
+
...ctx()
|
|
1900
|
+
]
|
|
1901
|
+
};
|
|
1902
|
+
}
|
|
1903
|
+
const sigResult = await verifyNodeReceiptSignature({
|
|
1904
|
+
receipt: extracted.receipt,
|
|
1905
|
+
signatureB64Url: extracted.signatureB64Url,
|
|
1906
|
+
key: keyParam
|
|
1907
|
+
});
|
|
1908
|
+
const contextLines = ctx();
|
|
1909
|
+
if (contextLines.length === 0) return sigResult;
|
|
1910
|
+
return sigResult.ok ? { ok: true, code: CodeVerifyCode.OK, details: contextLines } : { ...sigResult, details: [...contextLines, ...sigResult.details ?? []] };
|
|
1911
|
+
}
|
|
1912
|
+
|
|
1913
|
+
// attestation.ts
|
|
1914
|
+
function getAttestationReceipt(bundle) {
|
|
1915
|
+
if (typeof bundle !== "object" || bundle === null) return null;
|
|
1916
|
+
const b = bundle;
|
|
1917
|
+
if (typeof b.receipt === "object" && b.receipt !== null && typeof b.signature === "string") {
|
|
1918
|
+
const r = b.receipt;
|
|
1919
|
+
return {
|
|
1920
|
+
attestationId: r.attestationId,
|
|
1921
|
+
attestedAt: r.attestedAt,
|
|
1922
|
+
nodeId: r.nodeId,
|
|
1923
|
+
attestorKeyId: r.attestorKeyId,
|
|
1924
|
+
nodeRuntimeHash: r.nodeRuntimeHash,
|
|
1925
|
+
certificateHash: r.certificateHash,
|
|
1926
|
+
protocolVersion: r.protocolVersion,
|
|
1927
|
+
receipt: r,
|
|
1928
|
+
signature: b.signature
|
|
1929
|
+
};
|
|
1930
|
+
}
|
|
1931
|
+
if (typeof b.attestation === "object" && b.attestation !== null) {
|
|
1932
|
+
const att = b.attestation;
|
|
1933
|
+
if (typeof att.receipt === "object" && att.receipt !== null && typeof att.signature === "string") {
|
|
1934
|
+
const r = att.receipt;
|
|
1935
|
+
return {
|
|
1936
|
+
attestationId: r.attestationId,
|
|
1937
|
+
attestedAt: r.attestedAt,
|
|
1938
|
+
nodeId: r.nodeId,
|
|
1939
|
+
attestorKeyId: r.attestorKeyId,
|
|
1940
|
+
nodeRuntimeHash: r.nodeRuntimeHash,
|
|
1941
|
+
certificateHash: r.certificateHash,
|
|
1942
|
+
protocolVersion: r.protocolVersion,
|
|
1943
|
+
receipt: r,
|
|
1944
|
+
signature: att.signature
|
|
1945
|
+
};
|
|
1946
|
+
}
|
|
1947
|
+
}
|
|
1948
|
+
if (typeof b.attestationId === "string") {
|
|
1949
|
+
return {
|
|
1950
|
+
attestationId: b.attestationId,
|
|
1951
|
+
attestedAt: typeof b.attestedAt === "string" ? b.attestedAt : "",
|
|
1952
|
+
nodeId: typeof b.nodeId === "string" ? b.nodeId : void 0,
|
|
1953
|
+
attestorKeyId: typeof b.attestorKeyId === "string" ? b.attestorKeyId : void 0,
|
|
1954
|
+
nodeRuntimeHash: typeof b.nodeRuntimeHash === "string" ? b.nodeRuntimeHash : void 0,
|
|
1955
|
+
certificateHash: typeof b.certificateHash === "string" ? b.certificateHash : void 0,
|
|
1956
|
+
protocolVersion: typeof b.protocolVersion === "string" ? b.protocolVersion : void 0
|
|
1957
|
+
};
|
|
1958
|
+
}
|
|
1959
|
+
return null;
|
|
1960
|
+
}
|
|
1961
|
+
function hasAttestation(bundle) {
|
|
1962
|
+
return getAttestationReceipt(bundle) !== null;
|
|
1963
|
+
}
|
|
1964
|
+
|
|
1635
1965
|
// core-index.ts
|
|
1636
1966
|
var SDK_VERSION2 = SDK_VERSION;
|
|
1637
1967
|
var SDK_NAME = "@nexart/codemode-sdk";
|
|
@@ -1639,6 +1969,7 @@ var SDK_NAME = "@nexart/codemode-sdk";
|
|
|
1639
1969
|
exports.CODE_MODE_ENFORCEMENT = CODE_MODE_ENFORCEMENT;
|
|
1640
1970
|
exports.CODE_MODE_PROTOCOL_PHASE = CODE_MODE_PROTOCOL_PHASE;
|
|
1641
1971
|
exports.CODE_MODE_PROTOCOL_VERSION = CODE_MODE_PROTOCOL_VERSION;
|
|
1972
|
+
exports.CodeVerifyCode = CodeVerifyCode;
|
|
1642
1973
|
exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
|
|
1643
1974
|
exports.DEFAULT_VARS = DEFAULT_VARS;
|
|
1644
1975
|
exports.PROTOCOL_IDENTITY = PROTOCOL_IDENTITY;
|
|
@@ -1654,7 +1985,14 @@ exports.createEngine = createEngine;
|
|
|
1654
1985
|
exports.createP5Runtime = createP5Runtime;
|
|
1655
1986
|
exports.createProtocolVAR = createProtocolVAR;
|
|
1656
1987
|
exports.executeCodeMode = executeCodeMode;
|
|
1988
|
+
exports.fetchNodeKeys = fetchNodeKeys;
|
|
1989
|
+
exports.getAttestationReceipt = getAttestationReceipt;
|
|
1990
|
+
exports.hasAttestation = hasAttestation;
|
|
1657
1991
|
exports.injectTimeVariables = injectTimeVariables;
|
|
1658
1992
|
exports.runLoopMode = runLoopMode;
|
|
1659
1993
|
exports.runStaticMode = runStaticMode;
|
|
1994
|
+
exports.selectNodeKey = selectNodeKey;
|
|
1995
|
+
exports.toCanonicalJson = toCanonicalJson;
|
|
1660
1996
|
exports.validateCodeModeSource = validateCodeModeSource;
|
|
1997
|
+
exports.verifyBundleAttestation = verifyBundleAttestation;
|
|
1998
|
+
exports.verifyNodeReceiptSignature = verifyNodeReceiptSignature;
|