@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 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAU,WAAW,EAAC,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC7H,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAU9D;;;GAGG;AACH,UAAU,UAAU;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,yBAAyB,CAAC;CAC7C;AAgCD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,yBAAyB,CAE/D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,EAAE,cAAc,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhI;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAGhE;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,WAAW,EAAE,EACvB,aAAa,GAAE,sBAA8B,EAC7C,cAAc,CAAC,EAAE,wBAAwB,GACxC,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOxD;AAGD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CA0DvD"}
|
package/srv/server.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getAppContext = getAppContext;
|
|
7
|
+
exports.getCardanoIndexer = getCardanoIndexer;
|
|
8
|
+
exports.getCardanoClient = getCardanoClient;
|
|
9
|
+
exports.getCardanoTxBuilder = getCardanoTxBuilder;
|
|
10
|
+
exports.initializeFromConfig = initializeFromConfig;
|
|
11
|
+
exports.resetAppContext = resetAppContext;
|
|
12
|
+
exports.createTestContext = createTestContext;
|
|
13
|
+
exports.shutdownAppContext = shutdownAppContext;
|
|
14
|
+
exports.loadConfigFromEnv = loadConfigFromEnv;
|
|
15
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
16
|
+
const cardano_client_1 = require("./blockchain/cardano-client");
|
|
17
|
+
const cardano_indexer_1 = require("./blockchain/cardano-indexer");
|
|
18
|
+
const cardano_tx_builder_1 = require("./blockchain/cardano-tx-builder");
|
|
19
|
+
const process_1 = require("process");
|
|
20
|
+
const logger = cds_1.default.log('server');
|
|
21
|
+
const VALID_NETWORKS = ['mainnet', 'preview', 'preprod'];
|
|
22
|
+
const VALID_BACKENDS = ['blockfrost', 'koios', 'ogmios'];
|
|
23
|
+
const VALID_TX_BUILDERS = ['csl', 'buildooor'];
|
|
24
|
+
let appContext = null;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the application context with blockchain components
|
|
27
|
+
* Called once during CAP server startup via cds.on('served')
|
|
28
|
+
* @param config - CardanoClientConfig
|
|
29
|
+
* @param protocolParams - Optional protocol parameters (for tests to skip backend call)
|
|
30
|
+
*/
|
|
31
|
+
async function initializeAppContext(config, protocolParams) {
|
|
32
|
+
logger.info('Initializing blockchain components...');
|
|
33
|
+
// Create CardanoClient from configuration
|
|
34
|
+
const cardanoClient = new cardano_client_1.CardanoClient(config);
|
|
35
|
+
// Create CardanoTransactionBuilder with the client
|
|
36
|
+
const cardanoTxBuilder = new cardano_tx_builder_1.CardanoTransactionBuilder(cardanoClient);
|
|
37
|
+
await cardanoTxBuilder.init(protocolParams);
|
|
38
|
+
// Create CardanoIndexer with client and transaction builder
|
|
39
|
+
const cardanoIndexer = new cardano_indexer_1.CardanoIndexer(cardanoClient, cardanoTxBuilder);
|
|
40
|
+
logger.info('Blockchain components initialized successfully');
|
|
41
|
+
return {
|
|
42
|
+
cardanoClient,
|
|
43
|
+
cardanoIndexer,
|
|
44
|
+
cardanoTxBuilder,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the application context (must be called after bootstrap)
|
|
49
|
+
* @throws {Error} if called before initialization
|
|
50
|
+
*/
|
|
51
|
+
function getAppContext() {
|
|
52
|
+
if (!appContext) {
|
|
53
|
+
throw new Error('Application not initialized. This should be called after cds.served event.');
|
|
54
|
+
}
|
|
55
|
+
return appContext;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the CardanoIndexer instance
|
|
59
|
+
* Convenience function for services
|
|
60
|
+
*/
|
|
61
|
+
function getCardanoIndexer() {
|
|
62
|
+
return getAppContext().cardanoIndexer;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get the CardanoClient instance
|
|
66
|
+
* Convenience function for services
|
|
67
|
+
*/
|
|
68
|
+
function getCardanoClient() {
|
|
69
|
+
return getAppContext().cardanoClient;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the CardanoTransactionBuilder instance
|
|
73
|
+
* Convenience function for services and plugin consumers
|
|
74
|
+
*/
|
|
75
|
+
function getCardanoTxBuilder() {
|
|
76
|
+
return getAppContext().cardanoTxBuilder;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Initialize from a pre-built config (used by plugin's src/index.ts)
|
|
80
|
+
* @param config - validated CardanoClientConfig
|
|
81
|
+
* @param protocolParams - Optional protocol parameters (for tests)
|
|
82
|
+
*/
|
|
83
|
+
async function initializeFromConfig(config, protocolParams) {
|
|
84
|
+
appContext = await initializeAppContext(config, protocolParams);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Reset the application context (for testing only)
|
|
88
|
+
* Allows tests to inject their own instances
|
|
89
|
+
*/
|
|
90
|
+
function resetAppContext(context) {
|
|
91
|
+
appContext = context;
|
|
92
|
+
logger.debug('Application context reset');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a test context with specific backends and transaction builder
|
|
96
|
+
* Used by integration tests to create isolated test instances
|
|
97
|
+
* @param backends Array of backend names to use (e.g., ['koios'], ['blockfrost'])
|
|
98
|
+
* @param txBuilderName Optional transaction builder name ('csl' or 'buildooor'), defaults to 'csl'
|
|
99
|
+
* @param protocolParams Optional protocol parameters (to skip backend call during init)
|
|
100
|
+
* @returns Promise<AppContext> The created application context
|
|
101
|
+
*/
|
|
102
|
+
async function createTestContext(backends, txBuilderName = 'csl', protocolParams) {
|
|
103
|
+
// Set TX_BUILDERS env so TxBuilderRegistry.createDefault() uses the correct builder
|
|
104
|
+
process_1.env.TX_BUILDERS = txBuilderName;
|
|
105
|
+
const config = {
|
|
106
|
+
network: process_1.env.NETWORK || 'preview',
|
|
107
|
+
backends,
|
|
108
|
+
blockfrostApiKey: process_1.env.BLOCKFROST_API_KEY || '',
|
|
109
|
+
koiosApiKey: process_1.env.KOIOS_API_KEY || '',
|
|
110
|
+
ogmiosUrl: process_1.env.OGMIOS_URL || '',
|
|
111
|
+
transactionBuilders: [txBuilderName],
|
|
112
|
+
primaryTimeoutMs: Number(process_1.env.PRIMARY_TIMEOUT_MS) || 30000,
|
|
113
|
+
fallbackTimeoutMs: Number(process_1.env.FALLBACK_TIMEOUT_MS) || 60000,
|
|
114
|
+
indexTtlMs: Number(process_1.env.INDEX_TTL_MS) || 3600000,
|
|
115
|
+
};
|
|
116
|
+
return initializeAppContext(config, protocolParams);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Shutdown the application context (for cleanup in tests)
|
|
120
|
+
* Closes all backend connections to allow process to exit cleanly
|
|
121
|
+
*/
|
|
122
|
+
async function shutdownAppContext() {
|
|
123
|
+
if (appContext) {
|
|
124
|
+
logger.info('Shutting down application context...');
|
|
125
|
+
await appContext.cardanoClient.shutdown();
|
|
126
|
+
appContext = null;
|
|
127
|
+
logger.info('Application context shutdown complete');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Load and validate CardanoClientConfig from CDS config or environment variables.
|
|
132
|
+
*
|
|
133
|
+
* When used as a plugin, consumers configure via package.json:
|
|
134
|
+
* { "cds": { "requires": { "odatano-core": { "network": "preview", "backends": ["blockfrost"], ... }}}}
|
|
135
|
+
*
|
|
136
|
+
* Priority: cds.env.requires["odatano-core"].X > process.env.X > default
|
|
137
|
+
*
|
|
138
|
+
* @returns validated CardanoClientConfig
|
|
139
|
+
* @throws {Error} if any config value is invalid
|
|
140
|
+
*/
|
|
141
|
+
function loadConfigFromEnv() {
|
|
142
|
+
// Check CDS plugin config first, fall back to env vars
|
|
143
|
+
const cdsConfig = cds_1.default.env?.requires?.['odatano-core'] ?? {};
|
|
144
|
+
const network = (cdsConfig.network || process_1.env.NETWORK || 'preview');
|
|
145
|
+
if (!VALID_NETWORKS.includes(network)) {
|
|
146
|
+
throw new Error(`Invalid NETWORK "${cdsConfig.network || process_1.env.NETWORK}". Must be one of: ${VALID_NETWORKS.join(', ')}`);
|
|
147
|
+
}
|
|
148
|
+
const backendStrings = cdsConfig.backends
|
|
149
|
+
|| (process_1.env.BACKENDS ? process_1.env.BACKENDS.split(',').map(b => b.trim()) : ['koios']);
|
|
150
|
+
const invalidBackends = backendStrings.filter(b => !VALID_BACKENDS.includes(b));
|
|
151
|
+
if (invalidBackends.length > 0) {
|
|
152
|
+
throw new Error(`Invalid BACKENDS: "${invalidBackends.join(', ')}". Must be one of: ${VALID_BACKENDS.join(', ')}`);
|
|
153
|
+
}
|
|
154
|
+
const backends = backendStrings;
|
|
155
|
+
const txBuilderStrings = cdsConfig.txBuilders
|
|
156
|
+
|| (process_1.env.TX_BUILDERS ? process_1.env.TX_BUILDERS.split(',').map(b => b.trim()) : ['csl']);
|
|
157
|
+
const invalidBuilders = txBuilderStrings.filter(b => !VALID_TX_BUILDERS.includes(b));
|
|
158
|
+
if (invalidBuilders.length > 0) {
|
|
159
|
+
throw new Error(`Invalid TX_BUILDERS: "${invalidBuilders.join(', ')}". Must be one of: ${VALID_TX_BUILDERS.join(', ')}`);
|
|
160
|
+
}
|
|
161
|
+
const txBuilders = txBuilderStrings;
|
|
162
|
+
const primaryTimeout = cdsConfig.primaryTimeoutMs || process_1.env.PRIMARY_TIMEOUT_MS;
|
|
163
|
+
const fallbackTimeout = cdsConfig.fallbackTimeoutMs || process_1.env.FALLBACK_TIMEOUT_MS;
|
|
164
|
+
if (primaryTimeout && isNaN(Number(primaryTimeout))) {
|
|
165
|
+
throw new Error(`Invalid PRIMARY_TIMEOUT_MS "${primaryTimeout}". Must be a number.`);
|
|
166
|
+
}
|
|
167
|
+
if (fallbackTimeout && isNaN(Number(fallbackTimeout))) {
|
|
168
|
+
throw new Error(`Invalid FALLBACK_TIMEOUT_MS "${fallbackTimeout}". Must be a number.`);
|
|
169
|
+
}
|
|
170
|
+
const blockfrostApiKey = cdsConfig.blockfrostApiKey || process_1.env.BLOCKFROST_API_KEY || '';
|
|
171
|
+
const koiosApiKey = cdsConfig.koiosApiKey || process_1.env.KOIOS_API_KEY || '';
|
|
172
|
+
const ogmiosUrl = cdsConfig.ogmiosUrl || process_1.env.OGMIOS_URL || '';
|
|
173
|
+
// Warn about missing API keys for selected backends
|
|
174
|
+
if (backends.includes('blockfrost') && !blockfrostApiKey) {
|
|
175
|
+
logger.warn('BLOCKFROST_API_KEY is not set but blockfrost is listed in BACKENDS');
|
|
176
|
+
}
|
|
177
|
+
if (backends.includes('ogmios') && !ogmiosUrl) {
|
|
178
|
+
logger.warn('OGMIOS_URL is not set but ogmios is listed in BACKENDS');
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
network,
|
|
182
|
+
backends,
|
|
183
|
+
blockfrostApiKey,
|
|
184
|
+
koiosApiKey,
|
|
185
|
+
ogmiosUrl,
|
|
186
|
+
transactionBuilders: txBuilders,
|
|
187
|
+
primaryTimeoutMs: Number(primaryTimeout) || 30000,
|
|
188
|
+
fallbackTimeoutMs: Number(fallbackTimeout) || 60000,
|
|
189
|
+
indexTtlMs: Number(cdsConfig.indexTtlMs || process_1.env.INDEX_TTL_MS) || 3600000,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// Bootstrap hook - runs when CAP server has loaded all services
|
|
193
|
+
cds_1.default.on('served', async () => {
|
|
194
|
+
// Skip if already initialized by plugin (src/plugin.ts runs first)
|
|
195
|
+
if (appContext)
|
|
196
|
+
return;
|
|
197
|
+
// Skip auto-initialization when SKIP_AUTO_INIT is set (e.g., for tests with mocked backends)
|
|
198
|
+
if (process_1.env.SKIP_AUTO_INIT === 'true') {
|
|
199
|
+
logger.info('Skipping auto-initialization (SKIP_AUTO_INIT=true)');
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const config = loadConfigFromEnv();
|
|
203
|
+
try {
|
|
204
|
+
appContext = await initializeAppContext(config);
|
|
205
|
+
logger.info('CAP server bootstrap complete');
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
logger.error('Failed to initialize blockchain components:', err);
|
|
209
|
+
throw err;
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-request-handler.d.ts","sourceRoot":"","sources":["backend-request-handler.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAKxC;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAClC,OAAO,CAAC,GAAG,CAAC,CAUb"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.handleBackendRequest = handleBackendRequest;
|
|
7
|
+
exports.handleRequest = handleRequest;
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
const cds_1 = __importDefault(require("@sap/cds"));
|
|
10
|
+
const mappers_1 = require("./mappers");
|
|
11
|
+
const logger = cds_1.default.log('BackendRequestHandler');
|
|
12
|
+
/**
|
|
13
|
+
* BackendRequestHandler - Provides standardized handling for backend requests
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* BackendRequestHandler - Wraps a backend method call with standardized error handling
|
|
17
|
+
* @param fn - The async function to execute
|
|
18
|
+
* @param backendName - Name of the backend (for error context)
|
|
19
|
+
* @param resourceName - Name of the resource being accessed (e.g., "Transaction", "Address")
|
|
20
|
+
* @returns {Promise<T>} The result of the backend call or a normalized error
|
|
21
|
+
*/
|
|
22
|
+
async function handleBackendRequest(fn, backendName) {
|
|
23
|
+
try {
|
|
24
|
+
return await fn();
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
throw (0, errors_1.normalizeBackendError)(err, backendName);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* General request handler for CardanoService
|
|
32
|
+
* @param req - The incoming request
|
|
33
|
+
* @param handler - The async function containing business logic
|
|
34
|
+
* @returns {Promise<any>} The result of the handler or a mapped error response
|
|
35
|
+
*/
|
|
36
|
+
async function handleRequest(req, handler) {
|
|
37
|
+
const context = req.target?.name || req.event;
|
|
38
|
+
const db = cds_1.default.tx(req);
|
|
39
|
+
try {
|
|
40
|
+
return await handler(db);
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
logger.error({ err: e }, `${context} error`);
|
|
44
|
+
return (0, mappers_1.mapError)(req, e, context);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=backend-request-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-request-handler.js","sourceRoot":"","sources":["backend-request-handler.ts"],"names":[],"mappings":";;;;;AAiBA,oDASC;AAQD,sCAaC;AA/CD,qCAAiD;AACjD,mDAAwC;AACxC,uCAAqC;AAErC,MAAM,MAAM,GAAG,aAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAEhD;;GAEG;AAEH;;;;;;GAMG;AACI,KAAK,UAAU,oBAAoB,CACxC,EAAoB,EACpB,WAAmB;IAEnB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,IAAA,8BAAqB,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,aAAa,CACjC,GAAY,EACZ,OAAkC;IAElC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC;IAC9C,MAAM,EAAE,GAAG,aAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,QAAQ,CAAC,CAAC;QAC7C,OAAO,IAAA,kBAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAEnC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["const.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,sDAAsD;;IAEtD,yCAAyC;;IAEzC,4BAA4B;;CAE7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB;IAClC,wCAAwC;;IAExC,qCAAqC;;CAEtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B,8CAA8C;;IAE9C,2CAA2C;;CAE5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;GAEG;AAED,uEAAuE;AACzE,eAAO,MAAO,oBAAoB,KAAM,CAAC;AAGzC,eAAO,MAAM,GAAG;;;;;;;;;;;;;CAIf,CAAC;AAEF;;GAEG;AAEH,gDAAgD;AAChD,eAAO,MAAM,aAAa,UAAY,CAAC;AACvC,oDAAoD;AACpD,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,8CAA8C;AAC9C,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,sCAAsC;AACtC,eAAO,MAAM,SAAS,SAAU,CAAC;AACjC,sCAAsC;AACtC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,8EAA8E;AAC9E,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,aAAa,QAAmB,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAuB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,QAAkD,CAAC;AAE7E;;GAEG;AACH,eAAO,MAAM,aAAa,QAAqD,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DREP_ID_REGEX = exports.POOL_ID_REGEX = exports.ASSET_UNIT_REGEX = exports.TX_HASH_REGEX = exports.DREP_ID_BYTES = exports.POOL_ID_BYTES = exports.MAX_EPOCH = exports.BECH32_MAX_LENGTH = exports.MAX_STRING_LENGTH = exports.MAX_ARRAY_LENGTH = exports.MAX_KEYS = exports.MAX_DEPTH = exports.MAX_JSON_SIZE = exports.HRP = exports.WITNESS_BUFFER_BYTES = exports.EXECUTION_UNIT_BUFFER = exports.HIGH_EXECUTION_UNITS = exports.DEFAULT_EXECUTION_UNITS = exports.CARDANO_DEFAULTS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Cardano protocol constants
|
|
6
|
+
*/
|
|
7
|
+
exports.CARDANO_DEFAULTS = {
|
|
8
|
+
/** Maximum ADA supply in lovelace (45 billion ADA) */
|
|
9
|
+
MAX_LOVELACE_SUPPLY: '45000000000000000',
|
|
10
|
+
/** Slots per epoch (mainnet/testnets) */
|
|
11
|
+
SLOTS_PER_EPOCH: 432_000,
|
|
12
|
+
/** Milliseconds per slot */
|
|
13
|
+
MS_PER_SLOT: 1000,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Default execution units for Plutus scripts
|
|
17
|
+
* Used when dynamic evaluation is not available
|
|
18
|
+
*/
|
|
19
|
+
exports.DEFAULT_EXECUTION_UNITS = {
|
|
20
|
+
/** Memory units for script execution */
|
|
21
|
+
mem: 14_000_000,
|
|
22
|
+
/** CPU steps for script execution */
|
|
23
|
+
cpu: 10_000_000_000,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* High execution units for initial transaction build (before evaluation)
|
|
27
|
+
* Set higher than DEFAULT to ensure fee estimation is sufficient before actual evaluation
|
|
28
|
+
*/
|
|
29
|
+
exports.HIGH_EXECUTION_UNITS = {
|
|
30
|
+
/** Memory units - high for evaluation pass */
|
|
31
|
+
mem: 28_000_000,
|
|
32
|
+
/** CPU steps - high for evaluation pass */
|
|
33
|
+
cpu: 20_000_000_000,
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Execution unit buffer multiplier (10% safety margin)
|
|
37
|
+
*/
|
|
38
|
+
exports.EXECUTION_UNIT_BUFFER = 1.1;
|
|
39
|
+
/**
|
|
40
|
+
* Transaction building constants
|
|
41
|
+
*/
|
|
42
|
+
/** Buffer for witness set CBOR overhead when signing adds ~44 bytes */
|
|
43
|
+
exports.WITNESS_BUFFER_BYTES = 50;
|
|
44
|
+
exports.HRP = {
|
|
45
|
+
mainnet: { addr: /^addr1[0-9a-z]{50,100}$/, stake: /^stake1[0-9a-z]{53,}$/ },
|
|
46
|
+
preview: { addr: /^addr_test1[0-9a-z]{50,100}$/, stake: /^stake_test1[0-9a-z]{53,}$/ },
|
|
47
|
+
preprod: { addr: /^addr_test1[0-9a-z]{50,100}$/, stake: /^stake_test1[0-9a-z]{53,}$/ },
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Input validation limits to prevent DoS attacks
|
|
51
|
+
*/
|
|
52
|
+
/** Maximum JSON string length in bytes (1MB) */
|
|
53
|
+
exports.MAX_JSON_SIZE = 1_048_576;
|
|
54
|
+
/** Maximum nesting depth for JSON objects/arrays */
|
|
55
|
+
exports.MAX_DEPTH = 10;
|
|
56
|
+
/** Maximum number of keys in a JSON object */
|
|
57
|
+
exports.MAX_KEYS = 100;
|
|
58
|
+
/** Maximum number of elements in a JSON array */
|
|
59
|
+
exports.MAX_ARRAY_LENGTH = 1000;
|
|
60
|
+
/** Maximum length of a single string value */
|
|
61
|
+
exports.MAX_STRING_LENGTH = 65536;
|
|
62
|
+
/** Maximum ech32 string length to prevent DoS */
|
|
63
|
+
exports.BECH32_MAX_LENGTH = 2000;
|
|
64
|
+
/** Maximum reasonable epoch number */
|
|
65
|
+
exports.MAX_EPOCH = 100_000;
|
|
66
|
+
/** Standard pool ID payload length */
|
|
67
|
+
exports.POOL_ID_BYTES = 28;
|
|
68
|
+
/** Standard DRep ID payload length (1 byte type prefix + 28 byte key hash) */
|
|
69
|
+
exports.DREP_ID_BYTES = 29;
|
|
70
|
+
/**
|
|
71
|
+
* Transaction hash Regex - 64-character hexadecimal string
|
|
72
|
+
*/
|
|
73
|
+
exports.TX_HASH_REGEX = /^[a-f0-9]{64}$/;
|
|
74
|
+
/**
|
|
75
|
+
* Asset unit Regex - policy ID (56 hex chars) + asset name (0-128 hex chars)
|
|
76
|
+
*/
|
|
77
|
+
exports.ASSET_UNIT_REGEX = /^[a-f0-9]{56,192}$/; // policy ID (56) + asset name (0-64 bytes -> 0-128 hex chars)
|
|
78
|
+
/**
|
|
79
|
+
* Pool ID Regex - bech32 with HRP "pool" and 28 bytes payload
|
|
80
|
+
*/
|
|
81
|
+
exports.POOL_ID_REGEX = /^pool1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{51}$/;
|
|
82
|
+
/**
|
|
83
|
+
* DRep ID Regex - bech32 with HRP "drep" and 50-60 chars payload
|
|
84
|
+
*/
|
|
85
|
+
exports.DREP_ID_REGEX = /^drep1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{50,60}$/;
|
|
86
|
+
//# sourceMappingURL=const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["const.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,gBAAgB,GAAG;IAC9B,sDAAsD;IACtD,mBAAmB,EAAE,mBAAmB;IACxC,yCAAyC;IACzC,eAAe,EAAE,OAAO;IACxB,4BAA4B;IAC5B,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF;;;GAGG;AACU,QAAA,uBAAuB,GAAG;IACrC,wCAAwC;IACxC,GAAG,EAAE,UAAU;IACf,qCAAqC;IACrC,GAAG,EAAE,cAAc;CACpB,CAAC;AAEF;;;GAGG;AACU,QAAA,oBAAoB,GAAG;IAClC,8CAA8C;IAC9C,GAAG,EAAE,UAAU;IACf,2CAA2C;IAC3C,GAAG,EAAE,cAAc;CACpB,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAG,GAAG,CAAC;AAEzC;;GAEG;AAED,uEAAuE;AAC3D,QAAA,oBAAoB,GAAI,EAAE,CAAC;AAG5B,QAAA,GAAG,GAAG;IACjB,OAAO,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,uBAAuB,EAAE;IAC5E,OAAO,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,4BAA4B,EAAE;IACtF,OAAO,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,4BAA4B,EAAE;CACvF,CAAC;AAEF;;GAEG;AAEH,gDAAgD;AACnC,QAAA,aAAa,GAAG,SAAS,CAAC;AACvC,oDAAoD;AACvC,QAAA,SAAS,GAAG,EAAE,CAAC;AAC5B,8CAA8C;AACjC,QAAA,QAAQ,GAAG,GAAG,CAAC;AAC5B,iDAAiD;AACpC,QAAA,gBAAgB,GAAG,IAAI,CAAC;AACrC,8CAA8C;AACjC,QAAA,iBAAiB,GAAG,KAAK,CAAC;AACvC,iDAAiD;AACpC,QAAA,iBAAiB,GAAG,IAAI,CAAC;AACtC,sCAAsC;AACzB,QAAA,SAAS,GAAG,OAAO,CAAC;AACjC,sCAAsC;AACzB,QAAA,aAAa,GAAG,EAAE,CAAC;AAChC,8EAA8E;AACjE,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC;;GAEG;AACU,QAAA,aAAa,GAAG,gBAAgB,CAAC;AAE9C;;GAEG;AACU,QAAA,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,8DAA8D;AAEpH;;GAEG;AACU,QAAA,aAAa,GAAG,+CAA+C,CAAC;AAE7E;;GAEG;AACU,QAAA,aAAa,GAAG,kDAAkD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["error-codes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;QAGI;;IAGJ;;;OAGG;;IAGH;;;OAGG;;CAEK,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,SAAS,GACnB,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERROR_CODES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Error codes used throughout the ODATANO backend
|
|
6
|
+
*/
|
|
7
|
+
exports.ERROR_CODES = {
|
|
8
|
+
/**
|
|
9
|
+
* 400 – Invalid input
|
|
10
|
+
* Indicates that the input provided by the client is invalid (malformed address, invalid transaction hash, etc.)
|
|
11
|
+
*/
|
|
12
|
+
INVALID_INPUT: 'ODATANO_INVALID_INPUT',
|
|
13
|
+
/**
|
|
14
|
+
* 404 – Data not found
|
|
15
|
+
* Indicates that the requested resource could not be found (Empty result set Address with no UTxOs, Transaction hash not found, etc.)
|
|
16
|
+
*/
|
|
17
|
+
NOT_FOUND: 'ODATANO_NOT_FOUND',
|
|
18
|
+
/**
|
|
19
|
+
* 400 – Insufficient funds/assets
|
|
20
|
+
* Indicates that the address does not have enough funds or assets to complete the transaction
|
|
21
|
+
*/
|
|
22
|
+
INSUFFICIENT_FUNDS: 'ODATANO_INSUFFICIENT_FUNDS',
|
|
23
|
+
/**
|
|
24
|
+
* 400 – Transaction validation failed
|
|
25
|
+
* Indicates that the transaction failed validation (wrong signature, tampered CBOR, etc.)
|
|
26
|
+
*/
|
|
27
|
+
TX_VALIDATION_FAILED: 'ODATANO_TX_VALIDATION_FAILED',
|
|
28
|
+
/**
|
|
29
|
+
* 409 – Transaction already submitted
|
|
30
|
+
* Indicates that the transaction has already been submitted (duplicate/replay)
|
|
31
|
+
*/
|
|
32
|
+
TX_ALREADY_SUBMITTED: 'ODATANO_TX_ALREADY_SUBMITTED',
|
|
33
|
+
/**
|
|
34
|
+
* 429 – Rate limiting
|
|
35
|
+
* indicates temporary unavailability
|
|
36
|
+
*/
|
|
37
|
+
PROVIDER_RATE_LIMITED: 'ODATANO_PROVIDER_RATE_LIMITED',
|
|
38
|
+
/**
|
|
39
|
+
* 503 – Upstream / connectivity
|
|
40
|
+
* Indicates that the Cardano data provider is currently unavailable
|
|
41
|
+
*/
|
|
42
|
+
PROVIDER_UNAVAILABLE: 'ODATANO_PROVIDER_UNAVAILABLE',
|
|
43
|
+
/**
|
|
44
|
+
* 500 – Internal fallback
|
|
45
|
+
* Indicates an unexpected internal error
|
|
46
|
+
*/
|
|
47
|
+
INTERNAL_ERROR: 'ODATANO_INTERNAL_ERROR',
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=error-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["error-codes.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB;;;OAGG;IACH,aAAa,EAAE,uBAAuB;IAEtC;;;OAGG;IACH,SAAS,EAAE,mBAAmB;IAE9B;;;OAGG;IACH,kBAAkB,EAAE,4BAA4B;IAEhD;;;OAGG;IACH,oBAAoB,EAAE,8BAA8B;IAEpD;;;OAGG;IACH,oBAAoB,EAAE,8BAA8B;IAEpD;;;QAGI;IACJ,qBAAqB,EAAE,+BAA+B;IAEtD;;;OAGG;IACH,oBAAoB,EAAE,8BAA8B;IAEpD;;;OAGG;IACH,cAAc,EAAE,wBAAwB;CAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["errors.ts"],"names":[],"mappings":"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"}
|