@odatano/core 0.3.16 → 0.3.18

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.
Files changed (94) hide show
  1. package/@cds-models/CardanoODataService/index.d.ts +434 -427
  2. package/@cds-models/CardanoODataService/index.d.ts.map +1 -1
  3. package/@cds-models/CardanoODataService/index.js +7 -0
  4. package/@cds-models/CardanoODataService/index.js.map +1 -1
  5. package/@cds-models/CardanoODataService/index.ts +99 -92
  6. package/@cds-models/CardanoSignService/index.d.ts +1549 -0
  7. package/@cds-models/CardanoSignService/index.d.ts.map +1 -0
  8. package/@cds-models/CardanoSignService/index.js +291 -0
  9. package/@cds-models/CardanoSignService/index.js.map +1 -0
  10. package/@cds-models/CardanoSignService/index.ts +519 -0
  11. package/@cds-models/CardanoTransactionService/index.d.ts +338 -815
  12. package/@cds-models/CardanoTransactionService/index.d.ts.map +1 -1
  13. package/@cds-models/CardanoTransactionService/index.js +3 -63
  14. package/@cds-models/CardanoTransactionService/index.js.map +1 -1
  15. package/@cds-models/CardanoTransactionService/index.ts +71 -210
  16. package/@cds-models/index.d.ts +150 -1
  17. package/@cds-models/index.d.ts.map +1 -1
  18. package/@cds-models/index.js +51 -1
  19. package/@cds-models/index.js.map +1 -1
  20. package/@cds-models/index.ts +74 -2
  21. package/@cds-models/odatano/cardano/index.d.ts +553 -696
  22. package/@cds-models/odatano/cardano/index.d.ts.map +1 -1
  23. package/@cds-models/odatano/cardano/index.js +3 -52
  24. package/@cds-models/odatano/cardano/index.js.map +1 -1
  25. package/@cds-models/odatano/cardano/index.ts +93 -165
  26. package/README.md +78 -19
  27. package/db/schema.cds +6 -108
  28. package/db/types.cds +111 -0
  29. package/package.json +22 -6
  30. package/src/index.d.ts.map +1 -1
  31. package/src/index.js +8 -3
  32. package/src/index.js.map +1 -1
  33. package/src/plugin.d.ts.map +1 -1
  34. package/src/plugin.js +7 -2
  35. package/src/plugin.js.map +1 -1
  36. package/srv/blockchain/backends/koios-backend.d.ts.map +1 -1
  37. package/srv/blockchain/backends/koios-backend.js +6 -16
  38. package/srv/blockchain/backends/koios-backend.js.map +1 -1
  39. package/srv/blockchain/cardano-client.d.ts.map +1 -1
  40. package/srv/blockchain/cardano-client.js +13 -10
  41. package/srv/blockchain/cardano-client.js.map +1 -1
  42. package/srv/blockchain/cardano-indexer.d.ts.map +1 -1
  43. package/srv/blockchain/cardano-indexer.js +10 -8
  44. package/srv/blockchain/cardano-indexer.js.map +1 -1
  45. package/srv/blockchain/cardano-tx-builder.d.ts.map +1 -1
  46. package/srv/blockchain/cardano-tx-builder.js +16 -16
  47. package/srv/blockchain/cardano-tx-builder.js.map +1 -1
  48. package/srv/blockchain/signing/hsm-signer.d.ts.map +1 -0
  49. package/srv/blockchain/signing/hsm-signer.js +290 -0
  50. package/srv/blockchain/signing/hsm-signer.js.map +1 -0
  51. package/srv/blockchain/signing/signature-verifier.d.ts.map +1 -1
  52. package/srv/blockchain/signing/signature-verifier.js +7 -25
  53. package/srv/blockchain/signing/signature-verifier.js.map +1 -1
  54. package/srv/blockchain/transaction-building/buildooor-tx.d.ts.map +1 -1
  55. package/srv/blockchain/transaction-building/buildooor-tx.js +171 -437
  56. package/srv/blockchain/transaction-building/buildooor-tx.js.map +1 -1
  57. package/srv/blockchain/transaction-building/cardano-tx.d.ts.map +1 -1
  58. package/srv/blockchain/transaction-building/csl-tx.d.ts.map +1 -1
  59. package/srv/blockchain/transaction-building/csl-tx.js +230 -611
  60. package/srv/blockchain/transaction-building/csl-tx.js.map +1 -1
  61. package/srv/cardano-service.cds +17 -9
  62. package/srv/cardano-service.js +2 -14
  63. package/srv/cardano-service.js.map +1 -1
  64. package/srv/cardano-sign-service.cds +128 -0
  65. package/srv/cardano-sign-service.d.ts.map +1 -0
  66. package/srv/cardano-sign-service.js +401 -0
  67. package/srv/cardano-sign-service.js.map +1 -0
  68. package/srv/cardano-tx-service.cds +116 -196
  69. package/srv/cardano-tx-service.js +5 -308
  70. package/srv/cardano-tx-service.js.map +1 -1
  71. package/srv/server.d.ts.map +1 -1
  72. package/srv/server.js +60 -5
  73. package/srv/server.js.map +1 -1
  74. package/srv/utils/const.d.ts.map +1 -1
  75. package/srv/utils/const.js +5 -1
  76. package/srv/utils/const.js.map +1 -1
  77. package/srv/utils/error-codes.d.ts.map +1 -1
  78. package/srv/utils/error-codes.js +15 -0
  79. package/srv/utils/error-codes.js.map +1 -1
  80. package/srv/utils/errors.d.ts.map +1 -1
  81. package/srv/utils/errors.js +12 -1
  82. package/srv/utils/errors.js.map +1 -1
  83. package/srv/utils/mappers.d.ts.map +1 -1
  84. package/srv/utils/mappers.js +9 -29
  85. package/srv/utils/mappers.js.map +1 -1
  86. package/srv/utils/signing-helper.d.ts.map +1 -1
  87. package/srv/utils/signing-helper.js +43 -25
  88. package/srv/utils/signing-helper.js.map +1 -1
  89. package/srv/utils/tx-build-helper.d.ts.map +1 -1
  90. package/srv/utils/tx-build-helper.js +10 -4
  91. package/srv/utils/tx-build-helper.js.map +1 -1
  92. package/srv/utils/types.d.ts.map +1 -1
  93. package/srv/utils/types.js +2 -0
  94. package/srv/utils/types.js.map +1 -1
@@ -1,91 +1,18 @@
1
1
  // This is an automatically generated file. Please do not change its contents manually!
2
- import * as __ from './../../_';
3
2
  import * as _ from './../..';
4
-
5
- export type Blake2b224 = string;
6
- export type Blake2b256 = string;
7
- export type HexBytes = string;
8
- export type Lovelace = number;
9
- export type AssetUnit = string;
10
- export type MetadataLabel = string;
11
- export type Bech32 = string;
12
- // enum
13
- export const SubmissionStatus = {
14
- pending: "pending",
15
- submitted: "submitted",
16
- confirmed: "confirmed",
17
- failed: "failed",
18
- } as const;
19
- export type SubmissionStatus = "pending" | "submitted" | "confirmed" | "failed"
20
-
21
- // enum
22
- export const SigningStatus = {
23
- pending: "pending",
24
- signed: "signed",
25
- verified: "verified",
26
- submitted: "submitted",
27
- expired: "expired",
28
- failed: "failed",
29
- } as const;
30
- export type SigningStatus = "pending" | "signed" | "verified" | "submitted" | "expired" | "failed"
31
-
32
- export function _AssetSliceAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
33
- return class AssetSlice extends Base {
34
- declare quantity?: Lovelace | null
35
- declare policyId?: Blake2b224 | null
36
- declare assetNameHex?: string | null
37
- declare assetName?: string | null
38
- declare fingerprint?: string | null
39
- static readonly kind: 'entity' | 'type' | 'aspect' = 'type';
40
- declare static readonly keys: __.KeysOf<AssetSlice>;
41
- declare static readonly elements: __.ElementsOf<AssetSlice>;
42
- declare static readonly actions: globalThis.Record<never, never>;
43
- };
44
- }
45
- export class AssetSlice extends _AssetSliceAspect(__.Entity) {}
46
- Object.defineProperty(AssetSlice, 'name', { value: 'odatano.cardano.AssetSlice' })
47
- Object.defineProperty(AssetSlice, 'is_singular', { value: true })
48
-
49
- export function _MetadataSliceAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
50
- return class MetadataSlice extends Base {
51
- declare label?: MetadataLabel | null
52
- declare payload?: string | null
53
- static readonly kind: 'entity' | 'type' | 'aspect' = 'type';
54
- declare static readonly keys: __.KeysOf<MetadataSlice>;
55
- declare static readonly elements: __.ElementsOf<MetadataSlice>;
56
- declare static readonly actions: globalThis.Record<never, never>;
57
- };
58
- }
59
- export class MetadataSlice extends _MetadataSliceAspect(__.Entity) {}
60
- Object.defineProperty(MetadataSlice, 'name', { value: 'odatano.cardano.MetadataSlice' })
61
- Object.defineProperty(MetadataSlice, 'is_singular', { value: true })
62
-
63
- export function _UTxODataSliceAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
64
- return class UTxODataSlice extends Base {
65
- declare dataHash?: Blake2b256 | null
66
- declare inlineDatum?: string | null
67
- declare referenceScriptHash?: Blake2b256 | null
68
- static readonly kind: 'entity' | 'type' | 'aspect' = 'type';
69
- declare static readonly keys: __.KeysOf<UTxODataSlice>;
70
- declare static readonly elements: __.ElementsOf<UTxODataSlice>;
71
- declare static readonly actions: globalThis.Record<never, never>;
72
- };
73
- }
74
- export class UTxODataSlice extends _UTxODataSliceAspect(__.Entity) {}
75
- Object.defineProperty(UTxODataSlice, 'name', { value: 'odatano.cardano.UTxODataSlice' })
76
- Object.defineProperty(UTxODataSlice, 'is_singular', { value: true })
3
+ import * as __ from './../../_';
77
4
 
78
5
  export function _NetworkInformationAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
79
6
  return class NetworkInformation extends _._temporalAspect(Base) {
80
7
  declare network?: __.Key<string>
81
- declare maxSupply?: Lovelace | null
82
- declare totalSupply?: Lovelace | null
83
- declare circulatingSupply?: Lovelace | null
84
- declare lockedSupply?: Lovelace | null
85
- declare treasurySupply?: Lovelace | null
86
- declare reservesSupply?: Lovelace | null
87
- declare liveStake?: Lovelace | null
88
- declare activeStake?: Lovelace | null
8
+ declare maxSupply?: _.Lovelace | null
9
+ declare totalSupply?: _.Lovelace | null
10
+ declare circulatingSupply?: _.Lovelace | null
11
+ declare lockedSupply?: _.Lovelace | null
12
+ declare treasurySupply?: _.Lovelace | null
13
+ declare reservesSupply?: _.Lovelace | null
14
+ declare liveStake?: _.Lovelace | null
15
+ declare activeStake?: _.Lovelace | null
89
16
  static override readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
90
17
  declare static readonly keys: __.KeysOf<NetworkInformation>;
91
18
  declare static readonly elements: __.ElementsOf<NetworkInformation>;
@@ -109,7 +36,7 @@ export function _BlockAspect<TBase extends new (...args: any[]) => object>(Base:
109
36
  declare epochSlot?: number | null
110
37
  declare size?: number | null
111
38
  declare txCount?: number | null
112
- declare fees?: Lovelace | null
39
+ declare fees?: _.Lovelace | null
113
40
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
114
41
  declare static readonly keys: __.KeysOf<Block>;
115
42
  declare static readonly elements: __.ElementsOf<Block>;
@@ -132,8 +59,8 @@ export function _EpochAspect<TBase extends new (...args: any[]) => object>(Base:
132
59
  declare blockCount?: number | null
133
60
  declare txCount?: number | null
134
61
  declare output?: string | null
135
- declare fees?: Lovelace | null
136
- declare activeStake?: Lovelace | null
62
+ declare fees?: _.Lovelace | null
63
+ declare activeStake?: _.Lovelace | null
137
64
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
138
65
  declare static readonly keys: __.KeysOf<Epoch>;
139
66
  declare static readonly elements: __.ElementsOf<Epoch>;
@@ -152,15 +79,15 @@ export function _PoolAspect<TBase extends new (...args: any[]) => object>(Base:
152
79
  declare vrfKeyHash?: string | null
153
80
  declare blocksMinted?: number | null
154
81
  declare blocksEpoch?: number | null
155
- declare liveStake?: Lovelace | null
82
+ declare liveStake?: _.Lovelace | null
156
83
  declare liveSize?: number | null
157
84
  declare liveSaturation?: number | null
158
85
  declare liveDelegators?: number | null
159
- declare activeStake?: Lovelace | null
86
+ declare activeStake?: _.Lovelace | null
160
87
  declare activeSize?: number | null
161
- declare pledge?: Lovelace | null
88
+ declare pledge?: _.Lovelace | null
162
89
  declare margin?: number | null
163
- declare fixedCost?: Lovelace | null
90
+ declare fixedCost?: _.Lovelace | null
164
91
  declare rewardAccount?: string | null
165
92
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
166
93
  declare static readonly keys: __.KeysOf<Pool>;
@@ -178,7 +105,7 @@ export function _DrepAspect<TBase extends new (...args: any[]) => object>(Base:
178
105
  return class Drep extends Base {
179
106
  declare drepId?: __.Key<string>
180
107
  declare hex?: string | null
181
- declare amount?: Lovelace | null
108
+ declare amount?: _.Lovelace | null
182
109
  declare hasScript?: boolean | null
183
110
  declare lastActiveEpoch?: number | null
184
111
  declare retired?: boolean | null
@@ -197,11 +124,11 @@ Object.defineProperty(Dreps, 'name', { value: 'odatano.cardano.Dreps' })
197
124
 
198
125
  export function _AddressAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
199
126
  return class Address extends _._temporalAspect(Base) {
200
- declare address?: __.Key<Bech32>
201
- declare stakeAddress?: Bech32 | null
127
+ declare address?: __.Key<_.Bech32>
128
+ declare stakeAddress?: _.Bech32 | null
202
129
  declare type?: string | null
203
130
  declare isScript?: boolean | null
204
- declare totalLovelace?: Lovelace | null
131
+ declare totalLovelace?: _.Lovelace | null
205
132
  declare transactions?: __.Composition.of.many<AddressTransactions>
206
133
  declare assets?: __.Composition.of.many<AddressAssets>
207
134
  declare utxos?: __.Composition.of.many<AddressUTxOs>
@@ -223,11 +150,11 @@ Object.defineProperty(Addresses, 'name', { value: 'odatano.cardano.Addresses' })
223
150
  export function _AddressAssetAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
224
151
  return class AddressAsset extends _._temporalAspect(Base) {
225
152
  declare address?: __.Key<__.Association.to<Address>>
226
- declare address_address?: __.Key<Bech32>
227
- declare unit?: __.Key<AssetUnit>
228
- declare asset_quantity?: Lovelace | null
229
- declare asset_policyId?: Blake2b224 | null
230
- declare asset_assetNameHex?: string | null
153
+ declare address_address?: __.Key<_.Bech32>
154
+ declare unit?: __.Key<_.AssetUnit>
155
+ declare asset_quantity?: _.Lovelace | null
156
+ declare asset_policyId?: _.Blake2b224 | null
157
+ declare asset_assetNameHex?: _.HexBytes | null
231
158
  declare asset_assetName?: string | null
232
159
  declare asset_fingerprint?: string | null
233
160
  static override readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -245,14 +172,14 @@ Object.defineProperty(AddressAssets, 'name', { value: 'odatano.cardano.AddressAs
245
172
  export function _AddressUTxOAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
246
173
  return class AddressUTxO extends _._temporalAspect(Base) {
247
174
  declare address?: __.Key<__.Association.to<Address>>
248
- declare address_address?: __.Key<Bech32>
249
- declare hash?: __.Key<Blake2b256>
175
+ declare address_address?: __.Key<_.Bech32>
176
+ declare hash?: __.Key<_.Blake2b256>
250
177
  declare index?: __.Key<number>
251
- declare blockHash?: Blake2b256 | null
252
- declare utxodata_dataHash?: Blake2b256 | null
178
+ declare blockHash?: _.Blake2b256 | null
179
+ declare utxodata_dataHash?: _.Blake2b256 | null
253
180
  declare utxodata_inlineDatum?: string | null
254
- declare utxodata_referenceScriptHash?: Blake2b256 | null
255
- declare lovelace?: Lovelace | null
181
+ declare utxodata_referenceScriptHash?: _.Blake2b256 | null
182
+ declare lovelace?: _.Lovelace | null
256
183
  declare assets?: __.Composition.of.many<UTxOAssets>
257
184
  declare hasAssets?: boolean | null
258
185
  static override readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -270,13 +197,13 @@ Object.defineProperty(AddressUTxOs, 'name', { value: 'odatano.cardano.AddressUTx
270
197
  export function _UTxOAssetAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
271
198
  return class UTxOAsset extends _._temporalAspect(Base) {
272
199
  declare utxo?: __.Key<__.Association.to<AddressUTxO>>
273
- declare utxo_hash?: __.Key<Blake2b256>
200
+ declare utxo_hash?: __.Key<_.Blake2b256>
274
201
  declare utxo_index?: __.Key<number>
275
- declare utxo_address_address?: __.Key<Bech32>
276
- declare unit?: __.Key<AssetUnit>
277
- declare asset_quantity?: Lovelace | null
278
- declare asset_policyId?: Blake2b224 | null
279
- declare asset_assetNameHex?: string | null
202
+ declare utxo_address_address?: __.Key<_.Bech32>
203
+ declare unit?: __.Key<_.AssetUnit>
204
+ declare asset_quantity?: _.Lovelace | null
205
+ declare asset_policyId?: _.Blake2b224 | null
206
+ declare asset_assetNameHex?: _.HexBytes | null
280
207
  declare asset_assetName?: string | null
281
208
  declare asset_fingerprint?: string | null
282
209
  static override readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -296,12 +223,12 @@ export function _AccountAspect<TBase extends new (...args: any[]) => object>(Bas
296
223
  declare stakeAddress?: __.Key<string>
297
224
  declare active?: boolean | null
298
225
  declare activeEpoch?: number | null
299
- declare controlledAmount?: Lovelace | null
300
- declare rewardsSum?: Lovelace | null
301
- declare withdrawalsSum?: Lovelace | null
302
- declare reservesSum?: Lovelace | null
303
- declare treasurySum?: Lovelace | null
304
- declare withdrawableAmount?: Lovelace | null
226
+ declare controlledAmount?: _.Lovelace | null
227
+ declare rewardsSum?: _.Lovelace | null
228
+ declare withdrawalsSum?: _.Lovelace | null
229
+ declare reservesSum?: _.Lovelace | null
230
+ declare treasurySum?: _.Lovelace | null
231
+ declare withdrawableAmount?: _.Lovelace | null
305
232
  declare poolId?: __.Association.to<Pool> | null
306
233
  declare poolId_poolId?: string | null
307
234
  declare drepId?: __.Association.to<Drep> | null
@@ -322,14 +249,14 @@ Object.defineProperty(Accounts, 'name', { value: 'odatano.cardano.Accounts' })
322
249
 
323
250
  export function _TransactionAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
324
251
  return class Transaction extends Base {
325
- declare hash?: __.Key<Blake2b256>
326
- declare blockHash?: Blake2b256 | null
252
+ declare hash?: __.Key<_.Blake2b256>
253
+ declare blockHash?: _.Blake2b256 | null
327
254
  declare blockHeight?: number | null
328
255
  declare blockTime?: number | null
329
256
  declare slot?: number | null
330
257
  declare txIndex?: number | null
331
- declare fee?: Lovelace | null
332
- declare deposit?: Lovelace | null
258
+ declare fee?: _.Lovelace | null
259
+ declare deposit?: _.Lovelace | null
333
260
  declare size?: number | null
334
261
  declare metadata?: __.Composition.of.many<TransactionMetadata_>
335
262
  declare inputs?: __.Composition.of.many<TransactionInputs>
@@ -352,13 +279,13 @@ Object.defineProperty(Transactions, 'name', { value: 'odatano.cardano.Transactio
352
279
  export function _TransactionInputAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
353
280
  return class TransactionInput extends Base {
354
281
  declare tx?: __.Key<__.Association.to<Transaction>>
355
- declare tx_hash?: __.Key<Blake2b256>
282
+ declare tx_hash?: __.Key<_.Blake2b256>
356
283
  declare inputIndex?: __.Key<number>
357
284
  declare address?: __.Association.to<Address> | null
358
- declare address_address?: Bech32 | null
359
- declare utxoData_dataHash?: Blake2b256 | null
285
+ declare address_address?: _.Bech32 | null
286
+ declare utxoData_dataHash?: _.Blake2b256 | null
360
287
  declare utxoData_inlineDatum?: string | null
361
- declare utxoData_referenceScriptHash?: Blake2b256 | null
288
+ declare utxoData_referenceScriptHash?: _.Blake2b256 | null
362
289
  declare isCollateral?: boolean | null
363
290
  declare isReference?: boolean | null
364
291
  declare assets?: __.Composition.of.many<TransactionInputAssets>
@@ -380,11 +307,11 @@ export function _TransactionInputAssetAspect<TBase extends new (...args: any[])
380
307
  return class TransactionInputAsset extends Base {
381
308
  declare input?: __.Key<__.Association.to<TransactionInput>>
382
309
  declare input_inputIndex?: __.Key<number>
383
- declare input_tx_hash?: __.Key<Blake2b256>
384
- declare unit?: __.Key<AssetUnit>
385
- declare asset_quantity?: Lovelace | null
386
- declare asset_policyId?: Blake2b224 | null
387
- declare asset_assetNameHex?: string | null
310
+ declare input_tx_hash?: __.Key<_.Blake2b256>
311
+ declare unit?: __.Key<_.AssetUnit>
312
+ declare asset_quantity?: _.Lovelace | null
313
+ declare asset_policyId?: _.Blake2b224 | null
314
+ declare asset_assetNameHex?: _.HexBytes | null
388
315
  declare asset_assetName?: string | null
389
316
  declare asset_fingerprint?: string | null
390
317
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -402,13 +329,13 @@ Object.defineProperty(TransactionInputAssets, 'name', { value: 'odatano.cardano.
402
329
  export function _TransactionOutputAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
403
330
  return class TransactionOutput extends Base {
404
331
  declare tx?: __.Key<__.Association.to<Transaction>>
405
- declare tx_hash?: __.Key<Blake2b256>
332
+ declare tx_hash?: __.Key<_.Blake2b256>
406
333
  declare outputIndex?: __.Key<number>
407
334
  declare address?: __.Association.to<Address> | null
408
- declare address_address?: Bech32 | null
409
- declare utxo_dataHash?: Blake2b256 | null
335
+ declare address_address?: _.Bech32 | null
336
+ declare utxo_dataHash?: _.Blake2b256 | null
410
337
  declare utxo_inlineDatum?: string | null
411
- declare utxo_referenceScriptHash?: Blake2b256 | null
338
+ declare utxo_referenceScriptHash?: _.Blake2b256 | null
412
339
  declare assets?: __.Composition.of.many<TransactionOutputAssets>
413
340
  declare hasAddresses?: boolean | null
414
341
  declare hasAssets?: boolean | null
@@ -428,11 +355,11 @@ export function _TransactionOutputAssetAspect<TBase extends new (...args: any[])
428
355
  return class TransactionOutputAsset extends Base {
429
356
  declare output?: __.Key<__.Association.to<TransactionOutput>>
430
357
  declare output_outputIndex?: __.Key<number>
431
- declare output_tx_hash?: __.Key<Blake2b256>
432
- declare unit?: __.Key<AssetUnit>
433
- declare asset_quantity?: Lovelace | null
434
- declare asset_policyId?: Blake2b224 | null
435
- declare asset_assetNameHex?: string | null
358
+ declare output_tx_hash?: __.Key<_.Blake2b256>
359
+ declare unit?: __.Key<_.AssetUnit>
360
+ declare asset_quantity?: _.Lovelace | null
361
+ declare asset_policyId?: _.Blake2b224 | null
362
+ declare asset_assetNameHex?: _.HexBytes | null
436
363
  declare asset_assetName?: string | null
437
364
  declare asset_fingerprint?: string | null
438
365
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -451,7 +378,7 @@ export function _TransactionMetadataAspect<TBase extends new (...args: any[]) =>
451
378
  return class TransactionMetadata extends Base {
452
379
  declare id?: __.Key<number>
453
380
  declare tx?: __.Key<__.Association.to<Transaction>>
454
- declare tx_hash?: __.Key<Blake2b256>
381
+ declare tx_hash?: __.Key<_.Blake2b256>
455
382
  declare label?: string | null
456
383
  declare payload?: string | null
457
384
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -520,11 +447,11 @@ export function _TransactionBuildAspect<TBase extends new (...args: any[]) => ob
520
447
  declare id?: __.Key<string>
521
448
  declare network?: string | null
522
449
  declare builderEngine?: string | null
523
- declare senderAddress?: Bech32 | null
524
- declare changeAddress?: Bech32 | null
450
+ declare senderAddress?: _.Bech32 | null
451
+ declare changeAddress?: _.Bech32 | null
525
452
  declare unsignedTxCbor?: string | null
526
- declare txBodyHash?: Blake2b256 | null
527
- declare fee?: Lovelace | null
453
+ declare txBodyHash?: _.Blake2b256 | null
454
+ declare fee?: _.Lovelace | null
528
455
  declare size?: number | null
529
456
  declare createdAt?: number | null
530
457
  declare inputs?: __.Composition.of.many<TransactionBuildInputs>
@@ -553,10 +480,10 @@ export function _TransactionBuildInputAspect<TBase extends new (...args: any[])
553
480
  declare build?: __.Key<__.Association.to<TransactionBuild>>
554
481
  declare build_id?: __.Key<string>
555
482
  declare inputIndex?: __.Key<number>
556
- declare txHash?: Blake2b256 | null
483
+ declare txHash?: _.Blake2b256 | null
557
484
  declare outputIndex?: number | null
558
- declare address?: Bech32 | null
559
- declare lovelace?: Lovelace | null
485
+ declare address?: _.Bech32 | null
486
+ declare lovelace?: _.Lovelace | null
560
487
  declare assets?: __.Composition.of.many<TransactionBuildInputAssets>
561
488
  declare hasAssets?: boolean | null
562
489
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -576,10 +503,10 @@ export function _TransactionBuildInputAssetAspect<TBase extends new (...args: an
576
503
  declare input?: __.Key<__.Association.to<TransactionBuildInput>>
577
504
  declare input_inputIndex?: __.Key<number>
578
505
  declare input_build_id?: __.Key<string>
579
- declare unit?: __.Key<AssetUnit>
580
- declare asset_quantity?: Lovelace | null
581
- declare asset_policyId?: Blake2b224 | null
582
- declare asset_assetNameHex?: string | null
506
+ declare unit?: __.Key<_.AssetUnit>
507
+ declare asset_quantity?: _.Lovelace | null
508
+ declare asset_policyId?: _.Blake2b224 | null
509
+ declare asset_assetNameHex?: _.HexBytes | null
583
510
  declare asset_assetName?: string | null
584
511
  declare asset_fingerprint?: string | null
585
512
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -599,8 +526,8 @@ export function _TransactionBuildOutputAspect<TBase extends new (...args: any[])
599
526
  declare build?: __.Key<__.Association.to<TransactionBuild>>
600
527
  declare build_id?: __.Key<string>
601
528
  declare outputIndex?: __.Key<number>
602
- declare address?: Bech32 | null
603
- declare lovelace?: Lovelace | null
529
+ declare address?: _.Bech32 | null
530
+ declare lovelace?: _.Lovelace | null
604
531
  declare isChange?: boolean | null
605
532
  declare assets?: __.Composition.of.many<TransactionBuildOutputAssets>
606
533
  declare hasAssets?: boolean | null
@@ -621,10 +548,10 @@ export function _TransactionBuildOutputAssetAspect<TBase extends new (...args: a
621
548
  declare output?: __.Key<__.Association.to<TransactionBuildOutput>>
622
549
  declare output_outputIndex?: __.Key<number>
623
550
  declare output_build_id?: __.Key<string>
624
- declare unit?: __.Key<AssetUnit>
625
- declare asset_quantity?: Lovelace | null
626
- declare asset_policyId?: Blake2b224 | null
627
- declare asset_assetNameHex?: string | null
551
+ declare unit?: __.Key<_.AssetUnit>
552
+ declare asset_quantity?: _.Lovelace | null
553
+ declare asset_policyId?: _.Blake2b224 | null
554
+ declare asset_assetNameHex?: _.HexBytes | null
628
555
  declare asset_assetName?: string | null
629
556
  declare asset_fingerprint?: string | null
630
557
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -645,9 +572,9 @@ export function _TransactionSubmissionAspect<TBase extends new (...args: any[])
645
572
  declare build?: __.Association.to<TransactionBuild> | null
646
573
  declare build_id?: string | null
647
574
  declare signedTxCbor?: string | null
648
- declare txHash?: Blake2b256 | null
575
+ declare txHash?: _.Blake2b256 | null
649
576
  declare submittedAt?: number | null
650
- declare status?: SubmissionStatus | null
577
+ declare status?: _.SubmissionStatus | null
651
578
  declare errorCode?: string | null
652
579
  declare errorMessage?: string | null
653
580
  declare retryCount?: number | null
@@ -691,9 +618,9 @@ Object.defineProperty(TransactionSubmissionErrors, 'name', { value: 'odatano.car
691
618
  export function _AddressTransactionAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
692
619
  return class AddressTransaction extends Base {
693
620
  declare address?: __.Key<__.Association.to<Address>>
694
- declare address_address?: __.Key<Bech32>
621
+ declare address_address?: __.Key<_.Bech32>
695
622
  declare tx?: __.Key<__.Association.to<Transaction>>
696
- declare tx_hash?: __.Key<Blake2b256>
623
+ declare tx_hash?: __.Key<_.Blake2b256>
697
624
  declare netAmount?: number | null
698
625
  declare blockTime?: number | null
699
626
  declare netAssets?: string | null
@@ -713,7 +640,7 @@ Object.defineProperty(AddressTransactions, 'name', { value: 'odatano.cardano.Add
713
640
  export function _AddressSigningRequestAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
714
641
  return class AddressSigningRequest extends Base {
715
642
  declare address?: __.Key<__.Association.to<Address>>
716
- declare address_address?: __.Key<Bech32>
643
+ declare address_address?: __.Key<_.Bech32>
717
644
  declare signingRequest?: __.Key<__.Association.to<SigningRequest>>
718
645
  declare signingRequest_id?: __.Key<string>
719
646
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -731,7 +658,7 @@ Object.defineProperty(AddressSigningRequests, 'name', { value: 'odatano.cardano.
731
658
  export function _AddressTransactionBuildAspect<TBase extends new (...args: any[]) => object>(Base: TBase) {
732
659
  return class AddressTransactionBuild extends Base {
733
660
  declare address?: __.Key<__.Association.to<Address>>
734
- declare address_address?: __.Key<Bech32>
661
+ declare address_address?: __.Key<_.Bech32>
735
662
  declare txBuild?: __.Key<__.Association.to<TransactionBuild>>
736
663
  declare txBuild_id?: __.Key<string>
737
664
  static readonly kind: 'entity' | 'type' | 'aspect' = 'entity';
@@ -751,10 +678,10 @@ export function _SigningRequestAspect<TBase extends new (...args: any[]) => obje
751
678
  declare id?: __.Key<string>
752
679
  declare build?: __.Association.to<TransactionBuild> | null
753
680
  declare build_id?: string | null
754
- declare txBodyHash?: Blake2b256 | null
681
+ declare txBodyHash?: _.Blake2b256 | null
755
682
  declare unsignedTxCbor?: string | null
756
683
  declare network?: string | null
757
- declare status?: SigningStatus | null
684
+ declare status?: _.SigningStatus | null
758
685
  declare createdAt?: __.CdsTimestamp | null
759
686
  declare expiresAt?: __.CdsTimestamp | null
760
687
  declare signedAt?: __.CdsTimestamp | null
@@ -763,6 +690,7 @@ export function _SigningRequestAspect<TBase extends new (...args: any[]) => obje
763
690
  declare cip30TxCbor?: string | null
764
691
  declare signerType?: string | null
765
692
  declare signerInfo?: string | null
693
+ declare hsmKeyId?: string | null
766
694
  declare verifications?: __.Composition.of.many<SignatureVerifications>
767
695
  declare submission?: __.Association.to<TransactionSubmission> | null
768
696
  declare submission_id?: string | null
@@ -786,7 +714,7 @@ export function _SignatureVerificationAspect<TBase extends new (...args: any[])
786
714
  declare signingRequest_id?: string | null
787
715
  declare signedTxCbor?: string | null
788
716
  declare isValid?: boolean | null
789
- declare txBodyHash?: Blake2b256 | null
717
+ declare txBodyHash?: _.Blake2b256 | null
790
718
  declare witnessCount?: number | null
791
719
  declare signerKeyHashes?: string | null
792
720
  declare errorMessage?: string | null
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # ODATANO
1
+ ![alt text](docs/assets/odatano_logo/logo_odatano_white.png)
2
2
 
3
- **OData Service for the Cardano Blockchain**
3
+ # Enterprise OData Services for the Cardano Blockchain
4
4
 
5
5
  **ODATANO** is an SAP CAP–based service that exposes the Cardano blockchain via a standardized **OData V4** interface, enabling seamless enterprise-grade read and write access.
6
6
  It provides unified REST/OData access to on-chain data while supporting native transaction building and submission directly from business applications.
@@ -46,7 +46,12 @@ A demonstration-mode video of the Wallet Viewer Fiori App illustrating audit, co
46
46
  - **Transaction Building**: Cardano Serialization Library (CSL) & Buildooor for minting, ADA or Token transfers, and metadata transactions
47
47
  - **Lazy On-Demand Indexing**: TTL-based refresh for changing blockchain data for performance optimization
48
48
  - **Enterprise-Grade Validation**: Strict input validation and error handling
49
- - **Comprehensive Testing**: 978 tests across 25 test suites, 96%+ statement coverage
49
+ - **HSM Signing**: Optional server-side transaction signing via PKCS#11 Hardware Security Modules (YubiHSM, AWS CloudHSM, Thales Luna)
50
+ - **Comprehensive Testing**: 1122 tests across 29 test suites, 99% statement coverage
51
+
52
+ ## Architecture Overview
53
+
54
+ ![alt text](<docs/assets/architecture & flow diagramms/odatano-ad.png>)
50
55
 
51
56
  ## Quick Start
52
57
 
@@ -77,8 +82,8 @@ Configure in your `package.json`:
77
82
 
78
83
  ```bash
79
84
  cds watch
80
- # → CardanoODataService + CardanoTransactionService auto-registered
81
- # → /odata/v4/cardano-odata/ and /odata/v4/cardano-transaction/ ready
85
+ # → CardanoODataService + CardanoTransactionService + CardanoSignService auto-registered
86
+ # → /odata/v4/cardano-odata/, /odata/v4/cardano-transaction/, /odata/v4/cardano-sign/ ready
82
87
  ```
83
88
 
84
89
  ### Docker (Standalone)
@@ -103,6 +108,45 @@ npm run cds:watch
103
108
 
104
109
  See [Quick Start Guide](docs/QUICK_START.md) for detailed setup instructions.
105
110
 
111
+ ### HSM Signing (Optional)
112
+
113
+ ODATANO supports server-side transaction signing via PKCS#11-compatible Hardware Security Modules (YubiHSM 2, AWS CloudHSM, Thales Luna, SoftHSM). Private keys never leave the HSM — only signatures are returned.
114
+
115
+ **Plugin mode** — add `hsm` to your `cds.requires.odatano-core` config:
116
+
117
+ ```json
118
+ {
119
+ "cds": {
120
+ "requires": {
121
+ "odatano-core": {
122
+ "network": "preview",
123
+ "backends": ["blockfrost"],
124
+ "blockfrostApiKey": "preview_YOUR_KEY",
125
+ "hsm": {
126
+ "enabled": true,
127
+ "pkcs11Module": "/usr/lib/libsofthsm2.so",
128
+ "pin": "1234",
129
+ "slot": 0,
130
+ "keyLabel": "cardano-signing-key"
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ ```
137
+
138
+ **Standalone mode** — use environment variables:
139
+
140
+ ```bash
141
+ HSM_ENABLED=true
142
+ HSM_PKCS11_MODULE=/usr/lib/libsofthsm2.so
143
+ HSM_PIN=1234
144
+ HSM_SLOT=0
145
+ HSM_KEY_LABEL=cardano-signing-key
146
+ ```
147
+
148
+ HSM is opt-in — if not configured, the signing service still works with external signing (CLI, browser wallets). If HSM initialization fails, the app continues without HSM (non-fatal). See [Security Guide](docs/guides/SECURITY_GUIDE.md) for details.
149
+
106
150
  ## Usage Examples
107
151
 
108
152
  **Read Operations (M1):**
@@ -130,15 +174,28 @@ curl -X POST http://localhost:4004/odata/v4/cardano-transaction/SubmitTransactio
130
174
  **External Signing Operations (M3):**
131
175
 
132
176
  ```bash
133
- # Build transaction with external signing (returns buildId and unsigned CBOR)
134
- curl -X POST http://localhost:4004/odata/v4/cardano-transaction/CreateSigningRequest \
177
+ # Create signing request (returns signing instructions and CLI commands)
178
+ curl -X POST http://localhost:4004/odata/v4/cardano-sign/CreateSigningRequest \
135
179
  -H "Content-Type: application/json" \
136
180
  -d '{"buildId":"uuid-from-build-response"}'
137
181
 
138
- # Submit externally signed transaction
139
- curl -X POST http://localhost:4004/odata/v4/cardano-transaction/SubmitVerifiedTransaction \
182
+ # Verify and submit externally signed transaction (bound action on SigningRequests)
183
+ curl -X POST "http://localhost:4004/odata/v4/cardano-sign/SigningRequests('signing-request-id')/CardanoSignService.SubmitVerifiedTransaction" \
140
184
  -H "Content-Type: application/json" \
141
- -d '{"buildId":"uuid-from-build-response","signedTxCbor":"84a400..."}'
185
+ -d '{"signedTxCbor":"84a400..."}'
186
+ ```
187
+
188
+ **HSM Signing Operations (M3):**
189
+
190
+ ```bash
191
+ # Check HSM connection status
192
+ curl -X POST http://localhost:4004/odata/v4/cardano-sign/GetHsmStatus \
193
+ -H "Content-Type: application/json" -d '{}'
194
+
195
+ # Sign and submit with HSM in one step (automated, no external signer needed)
196
+ curl -X POST http://localhost:4004/odata/v4/cardano-sign/SignAndSubmitWithHsm \
197
+ -H "Content-Type: application/json" \
198
+ -d '{"buildId":"uuid-from-build-response"}'
142
199
  ```
143
200
 
144
201
  See [User Guide](docs/guides/USER_GUIDE.md) for complete API reference.
@@ -146,7 +203,7 @@ See [User Guide](docs/guides/USER_GUIDE.md) for complete API reference.
146
203
  ## Testing
147
204
 
148
205
  ```bash
149
- npm test # Run all 978 tests
206
+ npm test # Run all 1122 tests
150
207
  npm run test:coverage # With coverage report
151
208
  npm run test:integration # Integration tests only
152
209
  npm run test:unit # Unit tests only
@@ -161,15 +218,17 @@ See [Test Documentation](test/README.md) for details.
161
218
  | [Quick Start](docs/QUICK_START.md) | Get running in 5 minutes |
162
219
  | [User Guide](docs/guides/USER_GUIDE.md) | API usage, entities, and examples |
163
220
  | [Developer Guide](docs/guides/DEVELOPER_GUIDE.md) | Architecture and development |
164
- | [Transaction Workflow](docs/guides/TRANSACTION_WORKFLOW.md) | Build → Sign → Submit flow (M2) |
221
+ | [Transaction Workflow](docs/guides/TRANSACTION_WORKFLOW.md) | Build → Sign → Submit flow (M2/M3) |
222
+ | [Security Guide](docs/guides/SECURITY_GUIDE.md) | Authentication, signing security, HSM |
165
223
  | [Docker Deployment](docs/guides/DOCKER_DEPLOYMENT.md) | Container deployment |
166
224
  | [Data Model](docs/concepts%20&%20architecture/MM_DATAMODEL.md) | Entity relationships |
167
225
  | [Error Handling](docs/concepts%20&%20architecture/ERROR_HANDLING.md) | Error codes and handling |
168
- | [Test Documentation](test/README.md) | Test suite overview (978 tests) |
226
+ | [Test Documentation](test/README.md) | Test suite overview (1122 tests) |
169
227
 
170
228
  **Postman Collections:**
171
229
  - [M1 - Read Operations](scripts/ODATANO%20M1%20-%20Full%20Service%20Catalog.postman_collection.json)
172
230
  - [M2 - Transaction Operations](scripts/ODATANO%20M2%20-%20Full%20Service%20Catalog.postman_collection.json)
231
+ - [M3 - Transaction Operations](scripts/ODATANO%20M3%20-%20Full%20Service%20Catalog.postman_collection.json)
173
232
 
174
233
  ## API Overview
175
234
 
@@ -179,17 +238,17 @@ See [Test Documentation](test/README.md) for details.
179
238
 
180
239
  **15 Actions:** GetNetworkInformation, GetBlockByHash, GetEpochByNumber, GetTransactionByHash, GetMetadataByTxHash, GetAddressByBech32, GetUTxOsByAddress, GetAssetsByAddress, GetPoolById, GetAccountByStakeAddress, GetDrepById, GetLatestTransactionsByAddress, GetLatestBlock, GetLatestEpoch, GetLedgerProtocolParameters
181
240
 
182
- ### Transaction Service (`/odata/v4/cardano-transaction`) - M2
241
+ ### Transaction Service (`/odata/v4/cardano-transaction`) - M2/M3
183
242
 
184
- **7 Entities:** TransactionBuilds, TransactionBuildInputs, TransactionBuildOutputs, TransactionBuildInputAssets, TransactionBuildOutputAssets, TransactionSubmissions, TransactionSubmissionErrors
243
+ **8 Entities:** TransactionBuilds, TransactionBuildInputs, TransactionBuildOutputs, TransactionBuildInputAssets, TransactionBuildOutputAssets, TransactionSubmissions, TransactionSubmissionErrors, AddressTransactionBuilds
185
244
 
186
- **8 Actions:** BuildSimpleAdaTransaction, BuildTransactionWithMetadata, BuildMultiAssetTransaction, BuildMintTransaction, SubmitTransaction, SubmitSignedTransaction, GetBuildDetails, CheckSubmissionStatus
245
+ **11 Actions:** BuildSimpleAdaTransaction, BuildTransactionWithMetadata, BuildMultiAssetTransaction, BuildMintTransaction, SubmitTransaction, SubmitSignedTransaction, GetBuildDetails, CheckSubmissionStatus, BuildPlutusSpendTransaction, SetCollateral, GetTransactionBuildsByAddress
187
246
 
188
- ### External Signing & Plutus Smart Contracts (`/odata/v4/cardano-transaction`) - M3
247
+ ### Signing Service (`/odata/v4/cardano-sign`) - M3
189
248
 
190
- **4 Entities:** SigningRequests, SignatureVerifications, AddressTransactionBuilds, AddressSigningRequests
249
+ **5 Entities:** SigningRequests, SignatureVerifications, AddressSigningRequests, TransactionBuilds, TransactionSubmissions
191
250
 
192
- **8 Actions:** CreateSigningRequest, GetSigningRequest, VerifySignature, SubmitVerifiedTransaction, GetSigningRequestsByAddress, GetTransactionBuildsByAddress, BuildPlutusSpendTransaction, SetCollateral
251
+ **8 Actions:** CreateSigningRequest, GetSigningRequest, GetSigningRequestsByAddress, VerifySignature, SubmitVerifiedTransaction, SignWithHsm, SignAndSubmitWithHsm, GetHsmStatus
193
252
 
194
253
  See [User Guide](docs/guides/USER_GUIDE.md) for complete API reference with parameters.
195
254