@odatano/core 0.3.1
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 +201 -0
- package/README.md +212 -0
- package/cds-plugin.js +5 -0
- package/config/preview/cardano-node/alonzo-genesis.json +196 -0
- package/config/preview/cardano-node/byron-genesis.json +117 -0
- package/config/preview/cardano-node/config.json +118 -0
- package/config/preview/cardano-node/conway-genesis.json +297 -0
- package/config/preview/cardano-node/shelley-genesis.json +68 -0
- package/config/preview/cardano-node/topology.json +19 -0
- package/db/schema.cds +1318 -0
- package/package.json +125 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +96 -0
- package/src/index.js.map +1 -0
- package/src/plugin.d.ts.map +1 -0
- package/src/plugin.js +92 -0
- package/src/plugin.js.map +1 -0
- package/srv/blockchain/backends/blockfrost-backend.d.ts.map +1 -0
- package/srv/blockchain/backends/blockfrost-backend.js +398 -0
- package/srv/blockchain/backends/blockfrost-backend.js.map +1 -0
- package/srv/blockchain/backends/cardano-backend.d.ts.map +1 -0
- package/srv/blockchain/backends/cardano-backend.js +12 -0
- package/srv/blockchain/backends/cardano-backend.js.map +1 -0
- package/srv/blockchain/backends/koios-backend.d.ts.map +1 -0
- package/srv/blockchain/backends/koios-backend.js +537 -0
- package/srv/blockchain/backends/koios-backend.js.map +1 -0
- package/srv/blockchain/backends/ogmios-backend.d.ts.map +1 -0
- package/srv/blockchain/backends/ogmios-backend.js +516 -0
- package/srv/blockchain/backends/ogmios-backend.js.map +1 -0
- package/srv/blockchain/cardano-client.d.ts.map +1 -0
- package/srv/blockchain/cardano-client.js +377 -0
- package/srv/blockchain/cardano-client.js.map +1 -0
- package/srv/blockchain/cardano-indexer.d.ts.map +1 -0
- package/srv/blockchain/cardano-indexer.js +542 -0
- package/srv/blockchain/cardano-indexer.js.map +1 -0
- package/srv/blockchain/cardano-tx-builder.d.ts.map +1 -0
- package/srv/blockchain/cardano-tx-builder.js +232 -0
- package/srv/blockchain/cardano-tx-builder.js.map +1 -0
- package/srv/blockchain/circuit-breaker.d.ts.map +1 -0
- package/srv/blockchain/circuit-breaker.js +110 -0
- package/srv/blockchain/circuit-breaker.js.map +1 -0
- package/srv/blockchain/signing/external-signer.d.ts.map +1 -0
- package/srv/blockchain/signing/external-signer.js +302 -0
- package/srv/blockchain/signing/external-signer.js.map +1 -0
- package/srv/blockchain/signing/signature-verifier.d.ts.map +1 -0
- package/srv/blockchain/signing/signature-verifier.js +249 -0
- package/srv/blockchain/signing/signature-verifier.js.map +1 -0
- package/srv/blockchain/transaction-building/buildooor-tx.d.ts.map +1 -0
- package/srv/blockchain/transaction-building/buildooor-tx.js +636 -0
- package/srv/blockchain/transaction-building/buildooor-tx.js.map +1 -0
- package/srv/blockchain/transaction-building/cardano-tx.d.ts.map +1 -0
- package/srv/blockchain/transaction-building/cardano-tx.js +3 -0
- package/srv/blockchain/transaction-building/cardano-tx.js.map +1 -0
- package/srv/blockchain/transaction-building/csl-tx.d.ts.map +1 -0
- package/srv/blockchain/transaction-building/csl-tx.js +766 -0
- package/srv/blockchain/transaction-building/csl-tx.js.map +1 -0
- package/srv/blockchain/transaction-building/tx-builder-registry.d.ts.map +1 -0
- package/srv/blockchain/transaction-building/tx-builder-registry.js +67 -0
- package/srv/blockchain/transaction-building/tx-builder-registry.js.map +1 -0
- package/srv/cardano-service.cds +179 -0
- package/srv/cardano-service.d.ts.map +1 -0
- package/srv/cardano-service.js +227 -0
- package/srv/cardano-service.js.map +1 -0
- package/srv/cardano-tx-service.cds +298 -0
- package/srv/cardano-tx-service.d.ts.map +1 -0
- package/srv/cardano-tx-service.js +646 -0
- package/srv/cardano-tx-service.js.map +1 -0
- package/srv/cardano-ui.cds +2949 -0
- package/srv/server.d.ts.map +1 -0
- package/srv/server.js +212 -0
- package/srv/server.js.map +1 -0
- package/srv/utils/backend-request-handler.d.ts.map +1 -0
- package/srv/utils/backend-request-handler.js +47 -0
- package/srv/utils/backend-request-handler.js.map +1 -0
- package/srv/utils/const.d.ts.map +1 -0
- package/srv/utils/const.js +86 -0
- package/srv/utils/const.js.map +1 -0
- package/srv/utils/error-codes.d.ts.map +1 -0
- package/srv/utils/error-codes.js +49 -0
- package/srv/utils/error-codes.js.map +1 -0
- package/srv/utils/errors.d.ts.map +1 -0
- package/srv/utils/errors.js +389 -0
- package/srv/utils/errors.js.map +1 -0
- package/srv/utils/mappers.d.ts.map +1 -0
- package/srv/utils/mappers.js +723 -0
- package/srv/utils/mappers.js.map +1 -0
- package/srv/utils/signing-helper.d.ts.map +1 -0
- package/srv/utils/signing-helper.js +128 -0
- package/srv/utils/signing-helper.js.map +1 -0
- package/srv/utils/tx-build-helper.d.ts.map +1 -0
- package/srv/utils/tx-build-helper.js +135 -0
- package/srv/utils/tx-build-helper.js.map +1 -0
- package/srv/utils/types.d.ts.map +1 -0
- package/srv/utils/types.js +36 -0
- package/srv/utils/types.js.map +1 -0
- package/srv/utils/validators.d.ts.map +1 -0
- package/srv/utils/validators.js +382 -0
- package/srv/utils/validators.js.map +1 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTxHash = isTxHash;
|
|
4
|
+
exports.isAssetUnit = isAssetUnit;
|
|
5
|
+
exports.isBlockHash = isBlockHash;
|
|
6
|
+
exports.isValidPoolId = isValidPoolId;
|
|
7
|
+
exports.isValidDrepId = isValidDrepId;
|
|
8
|
+
exports.isValidBech32Address = isValidBech32Address;
|
|
9
|
+
exports.isValidBech32StakeAddress = isValidBech32StakeAddress;
|
|
10
|
+
exports.isEpochNumber = isEpochNumber;
|
|
11
|
+
exports.isValidCbor = isValidCbor;
|
|
12
|
+
exports.validateTransactionInputs = validateTransactionInputs;
|
|
13
|
+
const bech32_1 = require("bech32");
|
|
14
|
+
const const_1 = require("./const");
|
|
15
|
+
const server_1 = require("../server");
|
|
16
|
+
/**
|
|
17
|
+
* Safely trim a string value
|
|
18
|
+
* @param s - The value to trim
|
|
19
|
+
* @returns { string | null } trimmed string or null if input is not a string or empty after trim
|
|
20
|
+
*/
|
|
21
|
+
function safeTrimString(s) {
|
|
22
|
+
if (typeof s !== "string")
|
|
23
|
+
return null;
|
|
24
|
+
const t = s.trim();
|
|
25
|
+
return t.length > 0 ? t : null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Strict bech32 decode with HRP allowlist.
|
|
29
|
+
* @param value - bech32 encoded string
|
|
30
|
+
* @param allowedHrp - list of allowed HRP prefixes
|
|
31
|
+
* @returns { prefix: string; words: number[] } decoded bech32 parts or null if invalid
|
|
32
|
+
*/
|
|
33
|
+
function tryDecodeBech32WithHrp(value, allowedHrp) {
|
|
34
|
+
const decoded = bech32_1.bech32.decode(value, const_1.BECH32_MAX_LENGTH);
|
|
35
|
+
if (allowedHrp.includes(decoded.prefix)) {
|
|
36
|
+
return { prefix: decoded.prefix, words: decoded.words };
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert bech32 words to byte length
|
|
42
|
+
* @param words - bech32 decoded words
|
|
43
|
+
* @returns { number } byte length of decoded words
|
|
44
|
+
*/
|
|
45
|
+
function wordsToBytesLen(words) {
|
|
46
|
+
// bech32.fromWords validates word range and converts 5-bit words -> bytes
|
|
47
|
+
return Buffer.from(bech32_1.bech32.fromWords(words)).length;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validate JSON string with size and complexity limits to prevent DoS
|
|
51
|
+
* @param jsonString - The JSON string to validate
|
|
52
|
+
* @param fieldName - Name of the field (for error messages)
|
|
53
|
+
* @returns JsonValidationResult with parsed value or error message
|
|
54
|
+
*/
|
|
55
|
+
function validateJsonWithLimits(jsonString, fieldName) {
|
|
56
|
+
// Check size limit first (before parsing)
|
|
57
|
+
if (jsonString.length > const_1.MAX_JSON_SIZE) {
|
|
58
|
+
return { valid: false, error: `${fieldName} exceeds maximum size of ${const_1.MAX_JSON_SIZE} bytes` };
|
|
59
|
+
}
|
|
60
|
+
// Parse JSON
|
|
61
|
+
let parsed;
|
|
62
|
+
try {
|
|
63
|
+
parsed = JSON.parse(jsonString);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return { valid: false, error: `Invalid JSON in ${fieldName}` };
|
|
67
|
+
}
|
|
68
|
+
// Validate complexity recursively
|
|
69
|
+
const complexityError = checkJsonComplexity(parsed, 0);
|
|
70
|
+
if (complexityError) {
|
|
71
|
+
return { valid: false, error: `${fieldName}: ${complexityError}` };
|
|
72
|
+
}
|
|
73
|
+
return { valid: true, parsed };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Recursively check JSON complexity (depth, keys, array length, string length)
|
|
77
|
+
* @param value - The parsed JSON value
|
|
78
|
+
* @param depth - Current nesting depth
|
|
79
|
+
* @returns Error message if limits exceeded, null otherwise
|
|
80
|
+
*/
|
|
81
|
+
function checkJsonComplexity(value, depth) {
|
|
82
|
+
// Check depth limit
|
|
83
|
+
if (depth > const_1.MAX_DEPTH) {
|
|
84
|
+
return `Maximum nesting depth of ${const_1.MAX_DEPTH} exceeded`;
|
|
85
|
+
}
|
|
86
|
+
if (value === null || typeof value !== 'object') {
|
|
87
|
+
// Check string length for primitive strings
|
|
88
|
+
if (typeof value === 'string' && value.length > const_1.MAX_STRING_LENGTH) {
|
|
89
|
+
return `String value exceeds maximum length of ${const_1.MAX_STRING_LENGTH}`;
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
if (Array.isArray(value)) {
|
|
94
|
+
// Check array length
|
|
95
|
+
if (value.length > const_1.MAX_ARRAY_LENGTH) {
|
|
96
|
+
return `Array exceeds maximum length of ${const_1.MAX_ARRAY_LENGTH}`;
|
|
97
|
+
}
|
|
98
|
+
// Recursively check array elements
|
|
99
|
+
for (const item of value) {
|
|
100
|
+
const error = checkJsonComplexity(item, depth + 1);
|
|
101
|
+
if (error)
|
|
102
|
+
return error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Check object key count
|
|
107
|
+
const keys = Object.keys(value);
|
|
108
|
+
if (keys.length > const_1.MAX_KEYS) {
|
|
109
|
+
return `Object exceeds maximum key count of ${const_1.MAX_KEYS}`;
|
|
110
|
+
}
|
|
111
|
+
// Recursively check object values
|
|
112
|
+
for (const key of keys) {
|
|
113
|
+
const error = checkJsonComplexity(value[key], depth + 1);
|
|
114
|
+
if (error)
|
|
115
|
+
return error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Transaction hash: 64-character hexadecimal string
|
|
122
|
+
* @param s - The raw value to validate against transaction hash format
|
|
123
|
+
* @returns { boolean } true if s is a valid transaction hash false otherwise
|
|
124
|
+
*/
|
|
125
|
+
function isTxHash(s) {
|
|
126
|
+
return typeof s === "string" && const_1.TX_HASH_REGEX.test(s);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Asset unit: concatenation of policy ID (56 hex chars) + asset name (0-128 hex chars)
|
|
130
|
+
* @param s - The raw value to validate against asset unit format
|
|
131
|
+
* @returns { boolean } true if v is a valid asset unit false otherwise
|
|
132
|
+
*/
|
|
133
|
+
function isAssetUnit(s) {
|
|
134
|
+
if (typeof s !== "string")
|
|
135
|
+
return false;
|
|
136
|
+
const t = s.trim();
|
|
137
|
+
// Regex ensures: 56-192 hex chars, even length, valid hex
|
|
138
|
+
return const_1.ASSET_UNIT_REGEX.test(t);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Block hash: 64-character hexadecimal string
|
|
142
|
+
* @param s - The raw value to validate against block hash format
|
|
143
|
+
* @returns { boolean } true if s is a valid block hash false otherwise
|
|
144
|
+
*/
|
|
145
|
+
function isBlockHash(s) {
|
|
146
|
+
return typeof s === "string" && const_1.TX_HASH_REGEX.test(s);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Pool ID: must be bech32-decodable, HRP=pool, payload length 28 bytes.
|
|
150
|
+
* @param poolIdRaw - The raw value to validate against pool ID format
|
|
151
|
+
* @returns { boolean } true if valid pool ID false otherwise
|
|
152
|
+
*/
|
|
153
|
+
function isValidPoolId(poolIdRaw) {
|
|
154
|
+
const poolId = safeTrimString(poolIdRaw);
|
|
155
|
+
if (!poolId)
|
|
156
|
+
return false;
|
|
157
|
+
// optional: cheap prefilter (keeps performance high)
|
|
158
|
+
if (!const_1.POOL_ID_REGEX.test(poolId))
|
|
159
|
+
return false;
|
|
160
|
+
const decoded = tryDecodeBech32WithHrp(poolId, ["pool"]);
|
|
161
|
+
if (decoded)
|
|
162
|
+
return wordsToBytesLen(decoded.words) === const_1.POOL_ID_BYTES;
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* DRep ID: must be bech32-decodable, HRP=drep.
|
|
167
|
+
* @param drepRaw - The raw value to validate against drep ID format
|
|
168
|
+
* @returns { boolean } true if valid drep ID false otherwise
|
|
169
|
+
*/
|
|
170
|
+
function isValidDrepId(drepRaw) {
|
|
171
|
+
const drepId = safeTrimString(drepRaw);
|
|
172
|
+
if (!drepId)
|
|
173
|
+
return false;
|
|
174
|
+
// optional cheap prefilter
|
|
175
|
+
if (!const_1.DREP_ID_REGEX.test(drepId))
|
|
176
|
+
return false;
|
|
177
|
+
const decoded = tryDecodeBech32WithHrp(drepId, ["drep"]);
|
|
178
|
+
if (decoded)
|
|
179
|
+
return wordsToBytesLen(decoded.words) === const_1.DREP_ID_BYTES;
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Validate Bech32 address: must be bech32-decodable, HRP based on network config.
|
|
184
|
+
* @param addrRaw - The raw value to validate against bech32 address format
|
|
185
|
+
* @returns { boolean } true if valid bech32 address false otherwise
|
|
186
|
+
*/
|
|
187
|
+
function isValidBech32Address(addrRaw) {
|
|
188
|
+
const addr = safeTrimString(addrRaw);
|
|
189
|
+
if (!addr)
|
|
190
|
+
return false;
|
|
191
|
+
// get client to check right network
|
|
192
|
+
const client = (0, server_1.getCardanoClient)();
|
|
193
|
+
const network = client.network;
|
|
194
|
+
// prefilter from config to make sure it is the right network
|
|
195
|
+
if (!const_1.HRP[network].addr.test(addr))
|
|
196
|
+
return false;
|
|
197
|
+
const allowed = ["addr", "addr_test"];
|
|
198
|
+
const decoded = tryDecodeBech32WithHrp(addr, allowed);
|
|
199
|
+
if (decoded) {
|
|
200
|
+
// avoid absurdly short/long decoded payloads
|
|
201
|
+
const len = wordsToBytesLen(decoded.words);
|
|
202
|
+
return len >= 1 && len <= 128;
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Validate Bech32 stake address: must be bech32-decodable, HRP based on network config.
|
|
208
|
+
* @param stakeRaw - The raw value to validate against stake address format
|
|
209
|
+
* @returns { boolean } true if valid bech32 stake address false otherwise
|
|
210
|
+
*/
|
|
211
|
+
function isValidBech32StakeAddress(stakeRaw) {
|
|
212
|
+
const stake = safeTrimString(stakeRaw);
|
|
213
|
+
if (!stake)
|
|
214
|
+
return false;
|
|
215
|
+
// get client to check right network
|
|
216
|
+
const client = (0, server_1.getCardanoClient)();
|
|
217
|
+
const network = client.network;
|
|
218
|
+
// prefilter from config to make sure it is the right network
|
|
219
|
+
if (!const_1.HRP[network].stake.test(stake))
|
|
220
|
+
return false;
|
|
221
|
+
const allowed = ["stake", "stake_test"];
|
|
222
|
+
const decoded = tryDecodeBech32WithHrp(stake, allowed);
|
|
223
|
+
if (!decoded)
|
|
224
|
+
return false;
|
|
225
|
+
const len = wordsToBytesLen(decoded.words);
|
|
226
|
+
return len >= 1 && len <= 64;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Epoch number: non-negative integer within reasonable bounds
|
|
230
|
+
* @param s - The parameter value to validate as epoch number
|
|
231
|
+
* @returns { boolean } true if s is a valid epoch number false otherwise
|
|
232
|
+
*/
|
|
233
|
+
function isEpochNumber(s) {
|
|
234
|
+
return typeof s === "number" && s >= 0 && s <= const_1.MAX_EPOCH && Number.isInteger(s);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Validate CBOR string: must be a non-empty even-length hexadecimal string
|
|
238
|
+
* @param cborRaw - The raw value to validate against CBOR format
|
|
239
|
+
* @returns { boolean } true if valid CBOR false otherwise
|
|
240
|
+
*/
|
|
241
|
+
function isValidCbor(cborRaw) {
|
|
242
|
+
const cbor = safeTrimString(cborRaw);
|
|
243
|
+
if (!cbor)
|
|
244
|
+
return false;
|
|
245
|
+
// basic validation: must be even-length hex string
|
|
246
|
+
return /^[a-f0-9]+$/i.test(cbor) && cbor.length % 2 === 0;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Validate transaction build inputs and return validation errors if any
|
|
250
|
+
* @param inputs - Transaction input fields to validate
|
|
251
|
+
* @param requiredFields - List of required field names
|
|
252
|
+
* @returns Array of validation errors, empty if all valid
|
|
253
|
+
*/
|
|
254
|
+
function validateTransactionInputs(inputs, requiredFields) {
|
|
255
|
+
const errors = [];
|
|
256
|
+
// Check required fields
|
|
257
|
+
for (const field of requiredFields) {
|
|
258
|
+
if (inputs[field] === undefined || inputs[field] === null || inputs[field] === '') {
|
|
259
|
+
errors.push({
|
|
260
|
+
type: 'missing',
|
|
261
|
+
field,
|
|
262
|
+
message: `${field} is required`
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// If required fields are missing, return early
|
|
267
|
+
if (errors.length > 0)
|
|
268
|
+
return errors;
|
|
269
|
+
// Validate address formats
|
|
270
|
+
if (inputs.senderAddress && !isValidBech32Address(inputs.senderAddress)) {
|
|
271
|
+
errors.push({
|
|
272
|
+
type: 'invalid',
|
|
273
|
+
field: 'senderAddress',
|
|
274
|
+
message: 'Invalid sender address format'
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
if (inputs.recipientAddress && !isValidBech32Address(inputs.recipientAddress)) {
|
|
278
|
+
errors.push({
|
|
279
|
+
type: 'invalid',
|
|
280
|
+
field: 'recipientAddress',
|
|
281
|
+
message: 'Invalid recipient address format'
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
if (inputs.changeAddress && !isValidBech32Address(inputs.changeAddress)) {
|
|
285
|
+
errors.push({
|
|
286
|
+
type: 'invalid',
|
|
287
|
+
field: 'changeAddress',
|
|
288
|
+
message: 'Invalid change address format'
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
// Validate CBOR format
|
|
292
|
+
if (inputs.signedTxCbor && !isValidCbor(inputs.signedTxCbor)) {
|
|
293
|
+
errors.push({
|
|
294
|
+
type: 'invalid',
|
|
295
|
+
field: 'signedTxCbor',
|
|
296
|
+
message: 'Invalid signedTxCbor format'
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
if (inputs.mintingPolicyScript && !isValidCbor(inputs.mintingPolicyScript)) {
|
|
300
|
+
errors.push({
|
|
301
|
+
type: 'invalid',
|
|
302
|
+
field: 'mintingPolicyScript',
|
|
303
|
+
message: 'Invalid mintingPolicyScript format'
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
if (inputs.validatorScript && !isValidCbor(inputs.validatorScript)) {
|
|
307
|
+
errors.push({
|
|
308
|
+
type: 'invalid',
|
|
309
|
+
field: 'validatorScript',
|
|
310
|
+
message: 'Invalid validatorScript format'
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
if (inputs.scriptTxHash && !isTxHash(inputs.scriptTxHash)) {
|
|
314
|
+
errors.push({
|
|
315
|
+
type: 'invalid',
|
|
316
|
+
field: 'scriptTxHash',
|
|
317
|
+
message: 'Invalid scriptTxHash format'
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
if (inputs.scriptOutputIndex !== undefined && inputs.scriptOutputIndex !== null) {
|
|
321
|
+
if (!Number.isInteger(inputs.scriptOutputIndex) || inputs.scriptOutputIndex < 0) {
|
|
322
|
+
errors.push({
|
|
323
|
+
type: 'invalid',
|
|
324
|
+
field: 'scriptOutputIndex',
|
|
325
|
+
message: 'scriptOutputIndex must be a non-negative integer'
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
// Validate JSON fields with size and complexity limits
|
|
330
|
+
if (inputs.metadataJson) {
|
|
331
|
+
const result = validateJsonWithLimits(inputs.metadataJson, 'metadataJson');
|
|
332
|
+
if (!result.valid) {
|
|
333
|
+
errors.push({
|
|
334
|
+
type: 'invalid',
|
|
335
|
+
field: 'metadataJson',
|
|
336
|
+
message: result.error
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
if (inputs.assetsJson) {
|
|
341
|
+
const result = validateJsonWithLimits(inputs.assetsJson, 'assetsJson');
|
|
342
|
+
if (!result.valid) {
|
|
343
|
+
errors.push({
|
|
344
|
+
type: 'invalid',
|
|
345
|
+
field: 'assetsJson',
|
|
346
|
+
message: result.error
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if (inputs.mintActionsJson) {
|
|
351
|
+
const result = validateJsonWithLimits(inputs.mintActionsJson, 'mintActionsJson');
|
|
352
|
+
if (!result.valid) {
|
|
353
|
+
errors.push({
|
|
354
|
+
type: 'invalid',
|
|
355
|
+
field: 'mintActionsJson',
|
|
356
|
+
message: result.error
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
if (inputs.redeemerJson) {
|
|
361
|
+
const result = validateJsonWithLimits(inputs.redeemerJson, 'redeemerJson');
|
|
362
|
+
if (!result.valid) {
|
|
363
|
+
errors.push({
|
|
364
|
+
type: 'invalid',
|
|
365
|
+
field: 'redeemerJson',
|
|
366
|
+
message: result.error
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if (inputs.datumJson) {
|
|
371
|
+
const result = validateJsonWithLimits(inputs.datumJson, 'datumJson');
|
|
372
|
+
if (!result.valid) {
|
|
373
|
+
errors.push({
|
|
374
|
+
type: 'invalid',
|
|
375
|
+
field: 'datumJson',
|
|
376
|
+
message: result.error
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return errors;
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"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"}
|