digirails 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -0
  3. package/dist/agent.d.ts +72 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +176 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/config.d.ts +24 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +46 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/crypto/base58.d.ts +9 -0
  12. package/dist/crypto/base58.d.ts.map +1 -0
  13. package/dist/crypto/base58.js +107 -0
  14. package/dist/crypto/base58.js.map +1 -0
  15. package/dist/crypto/bech32.d.ts +9 -0
  16. package/dist/crypto/bech32.d.ts.map +1 -0
  17. package/dist/crypto/bech32.js +141 -0
  18. package/dist/crypto/bech32.js.map +1 -0
  19. package/dist/crypto/index.d.ts +6 -0
  20. package/dist/crypto/index.d.ts.map +1 -0
  21. package/dist/crypto/index.js +22 -0
  22. package/dist/crypto/index.js.map +1 -0
  23. package/dist/crypto/keys.d.ts +25 -0
  24. package/dist/crypto/keys.d.ts.map +1 -0
  25. package/dist/crypto/keys.js +129 -0
  26. package/dist/crypto/keys.js.map +1 -0
  27. package/dist/crypto/script.d.ts +12 -0
  28. package/dist/crypto/script.d.ts.map +1 -0
  29. package/dist/crypto/script.js +105 -0
  30. package/dist/crypto/script.js.map +1 -0
  31. package/dist/crypto/transaction.d.ts +47 -0
  32. package/dist/crypto/transaction.d.ts.map +1 -0
  33. package/dist/crypto/transaction.js +227 -0
  34. package/dist/crypto/transaction.js.map +1 -0
  35. package/dist/discovery/index.d.ts +2 -0
  36. package/dist/discovery/index.d.ts.map +1 -0
  37. package/dist/discovery/index.js +6 -0
  38. package/dist/discovery/index.js.map +1 -0
  39. package/dist/discovery/manifest_client.d.ts +9 -0
  40. package/dist/discovery/manifest_client.d.ts.map +1 -0
  41. package/dist/discovery/manifest_client.js +29 -0
  42. package/dist/discovery/manifest_client.js.map +1 -0
  43. package/dist/exceptions.d.ts +32 -0
  44. package/dist/exceptions.d.ts.map +1 -0
  45. package/dist/exceptions.js +72 -0
  46. package/dist/exceptions.js.map +1 -0
  47. package/dist/index.d.ts +31 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +135 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/models/enums.d.ts +48 -0
  52. package/dist/models/enums.d.ts.map +1 -0
  53. package/dist/models/enums.js +84 -0
  54. package/dist/models/enums.js.map +1 -0
  55. package/dist/models/index.d.ts +4 -0
  56. package/dist/models/index.d.ts.map +1 -0
  57. package/dist/models/index.js +20 -0
  58. package/dist/models/index.js.map +1 -0
  59. package/dist/models/manifest.d.ts +327 -0
  60. package/dist/models/manifest.d.ts.map +1 -0
  61. package/dist/models/manifest.js +47 -0
  62. package/dist/models/manifest.js.map +1 -0
  63. package/dist/models/messages.d.ts +336 -0
  64. package/dist/models/messages.d.ts.map +1 -0
  65. package/dist/models/messages.js +166 -0
  66. package/dist/models/messages.js.map +1 -0
  67. package/dist/network/constants.d.ts +51 -0
  68. package/dist/network/constants.d.ts.map +1 -0
  69. package/dist/network/constants.js +63 -0
  70. package/dist/network/constants.js.map +1 -0
  71. package/dist/network/index.d.ts +3 -0
  72. package/dist/network/index.d.ts.map +1 -0
  73. package/dist/network/index.js +19 -0
  74. package/dist/network/index.js.map +1 -0
  75. package/dist/network/params.d.ts +21 -0
  76. package/dist/network/params.d.ts.map +1 -0
  77. package/dist/network/params.js +57 -0
  78. package/dist/network/params.js.map +1 -0
  79. package/dist/opreturn.d.ts +25 -0
  80. package/dist/opreturn.d.ts.map +1 -0
  81. package/dist/opreturn.js +118 -0
  82. package/dist/opreturn.js.map +1 -0
  83. package/dist/payment/buyer.d.ts +29 -0
  84. package/dist/payment/buyer.d.ts.map +1 -0
  85. package/dist/payment/buyer.js +118 -0
  86. package/dist/payment/buyer.js.map +1 -0
  87. package/dist/payment/flow.d.ts +20 -0
  88. package/dist/payment/flow.d.ts.map +1 -0
  89. package/dist/payment/flow.js +29 -0
  90. package/dist/payment/flow.js.map +1 -0
  91. package/dist/payment/index.d.ts +5 -0
  92. package/dist/payment/index.d.ts.map +1 -0
  93. package/dist/payment/index.js +13 -0
  94. package/dist/payment/index.js.map +1 -0
  95. package/dist/payment/seller.d.ts +27 -0
  96. package/dist/payment/seller.d.ts.map +1 -0
  97. package/dist/payment/seller.js +193 -0
  98. package/dist/payment/seller.js.map +1 -0
  99. package/dist/payment/verification.d.ts +8 -0
  100. package/dist/payment/verification.d.ts.map +1 -0
  101. package/dist/payment/verification.js +89 -0
  102. package/dist/payment/verification.js.map +1 -0
  103. package/dist/rpc/client.d.ts +21 -0
  104. package/dist/rpc/client.d.ts.map +1 -0
  105. package/dist/rpc/client.js +131 -0
  106. package/dist/rpc/client.js.map +1 -0
  107. package/dist/rpc/index.d.ts +2 -0
  108. package/dist/rpc/index.d.ts.map +1 -0
  109. package/dist/rpc/index.js +6 -0
  110. package/dist/rpc/index.js.map +1 -0
  111. package/dist/server.d.ts +24 -0
  112. package/dist/server.d.ts.map +1 -0
  113. package/dist/server.js +104 -0
  114. package/dist/server.js.map +1 -0
  115. package/dist/version.d.ts +2 -0
  116. package/dist/version.d.ts.map +1 -0
  117. package/dist/version.js +5 -0
  118. package/dist/version.js.map +1 -0
  119. package/dist/wallet/index.d.ts +4 -0
  120. package/dist/wallet/index.d.ts.map +1 -0
  121. package/dist/wallet/index.js +14 -0
  122. package/dist/wallet/index.js.map +1 -0
  123. package/dist/wallet/keystore.d.ts +32 -0
  124. package/dist/wallet/keystore.d.ts.map +1 -0
  125. package/dist/wallet/keystore.js +111 -0
  126. package/dist/wallet/keystore.js.map +1 -0
  127. package/dist/wallet/utxo.d.ts +32 -0
  128. package/dist/wallet/utxo.d.ts.map +1 -0
  129. package/dist/wallet/utxo.js +88 -0
  130. package/dist/wallet/utxo.js.map +1 -0
  131. package/dist/wallet/wallet.d.ts +52 -0
  132. package/dist/wallet/wallet.d.ts.map +1 -0
  133. package/dist/wallet/wallet.js +249 -0
  134. package/dist/wallet/wallet.js.map +1 -0
  135. package/package.json +43 -0
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SellerFlow = void 0;
4
+ const utxo_1 = require("../wallet/utxo");
5
+ const enums_1 = require("../models/enums");
6
+ const messages_1 = require("../models/messages");
7
+ const verification_1 = require("./verification");
8
+ const opreturn_1 = require("../opreturn");
9
+ const constants_1 = require("../network/constants");
10
+ const params_1 = require("../network/params");
11
+ const REFUND_FEE_SAT = 50000n;
12
+ class SellerFlow {
13
+ wallet;
14
+ rpc;
15
+ network;
16
+ autoRefund;
17
+ services = new Map();
18
+ pendingInvoices = new Map();
19
+ constructor(wallet, network = params_1.MAINNET, rpc, autoRefund = true) {
20
+ this.wallet = wallet;
21
+ this.rpc = rpc ?? null;
22
+ this.network = network;
23
+ this.autoRefund = autoRefund;
24
+ }
25
+ /** Register a service with its handler */
26
+ registerService(service, handler) {
27
+ this.services.set(service.id, { service, handler });
28
+ }
29
+ /** Handle a SERVICE_REQUEST → return PAYMENT_INVOICE or ErrorResponse */
30
+ handleRequest(data) {
31
+ let request;
32
+ try {
33
+ request = messages_1.PaymentRequestSchema.parse(data);
34
+ }
35
+ catch {
36
+ return (0, messages_1.createErrorResponse)({
37
+ code: enums_1.ErrorCode.INVALID_REQUEST,
38
+ message: 'Invalid payment request format',
39
+ });
40
+ }
41
+ const registered = this.services.get(request.service.id);
42
+ if (!registered) {
43
+ return (0, messages_1.createErrorResponse)({
44
+ requestId: request.id,
45
+ code: enums_1.ErrorCode.UNKNOWN_SERVICE,
46
+ message: `Unknown service: ${request.service.id}`,
47
+ });
48
+ }
49
+ const { service, handler } = registered;
50
+ // Create invoice
51
+ const invoice = (0, messages_1.createPaymentInvoice)({
52
+ requestId: request.id,
53
+ paymentAddress: this.wallet.address,
54
+ amount: service.pricing.amount,
55
+ confirmationTier: request.payment.confirmation_tier,
56
+ expiresInSeconds: service.payment.max_invoice_age_seconds,
57
+ memo: `${service.id}`,
58
+ });
59
+ // Store pending invoice
60
+ this.pendingInvoices.set(invoice.id, {
61
+ invoice,
62
+ service,
63
+ request,
64
+ handler,
65
+ });
66
+ return invoice;
67
+ }
68
+ /** Handle a PAYMENT_BROADCAST → verify payment → execute handler → return ServiceDelivery or ErrorResponse */
69
+ async handleBroadcast(data) {
70
+ let broadcast;
71
+ try {
72
+ broadcast = messages_1.PaymentBroadcastSchema.parse(data);
73
+ }
74
+ catch {
75
+ return (0, messages_1.createErrorResponse)({
76
+ code: enums_1.ErrorCode.INVALID_REQUEST,
77
+ message: 'Invalid payment broadcast format',
78
+ });
79
+ }
80
+ const pending = this.pendingInvoices.get(broadcast.invoice_id);
81
+ if (!pending) {
82
+ return (0, messages_1.createErrorResponse)({
83
+ code: enums_1.ErrorCode.PAYMENT_NOT_FOUND,
84
+ message: `Unknown invoice: ${broadcast.invoice_id}`,
85
+ retry: true,
86
+ });
87
+ }
88
+ // Check invoice expiry
89
+ const now = Math.floor(Date.now() / 1000);
90
+ if (pending.invoice.payment.expires_at <= now) {
91
+ this.pendingInvoices.delete(broadcast.invoice_id);
92
+ return (0, messages_1.createErrorResponse)({
93
+ code: enums_1.ErrorCode.INVOICE_EXPIRED,
94
+ message: 'Invoice has expired',
95
+ retry: true,
96
+ });
97
+ }
98
+ const expectedAmountSat = (0, utxo_1.dgbToSat)(pending.invoice.payment.amount);
99
+ // Verify payment
100
+ const tier = pending.invoice.terms.confirmation_tier;
101
+ if (tier === 'mempool' && broadcast.raw_tx) {
102
+ // Mempool verification — parse raw TX locally
103
+ const vout = (0, verification_1.verifyRawTxSimple)(broadcast.raw_tx, pending.invoice.payment.address, expectedAmountSat, this.network);
104
+ if (vout < 0) {
105
+ return (0, messages_1.createErrorResponse)({
106
+ code: enums_1.ErrorCode.PAYMENT_MISMATCH,
107
+ message: 'Raw TX does not contain matching payment output',
108
+ });
109
+ }
110
+ }
111
+ else if (this.rpc) {
112
+ // RPC verification — query the node
113
+ try {
114
+ const txData = (await this.rpc.getRawTransaction(broadcast.txid, true));
115
+ const vouts = txData['vout'];
116
+ const voutData = vouts[broadcast.vout];
117
+ if (!voutData) {
118
+ return (0, messages_1.createErrorResponse)({
119
+ code: enums_1.ErrorCode.PAYMENT_MISMATCH,
120
+ message: `Vout ${broadcast.vout} does not exist in transaction`,
121
+ });
122
+ }
123
+ const valueDgb = voutData['value'];
124
+ const valueSat = BigInt(Math.round(valueDgb * 1e8));
125
+ if (valueSat < expectedAmountSat) {
126
+ return (0, messages_1.createErrorResponse)({
127
+ code: enums_1.ErrorCode.INSUFFICIENT_PAYMENT,
128
+ message: `Payment ${valueSat} sat < required ${expectedAmountSat} sat`,
129
+ retry: true,
130
+ });
131
+ }
132
+ }
133
+ catch {
134
+ return (0, messages_1.createErrorResponse)({
135
+ code: enums_1.ErrorCode.PAYMENT_NOT_FOUND,
136
+ message: 'Transaction not found in mempool or blockchain',
137
+ retry: true,
138
+ });
139
+ }
140
+ }
141
+ // Payment verified — execute service handler
142
+ try {
143
+ const result = await pending.handler(pending.request.service.params);
144
+ this.pendingInvoices.delete(broadcast.invoice_id);
145
+ return (0, messages_1.createServiceDelivery)({
146
+ invoiceId: broadcast.invoice_id,
147
+ status: 'complete',
148
+ result,
149
+ });
150
+ }
151
+ catch (err) {
152
+ this.pendingInvoices.delete(broadcast.invoice_id);
153
+ const refund = await this.attemptRefund(pending);
154
+ return (0, messages_1.createErrorResponse)({
155
+ code: enums_1.ErrorCode.SERVICE_UNAVAILABLE,
156
+ message: `Service execution failed: ${err.message}`,
157
+ retry: true,
158
+ refund: refund ?? undefined,
159
+ });
160
+ }
161
+ }
162
+ async attemptRefund(pending) {
163
+ if (!this.autoRefund || !this.rpc) {
164
+ return null;
165
+ }
166
+ const paymentSat = (0, utxo_1.dgbToSat)(pending.invoice.payment.amount);
167
+ if (paymentSat <= constants_1.DUST_THRESHOLD) {
168
+ return null;
169
+ }
170
+ const buyerAddress = pending.request.from.address;
171
+ try {
172
+ const idRaw = new TextEncoder().encode(pending.invoice.id);
173
+ const invoiceIdBytes = new Uint8Array(16);
174
+ invoiceIdBytes.set(idRaw.slice(0, 16));
175
+ const opReturnData = (0, opreturn_1.encodeRefundMemo)(invoiceIdBytes);
176
+ await this.wallet.syncUtxos();
177
+ const tx = await this.wallet.buildPayment({
178
+ toAddress: buyerAddress,
179
+ amountSat: paymentSat,
180
+ feeSat: REFUND_FEE_SAT,
181
+ opReturnData,
182
+ });
183
+ const txid = await this.wallet.broadcast(tx);
184
+ const refundDgb = (0, utxo_1.satToDgb)(paymentSat);
185
+ return { txid, amount: refundDgb };
186
+ }
187
+ catch {
188
+ return null;
189
+ }
190
+ }
191
+ }
192
+ exports.SellerFlow = SellerFlow;
193
+ //# sourceMappingURL=seller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller.js","sourceRoot":"","sources":["../../src/payment/seller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { NetworkParams } from '../network/params';
2
+ /**
3
+ * Verify a raw transaction (mempool tier — no RPC needed).
4
+ * Parses the raw TX hex, finds an output matching the expected address and amount.
5
+ * Returns the matching vout index, or -1 if not found.
6
+ */
7
+ export declare function verifyRawTxSimple(rawTxHex: string, expectedAddress: string, expectedAmountSat: bigint, network?: NetworkParams): number;
8
+ //# sourceMappingURL=verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/payment/verification.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAW,MAAM,mBAAmB,CAAC;AA2B3D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,aAAuB,GAC/B,MAAM,CAyDR"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verifyRawTxSimple = verifyRawTxSimple;
4
+ /**
5
+ * Payment verification utilities.
6
+ * Verifies that a raw transaction pays the expected address and amount.
7
+ */
8
+ const script_1 = require("../crypto/script");
9
+ const params_1 = require("../network/params");
10
+ /** Parse a Bitcoin varint from raw bytes, returning [value, bytesConsumed] */
11
+ function parseVarint(data, offset) {
12
+ const first = data[offset];
13
+ if (first < 0xfd) {
14
+ return [first, 1];
15
+ }
16
+ else if (first === 0xfd) {
17
+ const val = data[offset + 1] | (data[offset + 2] << 8);
18
+ return [val, 3];
19
+ }
20
+ else if (first === 0xfe) {
21
+ const val = data[offset + 1] |
22
+ (data[offset + 2] << 8) |
23
+ (data[offset + 3] << 16) |
24
+ (data[offset + 4] << 24);
25
+ return [val >>> 0, 5]; // unsigned
26
+ }
27
+ else {
28
+ // 0xff — 8 bytes, but we limit to safe integer range
29
+ let val = 0n;
30
+ for (let i = 0; i < 8; i++) {
31
+ val |= BigInt(data[offset + 1 + i]) << BigInt(i * 8);
32
+ }
33
+ return [Number(val), 9];
34
+ }
35
+ }
36
+ /**
37
+ * Verify a raw transaction (mempool tier — no RPC needed).
38
+ * Parses the raw TX hex, finds an output matching the expected address and amount.
39
+ * Returns the matching vout index, or -1 if not found.
40
+ */
41
+ function verifyRawTxSimple(rawTxHex, expectedAddress, expectedAmountSat, network = params_1.MAINNET) {
42
+ const raw = Buffer.from(rawTxHex, 'hex');
43
+ let offset = 0;
44
+ // Version (4 bytes)
45
+ offset += 4;
46
+ // Check for SegWit marker
47
+ let hasWitness = false;
48
+ if (raw[offset] === 0x00 && raw[offset + 1] === 0x01) {
49
+ hasWitness = true;
50
+ offset += 2;
51
+ }
52
+ // Input count
53
+ const [inputCount, inputCountLen] = parseVarint(raw, offset);
54
+ offset += inputCountLen;
55
+ // Skip inputs
56
+ for (let i = 0; i < inputCount; i++) {
57
+ offset += 32; // prevout hash
58
+ offset += 4; // prevout index
59
+ const [scriptLen, scriptLenSize] = parseVarint(raw, offset);
60
+ offset += scriptLenSize;
61
+ offset += scriptLen; // scriptSig
62
+ offset += 4; // sequence
63
+ }
64
+ // Output count
65
+ const [outputCount, outputCountLen] = parseVarint(raw, offset);
66
+ offset += outputCountLen;
67
+ // Expected scriptPubKey
68
+ const expectedScript = (0, script_1.addressToScriptPubkey)(expectedAddress, network);
69
+ // Parse outputs
70
+ for (let vout = 0; vout < outputCount; vout++) {
71
+ // Value (8 bytes LE)
72
+ let value = 0n;
73
+ for (let i = 0; i < 8; i++) {
74
+ value |= BigInt(raw[offset + i]) << BigInt(i * 8);
75
+ }
76
+ offset += 8;
77
+ // scriptPubKey
78
+ const [scriptLen, scriptLenSize] = parseVarint(raw, offset);
79
+ offset += scriptLenSize;
80
+ const scriptPubkey = raw.slice(offset, offset + scriptLen);
81
+ offset += scriptLen;
82
+ // Check match
83
+ if (value >= expectedAmountSat && Buffer.compare(scriptPubkey, expectedScript) === 0) {
84
+ return vout;
85
+ }
86
+ }
87
+ return -1;
88
+ }
89
+ //# sourceMappingURL=verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/payment/verification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare class RpcClient {
2
+ private url;
3
+ private username?;
4
+ private password?;
5
+ private nextId;
6
+ constructor(url: string, username?: string, password?: string);
7
+ private call;
8
+ getBlockCount(): Promise<number>;
9
+ getBlockHash(height: number): Promise<string>;
10
+ getBlock(hashOrHeight: string | number, verbosity?: number): Promise<unknown>;
11
+ getBlockchainInfo(): Promise<Record<string, unknown>>;
12
+ getRawTransaction(txid: string, verbose?: boolean): Promise<unknown>;
13
+ getTxOut(txid: string, vout: number, includeMempool?: boolean): Promise<unknown>;
14
+ sendRawTransaction(hexstring: string): Promise<string>;
15
+ getRawMempool(): Promise<string[]>;
16
+ getMempoolEntry(txid: string): Promise<unknown>;
17
+ generateToAddress(nblocks: number, address: string): Promise<string[]>;
18
+ listUnspent(minConf?: number, maxConf?: number, addresses?: string[]): Promise<Array<Record<string, unknown>>>;
19
+ importAddress(address: string, label?: string, rescan?: boolean): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/rpc/client.ts"],"names":[],"mappings":"AAsBA,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAK;gBAEP,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;YAgB/C,IAAI;IA4DZ,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAQxE,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMrD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7E,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMtD,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIlC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/C,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAItE,WAAW,CACf,OAAO,SAAI,EACX,OAAO,SAAU,EACjB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAMpC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhF"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RpcClient = void 0;
4
+ /**
5
+ * Async JSON-RPC 2.0 client for DigiByte Core.
6
+ * Works against both public RPC (light mode) and local node (full mode).
7
+ */
8
+ const exceptions_1 = require("../exceptions");
9
+ class RpcClient {
10
+ url;
11
+ username;
12
+ password;
13
+ nextId = 1;
14
+ constructor(url, username, password) {
15
+ // Support URL-embedded credentials (http://user:pass@host:port)
16
+ const parsed = new URL(url);
17
+ if (parsed.username && parsed.password && !username) {
18
+ this.username = decodeURIComponent(parsed.username);
19
+ this.password = decodeURIComponent(parsed.password);
20
+ parsed.username = '';
21
+ parsed.password = '';
22
+ this.url = parsed.toString().replace(/\/$/, '');
23
+ }
24
+ else {
25
+ this.url = url;
26
+ this.username = username;
27
+ this.password = password;
28
+ }
29
+ }
30
+ async call(method, params = []) {
31
+ const body = {
32
+ jsonrpc: '2.0',
33
+ id: this.nextId++,
34
+ method,
35
+ params,
36
+ };
37
+ const headers = {
38
+ 'Content-Type': 'application/json',
39
+ };
40
+ if (this.username && this.password) {
41
+ const auth = Buffer.from(`${this.username}:${this.password}`).toString('base64');
42
+ headers['Authorization'] = `Basic ${auth}`;
43
+ }
44
+ let response;
45
+ try {
46
+ response = await fetch(this.url, {
47
+ method: 'POST',
48
+ headers,
49
+ body: JSON.stringify(body),
50
+ });
51
+ }
52
+ catch (err) {
53
+ throw new exceptions_1.NetworkError(`RPC connection failed: ${err.message}`);
54
+ }
55
+ if (!response.ok && response.status !== 200) {
56
+ // Some RPC errors come with 500 status but valid JSON-RPC error bodies
57
+ let text;
58
+ try {
59
+ text = await response.text();
60
+ }
61
+ catch {
62
+ text = '';
63
+ }
64
+ // Try to parse as JSON-RPC error
65
+ try {
66
+ const parsed = JSON.parse(text);
67
+ if (parsed.error) {
68
+ throw new exceptions_1.RpcError(parsed.error.code, parsed.error.message);
69
+ }
70
+ }
71
+ catch (e) {
72
+ if (e instanceof exceptions_1.RpcError)
73
+ throw e;
74
+ }
75
+ throw new exceptions_1.NetworkError(`RPC HTTP error ${response.status}: ${text}`);
76
+ }
77
+ const data = (await response.json());
78
+ if (data.error) {
79
+ throw new exceptions_1.RpcError(data.error.code, data.error.message);
80
+ }
81
+ return data.result;
82
+ }
83
+ // ---------- Chain queries ----------
84
+ async getBlockCount() {
85
+ return (await this.call('getblockcount'));
86
+ }
87
+ async getBlockHash(height) {
88
+ return (await this.call('getblockhash', [height]));
89
+ }
90
+ async getBlock(hashOrHeight, verbosity = 1) {
91
+ const hash = typeof hashOrHeight === 'number'
92
+ ? await this.getBlockHash(hashOrHeight)
93
+ : hashOrHeight;
94
+ return this.call('getblock', [hash, verbosity]);
95
+ }
96
+ async getBlockchainInfo() {
97
+ return (await this.call('getblockchaininfo'));
98
+ }
99
+ // ---------- Transaction queries ----------
100
+ async getRawTransaction(txid, verbose = true) {
101
+ return this.call('getrawtransaction', [txid, verbose]);
102
+ }
103
+ async getTxOut(txid, vout, includeMempool = true) {
104
+ return this.call('gettxout', [txid, vout, includeMempool]);
105
+ }
106
+ async sendRawTransaction(hexstring) {
107
+ return (await this.call('sendrawtransaction', [hexstring]));
108
+ }
109
+ // ---------- Mempool ----------
110
+ async getRawMempool() {
111
+ return (await this.call('getrawmempool'));
112
+ }
113
+ async getMempoolEntry(txid) {
114
+ return this.call('getmempoolentry', [txid]);
115
+ }
116
+ // ---------- Regtest helpers ----------
117
+ async generateToAddress(nblocks, address) {
118
+ return (await this.call('generatetoaddress', [nblocks, address]));
119
+ }
120
+ async listUnspent(minConf = 0, maxConf = 9999999, addresses) {
121
+ const params = [minConf, maxConf];
122
+ if (addresses)
123
+ params.push(addresses);
124
+ return (await this.call('listunspent', params));
125
+ }
126
+ async importAddress(address, label = '', rescan = false) {
127
+ await this.call('importaddress', [address, label, rescan]);
128
+ }
129
+ }
130
+ exports.RpcClient = RpcClient;
131
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/rpc/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { RpcClient } from './client';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RpcClient = void 0;
4
+ var client_1 = require("./client");
5
+ Object.defineProperty(exports, "RpcClient", { enumerable: true, get: function () { return client_1.RpcClient; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AAA5B,mGAAA,SAAS,OAAA"}
@@ -0,0 +1,24 @@
1
+ import { Manifest } from './models/manifest';
2
+ import { SellerFlow, ServiceHandler } from './payment/seller';
3
+ import { Service } from './models/manifest';
4
+ export declare class DigiRailsServer {
5
+ private server;
6
+ private sellerFlow;
7
+ private manifest;
8
+ private host;
9
+ private port;
10
+ constructor(params: {
11
+ sellerFlow: SellerFlow;
12
+ manifest: Manifest;
13
+ host?: string;
14
+ port?: number;
15
+ });
16
+ /** Register a service on the seller flow */
17
+ registerService(service: Service, handler: ServiceHandler): void;
18
+ /** Start the HTTP server */
19
+ start(): Promise<void>;
20
+ /** Stop the HTTP server */
21
+ stop(): Promise<void>;
22
+ private handleRequest;
23
+ }
24
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;gBAET,MAAM,EAAE;QAClB,UAAU,EAAE,UAAU,CAAC;QACvB,QAAQ,EAAE,QAAQ,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAOD,4CAA4C;IAC5C,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAIhE,4BAA4B;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B,2BAA2B;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAUb,aAAa;CA8C5B"}
package/dist/server.js ADDED
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DigiRailsServer = void 0;
4
+ /**
5
+ * DigiRails HTTP seller server (Node.js native http).
6
+ * Serves manifest and handles payment flow endpoints.
7
+ */
8
+ const http_1 = require("http");
9
+ class DigiRailsServer {
10
+ server = null;
11
+ sellerFlow;
12
+ manifest;
13
+ host;
14
+ port;
15
+ constructor(params) {
16
+ this.sellerFlow = params.sellerFlow;
17
+ this.manifest = params.manifest;
18
+ this.host = params.host ?? '0.0.0.0';
19
+ this.port = params.port ?? 8080;
20
+ }
21
+ /** Register a service on the seller flow */
22
+ registerService(service, handler) {
23
+ this.sellerFlow.registerService(service, handler);
24
+ }
25
+ /** Start the HTTP server */
26
+ async start() {
27
+ return new Promise((resolve, reject) => {
28
+ this.server = (0, http_1.createServer)(async (req, res) => {
29
+ try {
30
+ await this.handleRequest(req, res);
31
+ }
32
+ catch (err) {
33
+ res.writeHead(500, { 'Content-Type': 'application/json' });
34
+ res.end(JSON.stringify({ error: 'Internal server error' }));
35
+ }
36
+ });
37
+ this.server.listen(this.port, this.host, () => {
38
+ resolve();
39
+ });
40
+ this.server.on('error', reject);
41
+ });
42
+ }
43
+ /** Stop the HTTP server */
44
+ async stop() {
45
+ return new Promise((resolve) => {
46
+ if (this.server) {
47
+ this.server.close(() => resolve());
48
+ }
49
+ else {
50
+ resolve();
51
+ }
52
+ });
53
+ }
54
+ async handleRequest(req, res) {
55
+ const url = req.url ?? '/';
56
+ const method = req.method ?? 'GET';
57
+ // CORS headers
58
+ res.setHeader('Access-Control-Allow-Origin', '*');
59
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
60
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
61
+ if (method === 'OPTIONS') {
62
+ res.writeHead(204);
63
+ res.end();
64
+ return;
65
+ }
66
+ // Manifest endpoint
67
+ if (url === '/.well-known/digirails.json' && method === 'GET') {
68
+ res.writeHead(200, { 'Content-Type': 'application/json' });
69
+ res.end(JSON.stringify(this.manifest));
70
+ return;
71
+ }
72
+ // Payment request endpoint
73
+ if (url === '/drpay/request' && method === 'POST') {
74
+ const body = await readBody(req);
75
+ const data = JSON.parse(body);
76
+ const result = this.sellerFlow.handleRequest(data);
77
+ res.writeHead(200, { 'Content-Type': 'application/json' });
78
+ res.end(JSON.stringify(result));
79
+ return;
80
+ }
81
+ // Payment broadcast endpoint
82
+ if (url === '/drpay/broadcast' && method === 'POST') {
83
+ const body = await readBody(req);
84
+ const data = JSON.parse(body);
85
+ const result = await this.sellerFlow.handleBroadcast(data);
86
+ res.writeHead(200, { 'Content-Type': 'application/json' });
87
+ res.end(JSON.stringify(result));
88
+ return;
89
+ }
90
+ // 404
91
+ res.writeHead(404, { 'Content-Type': 'application/json' });
92
+ res.end(JSON.stringify({ error: 'Not found' }));
93
+ }
94
+ }
95
+ exports.DigiRailsServer = DigiRailsServer;
96
+ function readBody(req) {
97
+ return new Promise((resolve, reject) => {
98
+ const chunks = [];
99
+ req.on('data', (chunk) => chunks.push(chunk));
100
+ req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
101
+ req.on('error', reject);
102
+ });
103
+ }
104
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION = "0.1.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}