@1sat/wallet-server 0.0.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.
Files changed (70) hide show
  1. package/README.md +50 -0
  2. package/dist/accounts/index.d.ts +8 -0
  3. package/dist/accounts/index.d.ts.map +1 -0
  4. package/dist/accounts/index.js +7 -0
  5. package/dist/accounts/index.js.map +1 -0
  6. package/dist/accounts/metering.d.ts +15 -0
  7. package/dist/accounts/metering.d.ts.map +1 -0
  8. package/dist/accounts/metering.js +32 -0
  9. package/dist/accounts/metering.js.map +1 -0
  10. package/dist/accounts/middleware.d.ts +41 -0
  11. package/dist/accounts/middleware.d.ts.map +1 -0
  12. package/dist/accounts/middleware.js +137 -0
  13. package/dist/accounts/middleware.js.map +1 -0
  14. package/dist/accounts/migrations.d.ts +18 -0
  15. package/dist/accounts/migrations.d.ts.map +1 -0
  16. package/dist/accounts/migrations.js +46 -0
  17. package/dist/accounts/migrations.js.map +1 -0
  18. package/dist/accounts/paymentValidation.d.ts +59 -0
  19. package/dist/accounts/paymentValidation.d.ts.map +1 -0
  20. package/dist/accounts/paymentValidation.js +112 -0
  21. package/dist/accounts/paymentValidation.js.map +1 -0
  22. package/dist/accounts/pricing.d.ts +30 -0
  23. package/dist/accounts/pricing.d.ts.map +1 -0
  24. package/dist/accounts/pricing.js +32 -0
  25. package/dist/accounts/pricing.js.map +1 -0
  26. package/dist/accounts/repo.d.ts +17 -0
  27. package/dist/accounts/repo.d.ts.map +1 -0
  28. package/dist/accounts/repo.js +94 -0
  29. package/dist/accounts/repo.js.map +1 -0
  30. package/dist/accounts/types.d.ts +45 -0
  31. package/dist/accounts/types.d.ts.map +1 -0
  32. package/dist/accounts/types.js +2 -0
  33. package/dist/accounts/types.js.map +1 -0
  34. package/dist/createBearerServer.d.ts +21 -0
  35. package/dist/createBearerServer.d.ts.map +1 -0
  36. package/dist/createBearerServer.js +30 -0
  37. package/dist/createBearerServer.js.map +1 -0
  38. package/dist/createWalletMonitor.d.ts +29 -0
  39. package/dist/createWalletMonitor.d.ts.map +1 -0
  40. package/dist/createWalletMonitor.js +90 -0
  41. package/dist/createWalletMonitor.js.map +1 -0
  42. package/dist/createWalletRpcHandler.d.ts +4 -0
  43. package/dist/createWalletRpcHandler.d.ts.map +1 -0
  44. package/dist/createWalletRpcHandler.js +92 -0
  45. package/dist/createWalletRpcHandler.js.map +1 -0
  46. package/dist/createWalletServer.d.ts +32 -0
  47. package/dist/createWalletServer.d.ts.map +1 -0
  48. package/dist/createWalletServer.js +183 -0
  49. package/dist/createWalletServer.js.map +1 -0
  50. package/dist/dispatch.d.ts +21 -0
  51. package/dist/dispatch.d.ts.map +1 -0
  52. package/dist/dispatch.js +183 -0
  53. package/dist/dispatch.js.map +1 -0
  54. package/dist/index.d.ts +15 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +8 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/resolvers/bearer.d.ts +12 -0
  59. package/dist/resolvers/bearer.d.ts.map +1 -0
  60. package/dist/resolvers/bearer.js +43 -0
  61. package/dist/resolvers/bearer.js.map +1 -0
  62. package/dist/resolvers/index.d.ts +3 -0
  63. package/dist/resolvers/index.d.ts.map +1 -0
  64. package/dist/resolvers/index.js +2 -0
  65. package/dist/resolvers/index.js.map +1 -0
  66. package/dist/types.d.ts +52 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +2 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +48 -0
@@ -0,0 +1,32 @@
1
+ const BYTES_PER_GB = 1_073_741_824; // 1024^3
2
+ export function computeCapacity(input) {
3
+ const capacityBytes = input.baselineBytes + input.paidBytes;
4
+ const deficitBytes = Math.max(0, input.usedBytes - capacityBytes);
5
+ return {
6
+ baselineBytes: input.baselineBytes,
7
+ paidBytes: input.paidBytes,
8
+ capacityBytes,
9
+ usedBytes: input.usedBytes,
10
+ deficitBytes,
11
+ };
12
+ }
13
+ /**
14
+ * Given a byte deficit and a `satsPerGb` rate, compute the sats required to
15
+ * cover the deficit (rounded up at GB granularity).
16
+ */
17
+ export function priceForDeficit(deficitBytes, satsPerGb) {
18
+ if (deficitBytes <= 0) {
19
+ return { satoshisRequired: 0, gigabytesCharged: 0, bytesCovered: 0 };
20
+ }
21
+ const gigabytesCharged = Math.ceil(deficitBytes / BYTES_PER_GB);
22
+ return {
23
+ satoshisRequired: gigabytesCharged * satsPerGb,
24
+ gigabytesCharged,
25
+ bytesCovered: gigabytesCharged * BYTES_PER_GB,
26
+ };
27
+ }
28
+ export function quoteForAccount(config, capacity) {
29
+ return priceForDeficit(capacity.deficitBytes, config.satsPerGb);
30
+ }
31
+ export { BYTES_PER_GB };
32
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/accounts/pricing.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,aAAa,CAAA,CAAC,SAAS;AAgB5C,MAAM,UAAU,eAAe,CAAC,KAAoB;IACnD,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAA;IAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC,CAAA;IACjE,OAAO;QACN,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa;QACb,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY;KACZ,CAAA;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC9B,YAAoB,EACpB,SAAiB;IAMjB,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAA;IACrE,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,CAAA;IAC/D,OAAO;QACN,gBAAgB,EAAE,gBAAgB,GAAG,SAAS;QAC9C,gBAAgB;QAChB,YAAY,EAAE,gBAAgB,GAAG,YAAY;KAC7C,CAAA;AACF,CAAC;AAED,MAAM,UAAU,eAAe,CAC9B,MAAsB,EACtB,QAAwB;IAKxB,OAAO,eAAe,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;AAChE,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Knex } from 'knex';
2
+ import type { Account, IdentityKey, NewPayment, Payment } from './types';
3
+ export declare class AccountsRepo {
4
+ private readonly knex;
5
+ constructor(knex: Knex);
6
+ upsertAccount(identityKey: IdentityKey): Promise<Account>;
7
+ getAccount(identityKey: IdentityKey): Promise<Account | undefined>;
8
+ /**
9
+ * Sum bytes_covered for all unexpired payments belonging to identityKey.
10
+ * A payment is unexpired when paid_through_block >= currentBlock.
11
+ */
12
+ sumUnexpiredBytes(identityKey: IdentityKey, currentBlock: number): Promise<number>;
13
+ recordPayment(input: NewPayment): Promise<Payment>;
14
+ paymentExists(txid: string): Promise<boolean>;
15
+ listPayments(identityKey: IdentityKey, limit?: number): Promise<Payment[]>;
16
+ }
17
+ //# sourceMappingURL=repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/accounts/repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAEhC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAkBxE,qBAAa,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI;IAEjC,aAAa,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBzD,UAAU,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAOxE;;;OAGG;IACG,iBAAiB,CACtB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IAYZ,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAclD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO7C,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAO5E"}
@@ -0,0 +1,94 @@
1
+ import { ACCOUNTS_TABLE, PAYMENTS_TABLE } from './migrations';
2
+ export class AccountsRepo {
3
+ knex;
4
+ constructor(knex) {
5
+ this.knex = knex;
6
+ }
7
+ async upsertAccount(identityKey) {
8
+ const now = new Date();
9
+ await this.knex(ACCOUNTS_TABLE)
10
+ .insert({
11
+ identity_key: identityKey,
12
+ created_at: now,
13
+ updated_at: now,
14
+ })
15
+ .onConflict('identity_key')
16
+ .ignore();
17
+ const row = await this.knex(ACCOUNTS_TABLE)
18
+ .where({ identity_key: identityKey })
19
+ .first();
20
+ if (!row)
21
+ throw new Error(`upsertAccount: no row after insert for ${identityKey}`);
22
+ return toAccount(row);
23
+ }
24
+ async getAccount(identityKey) {
25
+ const row = await this.knex(ACCOUNTS_TABLE)
26
+ .where({ identity_key: identityKey })
27
+ .first();
28
+ return row ? toAccount(row) : undefined;
29
+ }
30
+ /**
31
+ * Sum bytes_covered for all unexpired payments belonging to identityKey.
32
+ * A payment is unexpired when paid_through_block >= currentBlock.
33
+ */
34
+ async sumUnexpiredBytes(identityKey, currentBlock) {
35
+ const [row] = await this.knex(PAYMENTS_TABLE)
36
+ .where({ identity_key: identityKey })
37
+ .andWhere('paid_through_block', '>=', currentBlock)
38
+ .sum({ total: 'bytes_covered' });
39
+ const total = row?.total;
40
+ if (total == null)
41
+ return 0;
42
+ return typeof total === 'string'
43
+ ? Number.parseInt(total, 10)
44
+ : Number(total);
45
+ }
46
+ async recordPayment(input) {
47
+ const [row] = await this.knex(PAYMENTS_TABLE)
48
+ .insert({
49
+ identity_key: input.identityKey,
50
+ txid: input.txid,
51
+ bytes_covered: input.bytesCovered,
52
+ sats_paid: input.satsPaid,
53
+ paid_through_block: input.paidThroughBlock,
54
+ applied_at: new Date(),
55
+ })
56
+ .returning('*');
57
+ return toPayment(row);
58
+ }
59
+ async paymentExists(txid) {
60
+ const row = await this.knex(PAYMENTS_TABLE)
61
+ .where({ txid })
62
+ .first('id');
63
+ return !!row;
64
+ }
65
+ async listPayments(identityKey, limit = 50) {
66
+ const rows = await this.knex(PAYMENTS_TABLE)
67
+ .where({ identity_key: identityKey })
68
+ .orderBy('applied_at', 'desc')
69
+ .limit(limit);
70
+ return rows.map(toPayment);
71
+ }
72
+ }
73
+ function toAccount(row) {
74
+ return {
75
+ identityKey: row.identity_key,
76
+ createdAt: toDate(row.created_at),
77
+ updatedAt: toDate(row.updated_at),
78
+ };
79
+ }
80
+ function toPayment(row) {
81
+ return {
82
+ id: row.id,
83
+ identityKey: row.identity_key,
84
+ txid: row.txid,
85
+ bytesCovered: Number(row.bytes_covered),
86
+ satsPaid: Number(row.sats_paid),
87
+ paidThroughBlock: row.paid_through_block,
88
+ appliedAt: toDate(row.applied_at),
89
+ };
90
+ }
91
+ function toDate(v) {
92
+ return v instanceof Date ? v : new Date(v);
93
+ }
94
+ //# sourceMappingURL=repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/accounts/repo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAmB7D,MAAM,OAAO,YAAY;IACK;IAA7B,YAA6B,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAE3C,KAAK,CAAC,aAAa,CAAC,WAAwB;QAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;aAC7B,MAAM,CAAC;YACP,YAAY,EAAE,WAAW;YACzB,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;SACf,CAAC;aACD,UAAU,CAAC,cAAc,CAAC;aAC1B,MAAM,EAAE,CAAA;QAEV,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAa,cAAc,CAAC;aACrD,KAAK,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;aACpC,KAAK,EAAE,CAAA;QACT,IAAI,CAAC,GAAG;YACP,MAAM,IAAI,KAAK,CAAC,0CAA0C,WAAW,EAAE,CAAC,CAAA;QACzE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAwB;QACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAa,cAAc,CAAC;aACrD,KAAK,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;aACpC,KAAK,EAAE,CAAA;QACT,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACxC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CACtB,WAAwB,EACxB,YAAoB;QAEpB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAa,cAAc,CAAC;aACvD,KAAK,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;aACpC,QAAQ,CAAC,oBAAoB,EAAE,IAAI,EAAE,YAAY,CAAC;aAClD,GAAG,CAAoC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;QACpE,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAA;QACxB,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,CAAC,CAAA;QAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ;YAC/B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAiB;QACpC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAa,cAAc,CAAC;aACvD,MAAM,CAAC;YACP,YAAY,EAAE,KAAK,CAAC,WAAW;YAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,aAAa,EAAE,KAAK,CAAC,YAAY;YACjC,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,kBAAkB,EAAE,KAAK,CAAC,gBAAgB;YAC1C,UAAU,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;aACD,SAAS,CAAC,GAAG,CAAC,CAAA;QAChB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY;QAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAa,cAAc,CAAC;aACrD,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;aACf,KAAK,CAAC,IAAI,CAAC,CAAA;QACb,OAAO,CAAC,CAAC,GAAG,CAAA;IACb,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,WAAwB,EAAE,KAAK,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAa,cAAc,CAAC;aACtD,KAAK,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;aACpC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;aAC7B,KAAK,CAAC,KAAK,CAAC,CAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;CACD;AAED,SAAS,SAAS,CAAC,GAAe;IACjC,OAAO;QACN,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAA;AACF,CAAC;AAED,SAAS,SAAS,CAAC,GAAe;IACjC,OAAO;QACN,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;QACvC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B,gBAAgB,EAAE,GAAG,CAAC,kBAAkB;QACxC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAA;AACF,CAAC;AAED,SAAS,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;AAC3C,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Identity key (secp256k1 public key, hex) of an account owner.
3
+ * Acts as the primary key for accounts — 1:1 identity → account.
4
+ */
5
+ export type IdentityKey = string;
6
+ export interface Account {
7
+ identityKey: IdentityKey;
8
+ createdAt: Date;
9
+ updatedAt: Date;
10
+ }
11
+ export interface Payment {
12
+ id: number;
13
+ identityKey: IdentityKey;
14
+ txid: string;
15
+ bytesCovered: number;
16
+ satsPaid: number;
17
+ paidThroughBlock: number;
18
+ appliedAt: Date;
19
+ }
20
+ export interface NewPayment {
21
+ identityKey: IdentityKey;
22
+ txid: string;
23
+ bytesCovered: number;
24
+ satsPaid: number;
25
+ paidThroughBlock: number;
26
+ }
27
+ export interface AccountsConfig {
28
+ enabled: boolean;
29
+ /** Free baseline in bytes allocated to every account. */
30
+ baselineBytes: number;
31
+ /** Sats charged per GB of paid capacity per `durationBlocks`. */
32
+ satsPerGb: number;
33
+ /** How many blocks a payment remains valid for (~1 month at 10-min blocks = 4383). */
34
+ durationBlocks: number;
35
+ /** Identity keys (hex pubkey) whose requests bypass metering. Server's own identity is auto-added. */
36
+ freeIdentityKeys?: IdentityKey[];
37
+ }
38
+ export interface PaymentQuote {
39
+ satoshisRequired: number;
40
+ bytesRequested: number;
41
+ derivationPrefix: string;
42
+ orderID: string;
43
+ expiresAt: number;
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/accounts/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,WAAW,OAAO;IACvB,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CACf;AAED,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,WAAW,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,IAAI,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,WAAW,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAA;IACjB,sFAAsF;IACtF,cAAc,EAAE,MAAM,CAAA;IACtB,sGAAsG;IACtG,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,YAAY;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/accounts/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import type { WalletStorageProvider } from './types';
2
+ export interface BearerServerConfig {
3
+ storage: WalletStorageProvider;
4
+ token: string;
5
+ port: number;
6
+ hostname?: string;
7
+ identityHeader?: string;
8
+ adminIdentityKeys?: string[];
9
+ }
10
+ export interface BearerServerHandle {
11
+ port: number;
12
+ stop(): Promise<void>;
13
+ }
14
+ /**
15
+ * Bearer-only RPC server. Native Bun.serve, no Express, no BRC-100.
16
+ *
17
+ * Intended for firewalled internal deployments where an upstream has already
18
+ * authenticated the caller (e.g. 1sat-stack's `/internal` consumer path).
19
+ */
20
+ export declare function createBearerServer(config: BearerServerConfig): BearerServerHandle;
21
+ //# sourceMappingURL=createBearerServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBearerServer.d.ts","sourceRoot":"","sources":["../src/createBearerServer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,kBAAkB,GACxB,kBAAkB,CAsBpB"}
@@ -0,0 +1,30 @@
1
+ import { createWalletRpcHandler } from './createWalletRpcHandler';
2
+ import { bearerResolver } from './resolvers/bearer';
3
+ /**
4
+ * Bearer-only RPC server. Native Bun.serve, no Express, no BRC-100.
5
+ *
6
+ * Intended for firewalled internal deployments where an upstream has already
7
+ * authenticated the caller (e.g. 1sat-stack's `/internal` consumer path).
8
+ */
9
+ export function createBearerServer(config) {
10
+ const handler = createWalletRpcHandler({
11
+ storage: config.storage,
12
+ resolveIdentity: bearerResolver({
13
+ token: config.token,
14
+ identityHeader: config.identityHeader,
15
+ }),
16
+ adminIdentityKeys: config.adminIdentityKeys,
17
+ });
18
+ const server = Bun.serve({
19
+ port: config.port,
20
+ hostname: config.hostname,
21
+ fetch: handler,
22
+ });
23
+ return {
24
+ port: server.port ?? config.port,
25
+ async stop() {
26
+ await server.stop();
27
+ },
28
+ };
29
+ }
30
+ //# sourceMappingURL=createBearerServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBearerServer.js","sourceRoot":"","sources":["../src/createBearerServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAiBnD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CACjC,MAA0B;IAE1B,MAAM,OAAO,GAAG,sBAAsB,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,eAAe,EAAE,cAAc,CAAC;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,cAAc,EAAE,MAAM,CAAC,cAAc;SACrC,CAAC;QACF,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;KAC3C,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,OAAO;KACd,CAAC,CAAA;IAEF,OAAO;QACN,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI;QAChC,KAAK,CAAC,IAAI;YACT,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACpB,CAAC;KACD,CAAA;AACF,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type sdk as walletSdk } from '@bsv/wallet-toolbox';
2
+ import type { ChaintracksClientApi } from '@bsv/wallet-toolbox/out/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.js';
3
+ import { type Knex } from 'knex';
4
+ type FeeModel = walletSdk.StorageFeeModel;
5
+ export interface WalletMonitorConfig {
6
+ chain: 'main' | 'test';
7
+ knex: Knex.Config;
8
+ /** 1sat-stack base URL used for default OneSatServices. Ignored when `services` is supplied. */
9
+ onesatURL?: string;
10
+ /** Override chain services. Defaults to OneSatServices(chain, onesatURL). */
11
+ services?: walletSdk.WalletServices;
12
+ /** Chaintracks client. Defaults to the one provided by OneSatServices. */
13
+ chaintracks?: ChaintracksClientApi;
14
+ /** StorageKnex fee model. Defaults to { model: 'sat/kb', value: 1 }. */
15
+ feeModel?: FeeModel;
16
+ }
17
+ export interface WalletMonitorHandle {
18
+ start(): Promise<void>;
19
+ stop(): Promise<void>;
20
+ get running(): boolean;
21
+ }
22
+ /**
23
+ * Builds and runs a wallet-toolbox Monitor daemon wired to OneSatServices by default.
24
+ *
25
+ * Intended entry point for `1sat serve monitor` and the monitor portion of `1sat serve`.
26
+ */
27
+ export declare function createWalletMonitor(config: WalletMonitorConfig): WalletMonitorHandle;
28
+ export {};
29
+ //# sourceMappingURL=createWalletMonitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletMonitor.d.ts","sourceRoot":"","sources":["../src/createWalletMonitor.ts"],"names":[],"mappings":"AACA,OAAO,EAIN,KAAK,GAAG,IAAI,SAAS,EACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2FAA2F,CAAA;AACrI,OAAO,EAAE,KAAK,IAAI,EAAoB,MAAM,MAAM,CAAA;AAElD,KAAK,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAA;AAEzC,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAA;IACjB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,SAAS,CAAC,cAAc,CAAA;IACnC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,IAAI,OAAO,IAAI,OAAO,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,mBAAmB,GACzB,mBAAmB,CA+FrB"}
@@ -0,0 +1,90 @@
1
+ import { OneSatServices } from '@1sat/client';
2
+ import { Monitor, StorageKnex, WalletStorageManager, } from '@bsv/wallet-toolbox';
3
+ import { knex as makeKnex } from 'knex';
4
+ /**
5
+ * Builds and runs a wallet-toolbox Monitor daemon wired to OneSatServices by default.
6
+ *
7
+ * Intended entry point for `1sat serve monitor` and the monitor portion of `1sat serve`.
8
+ */
9
+ export function createWalletMonitor(config) {
10
+ let knex;
11
+ let storage;
12
+ let monitor;
13
+ let tasksPromise;
14
+ let started = false;
15
+ return {
16
+ get running() {
17
+ return started;
18
+ },
19
+ async start() {
20
+ if (started)
21
+ return;
22
+ started = true;
23
+ knex = makeKnex(config.knex);
24
+ storage = new StorageKnex({
25
+ chain: config.chain,
26
+ knex,
27
+ feeModel: config.feeModel ?? { model: 'sat/kb', value: 1 },
28
+ commissionSatoshis: 0,
29
+ commissionPubKeyHex: undefined,
30
+ });
31
+ await storage.makeAvailable();
32
+ const settings = await storage.getSettings();
33
+ const manager = new WalletStorageManager(settings.storageIdentityKey, storage);
34
+ await manager.makeAvailable();
35
+ const services = config.services ??
36
+ new OneSatServices(config.chain, config.onesatURL);
37
+ manager.setServices(services);
38
+ const chaintracks = config.chaintracks ??
39
+ services
40
+ .chaintracks;
41
+ if (!chaintracks) {
42
+ throw new Error('createWalletMonitor: services does not expose `chaintracks`; pass `chaintracks` explicitly.');
43
+ }
44
+ monitor = new Monitor({
45
+ chain: config.chain,
46
+ services,
47
+ storage: manager,
48
+ chaintracks,
49
+ msecsWaitPerMerkleProofServiceReq: 500,
50
+ taskRunWaitMsecs: 5000,
51
+ abandonedMsecs: 5 * 60 * 1000,
52
+ unprovenAttemptsLimitTest: 10,
53
+ unprovenAttemptsLimitMain: 144,
54
+ });
55
+ if (monitor._tasks.length === 0)
56
+ monitor.addMultiUserTasks();
57
+ tasksPromise = monitor.startTasks();
58
+ },
59
+ async stop() {
60
+ if (!started)
61
+ return;
62
+ started = false;
63
+ if (monitor)
64
+ monitor.stopTasks();
65
+ if (tasksPromise) {
66
+ try {
67
+ await tasksPromise;
68
+ }
69
+ catch {
70
+ // task promise rejects on shutdown in some configurations; ignore
71
+ }
72
+ }
73
+ try {
74
+ await monitor?.destroy();
75
+ }
76
+ catch {
77
+ // destroy unsubscribes chaintracks listeners; failures here aren't fatal
78
+ }
79
+ if (storage)
80
+ await storage.destroy();
81
+ if (knex)
82
+ await knex.destroy();
83
+ monitor = undefined;
84
+ tasksPromise = undefined;
85
+ storage = undefined;
86
+ knex = undefined;
87
+ },
88
+ };
89
+ }
90
+ //# sourceMappingURL=createWalletMonitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletMonitor.js","sourceRoot":"","sources":["../src/createWalletMonitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WalletRpcHandlerConfig } from './types';
2
+ export type WalletRpcHandler = (req: Request) => Promise<Response>;
3
+ export declare function createWalletRpcHandler(config: WalletRpcHandlerConfig): WalletRpcHandler;
4
+ //# sourceMappingURL=createWalletRpcHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletRpcHandler.d.ts","sourceRoot":"","sources":["../src/createWalletRpcHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGX,sBAAsB,EACtB,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAElE,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,sBAAsB,GAC5B,gBAAgB,CA8ClB"}
@@ -0,0 +1,92 @@
1
+ import { dispatch } from './dispatch';
2
+ export function createWalletRpcHandler(config) {
3
+ return async (req) => {
4
+ if (req.method !== 'POST') {
5
+ return methodNotAllowed();
6
+ }
7
+ const body = await parseBody(req);
8
+ if (!body.ok) {
9
+ return invalidRequest(body.id);
10
+ }
11
+ let identity;
12
+ try {
13
+ identity = await config.resolveIdentity(req);
14
+ }
15
+ catch (err) {
16
+ return unauthorized(body.request.id ?? null, err);
17
+ }
18
+ if (config.preDispatch) {
19
+ const gate = await config.preDispatch({
20
+ method: body.request.method,
21
+ identity,
22
+ request: req,
23
+ id: body.request.id ?? null,
24
+ });
25
+ if (gate.type === 'blocked') {
26
+ return gate.response;
27
+ }
28
+ }
29
+ const response = await dispatch({
30
+ storage: config.storage,
31
+ adminIdentityKeys: config.adminIdentityKeys,
32
+ makeLogger: config.makeLogger,
33
+ }, {
34
+ method: body.request.method,
35
+ params: body.request.params ?? [],
36
+ id: body.request.id ?? null,
37
+ identity,
38
+ });
39
+ return jsonResponse(response);
40
+ };
41
+ }
42
+ async function parseBody(req) {
43
+ let raw;
44
+ try {
45
+ raw = await req.json();
46
+ }
47
+ catch {
48
+ return { ok: false, id: null };
49
+ }
50
+ if (!isJsonRpcRequest(raw)) {
51
+ const maybeId = raw?.id ?? null;
52
+ return { ok: false, id: maybeId };
53
+ }
54
+ return { ok: true, request: raw, id: raw.id ?? null };
55
+ }
56
+ function isJsonRpcRequest(value) {
57
+ if (typeof value !== 'object' || value === null)
58
+ return false;
59
+ const v = value;
60
+ if (v.jsonrpc !== '2.0')
61
+ return false;
62
+ if (typeof v.method !== 'string')
63
+ return false;
64
+ if (v.params !== undefined && !Array.isArray(v.params))
65
+ return false;
66
+ return true;
67
+ }
68
+ function jsonResponse(body) {
69
+ return new Response(JSON.stringify(body), {
70
+ status: 200,
71
+ headers: { 'content-type': 'application/json' },
72
+ });
73
+ }
74
+ function methodNotAllowed() {
75
+ return new Response('Method Not Allowed', { status: 405 });
76
+ }
77
+ function invalidRequest(id) {
78
+ return new Response(JSON.stringify({
79
+ jsonrpc: '2.0',
80
+ error: { code: -32600, message: 'Invalid Request' },
81
+ id,
82
+ }), { status: 400, headers: { 'content-type': 'application/json' } });
83
+ }
84
+ function unauthorized(id, err) {
85
+ const message = err instanceof Error ? err.message : 'Unauthorized';
86
+ return new Response(JSON.stringify({
87
+ jsonrpc: '2.0',
88
+ error: { code: -32000, message },
89
+ id,
90
+ }), { status: 401, headers: { 'content-type': 'application/json' } });
91
+ }
92
+ //# sourceMappingURL=createWalletRpcHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletRpcHandler.js","sourceRoot":"","sources":["../src/createWalletRpcHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type Express } from 'express';
2
+ import type { Knex } from 'knex';
3
+ import type { AccountsConfig } from './accounts/types';
4
+ import type { MakeWalletLogger, WalletStorageProvider } from './types';
5
+ export interface WalletServerAccounts {
6
+ config: AccountsConfig;
7
+ knex: Knex;
8
+ currentBlock: () => Promise<number>;
9
+ }
10
+ export interface WalletServerConfig {
11
+ storage: WalletStorageProvider;
12
+ serverPrivateKey: string;
13
+ listen: {
14
+ port: number;
15
+ host?: string;
16
+ };
17
+ publicPath?: string | null;
18
+ internalPath?: string | null;
19
+ internalAPIKey?: string;
20
+ internalIdentityHeader?: string;
21
+ adminIdentityKeys?: string[];
22
+ makeLogger?: MakeWalletLogger;
23
+ bodyLimit?: string;
24
+ accounts?: WalletServerAccounts;
25
+ }
26
+ export interface WalletServerHandle {
27
+ app: Express;
28
+ start(): Promise<number>;
29
+ stop(): Promise<void>;
30
+ }
31
+ export declare function createWalletServer(config: WalletServerConfig): WalletServerHandle;
32
+ //# sourceMappingURL=createWalletServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletServer.d.ts","sourceRoot":"","sources":["../src/createWalletServer.ts"],"names":[],"mappings":"AAQA,OAAgB,EACf,KAAK,OAAO,EAIZ,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAEhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAItD,OAAO,KAAK,EACX,gBAAgB,EAEhB,qBAAqB,EACrB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,oBAAoB,CAAA;CAC/B;AAED,MAAM,WAAW,kBAAkB;IAClC,GAAG,EAAE,OAAO,CAAA;IACZ,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACrB;AAED,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,kBAAkB,GACxB,kBAAkB,CAqEpB"}