@toon-protocol/connector 3.20.1 → 3.29.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 (181) hide show
  1. package/README.md +6 -6
  2. package/dist/auth/rfc9421/content-digest.d.ts +16 -0
  3. package/dist/auth/rfc9421/content-digest.d.ts.map +1 -0
  4. package/dist/auth/rfc9421/content-digest.js +35 -0
  5. package/dist/auth/rfc9421/content-digest.js.map +1 -0
  6. package/dist/auth/rfc9421/index.d.ts +9 -0
  7. package/dist/auth/rfc9421/index.d.ts.map +1 -0
  8. package/dist/auth/rfc9421/index.js +24 -0
  9. package/dist/auth/rfc9421/index.js.map +1 -0
  10. package/dist/auth/rfc9421/sign.d.ts +20 -0
  11. package/dist/auth/rfc9421/sign.d.ts.map +1 -0
  12. package/dist/auth/rfc9421/sign.js +43 -0
  13. package/dist/auth/rfc9421/sign.js.map +1 -0
  14. package/dist/auth/rfc9421/signature-base.d.ts +21 -0
  15. package/dist/auth/rfc9421/signature-base.d.ts.map +1 -0
  16. package/dist/auth/rfc9421/signature-base.js +57 -0
  17. package/dist/auth/rfc9421/signature-base.js.map +1 -0
  18. package/dist/auth/rfc9421/verify.d.ts +19 -0
  19. package/dist/auth/rfc9421/verify.d.ts.map +1 -0
  20. package/dist/auth/rfc9421/verify.js +215 -0
  21. package/dist/auth/rfc9421/verify.js.map +1 -0
  22. package/dist/btp/btp-client-manager.d.ts +1 -1
  23. package/dist/btp/btp-client-manager.d.ts.map +1 -1
  24. package/dist/btp/btp-client.d.ts +2 -2
  25. package/dist/btp/btp-client.d.ts.map +1 -1
  26. package/dist/btp/btp-client.js.map +1 -1
  27. package/dist/cli/admin-client-factory.d.ts +10 -0
  28. package/dist/cli/admin-client-factory.d.ts.map +1 -0
  29. package/dist/cli/admin-client-factory.js +33 -0
  30. package/dist/cli/admin-client-factory.js.map +1 -0
  31. package/dist/cli/commands/app.d.ts +6 -0
  32. package/dist/cli/commands/app.d.ts.map +1 -0
  33. package/dist/cli/commands/app.js +132 -0
  34. package/dist/cli/commands/app.js.map +1 -0
  35. package/dist/cli/commands/route.d.ts +3 -0
  36. package/dist/cli/commands/route.d.ts.map +1 -0
  37. package/dist/cli/commands/route.js +63 -0
  38. package/dist/cli/commands/route.js.map +1 -0
  39. package/dist/cli/commands/up.d.ts +3 -0
  40. package/dist/cli/commands/up.d.ts.map +1 -0
  41. package/dist/cli/commands/up.js +27 -0
  42. package/dist/cli/commands/up.js.map +1 -0
  43. package/dist/cli/index.js +32 -16
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/client/connector-admin-client.d.ts +17 -12
  46. package/dist/client/connector-admin-client.d.ts.map +1 -1
  47. package/dist/client/connector-admin-client.js.map +1 -1
  48. package/dist/config/config-loader.d.ts +0 -3
  49. package/dist/config/config-loader.d.ts.map +1 -1
  50. package/dist/config/config-loader.js +41 -161
  51. package/dist/config/config-loader.js.map +1 -1
  52. package/dist/config/environment-validator.js +6 -6
  53. package/dist/config/environment-validator.js.map +1 -1
  54. package/dist/config/types.d.ts +49 -17
  55. package/dist/config/types.d.ts.map +1 -1
  56. package/dist/config/types.js +93 -1
  57. package/dist/config/types.js.map +1 -1
  58. package/dist/core/connector-node.d.ts +13 -1
  59. package/dist/core/connector-node.d.ts.map +1 -1
  60. package/dist/core/connector-node.js +279 -171
  61. package/dist/core/connector-node.js.map +1 -1
  62. package/dist/core/handlers/http-proxy-handler.d.ts +47 -0
  63. package/dist/core/handlers/http-proxy-handler.d.ts.map +1 -0
  64. package/dist/core/handlers/http-proxy-handler.js +223 -0
  65. package/dist/core/handlers/http-proxy-handler.js.map +1 -0
  66. package/dist/core/local-delivery-client.d.ts +1 -0
  67. package/dist/core/local-delivery-client.d.ts.map +1 -1
  68. package/dist/core/local-delivery-client.js +25 -9
  69. package/dist/core/local-delivery-client.js.map +1 -1
  70. package/dist/core/packet-handler.d.ts +10 -0
  71. package/dist/core/packet-handler.d.ts.map +1 -1
  72. package/dist/core/packet-handler.js +121 -8
  73. package/dist/core/packet-handler.js.map +1 -1
  74. package/dist/core/payment-handler.d.ts +2 -1
  75. package/dist/core/payment-handler.d.ts.map +1 -1
  76. package/dist/core/payment-handler.js +24 -0
  77. package/dist/core/payment-handler.js.map +1 -1
  78. package/dist/core/registry-db-schema.d.ts +2 -1
  79. package/dist/core/registry-db-schema.d.ts.map +1 -1
  80. package/dist/core/registry-db-schema.js +9 -0
  81. package/dist/core/registry-db-schema.js.map +1 -1
  82. package/dist/core/registry-store.d.ts +1 -0
  83. package/dist/core/registry-store.d.ts.map +1 -1
  84. package/dist/core/registry-store.js +6 -4
  85. package/dist/core/registry-store.js.map +1 -1
  86. package/dist/core/route-upstream-registry.d.ts +17 -0
  87. package/dist/core/route-upstream-registry.d.ts.map +1 -0
  88. package/dist/core/route-upstream-registry.js +51 -0
  89. package/dist/core/route-upstream-registry.js.map +1 -0
  90. package/dist/discovery/ilp-peer-info-event.d.ts +22 -0
  91. package/dist/discovery/ilp-peer-info-event.d.ts.map +1 -0
  92. package/dist/discovery/ilp-peer-info-event.js +21 -0
  93. package/dist/discovery/ilp-peer-info-event.js.map +1 -0
  94. package/dist/discovery/index.d.ts +8 -0
  95. package/dist/discovery/index.d.ts.map +1 -1
  96. package/dist/discovery/index.js +16 -1
  97. package/dist/discovery/index.js.map +1 -1
  98. package/dist/discovery/self-announce-builder.d.ts +14 -0
  99. package/dist/discovery/self-announce-builder.d.ts.map +1 -0
  100. package/dist/discovery/self-announce-builder.js +88 -0
  101. package/dist/discovery/self-announce-builder.js.map +1 -0
  102. package/dist/discovery/self-announce-publish.d.ts +17 -0
  103. package/dist/discovery/self-announce-publish.d.ts.map +1 -0
  104. package/dist/discovery/self-announce-publish.js +35 -0
  105. package/dist/discovery/self-announce-publish.js.map +1 -0
  106. package/dist/discovery/self-announce-service.d.ts +36 -0
  107. package/dist/discovery/self-announce-service.d.ts.map +1 -0
  108. package/dist/discovery/self-announce-service.js +118 -0
  109. package/dist/discovery/self-announce-service.js.map +1 -0
  110. package/dist/http/admin-api-inventory.d.ts.map +1 -1
  111. package/dist/http/admin-api-inventory.js +0 -42
  112. package/dist/http/admin-api-inventory.js.map +1 -1
  113. package/dist/http/admin-api.d.ts +29 -13
  114. package/dist/http/admin-api.d.ts.map +1 -1
  115. package/dist/http/admin-api.js +141 -76
  116. package/dist/http/admin-api.js.map +1 -1
  117. package/dist/http/admin-server.d.ts +3 -4
  118. package/dist/http/admin-server.d.ts.map +1 -1
  119. package/dist/http/admin-server.js +4 -6
  120. package/dist/http/admin-server.js.map +1 -1
  121. package/dist/http/ilp-http-adapter.d.ts +10 -0
  122. package/dist/http/ilp-http-adapter.d.ts.map +1 -1
  123. package/dist/http/ilp-http-adapter.js +118 -0
  124. package/dist/http/ilp-http-adapter.js.map +1 -1
  125. package/dist/http/types.d.ts +1 -1
  126. package/dist/http/types.d.ts.map +1 -1
  127. package/dist/http/x402-greeting.d.ts +46 -0
  128. package/dist/http/x402-greeting.d.ts.map +1 -0
  129. package/dist/http/x402-greeting.js +77 -0
  130. package/dist/http/x402-greeting.js.map +1 -0
  131. package/dist/lib.d.ts +15 -4
  132. package/dist/lib.d.ts.map +1 -1
  133. package/dist/lib.js +42 -1
  134. package/dist/lib.js.map +1 -1
  135. package/dist/main.d.ts +3 -1
  136. package/dist/main.d.ts.map +1 -1
  137. package/dist/main.js +3 -1
  138. package/dist/main.js.map +1 -1
  139. package/dist/settlement/channel-manager.d.ts.map +1 -1
  140. package/dist/settlement/channel-manager.js +1 -1
  141. package/dist/settlement/channel-manager.js.map +1 -1
  142. package/dist/settlement/provider/solana-payment-channel-provider.d.ts.map +1 -1
  143. package/dist/settlement/provider/solana-payment-channel-provider.js +1 -1
  144. package/dist/settlement/provider/solana-payment-channel-provider.js.map +1 -1
  145. package/dist/settlement/solana-payment-channel-sdk.d.ts +1 -1
  146. package/dist/settlement/solana-payment-channel-sdk.d.ts.map +1 -1
  147. package/dist/settlement/solana-payment-channel-sdk.js +2 -2
  148. package/dist/settlement/solana-payment-channel-sdk.js.map +1 -1
  149. package/dist/transport/http-peer-transport.d.ts +46 -0
  150. package/dist/transport/http-peer-transport.d.ts.map +1 -0
  151. package/dist/transport/http-peer-transport.js +185 -0
  152. package/dist/transport/http-peer-transport.js.map +1 -0
  153. package/dist/transport/index.d.ts +0 -3
  154. package/dist/transport/index.d.ts.map +1 -1
  155. package/dist/transport/index.js +1 -8
  156. package/dist/transport/index.js.map +1 -1
  157. package/dist/wallet/mnemonic-keys.d.ts +15 -0
  158. package/dist/wallet/mnemonic-keys.d.ts.map +1 -0
  159. package/dist/wallet/mnemonic-keys.js +150 -0
  160. package/dist/wallet/mnemonic-keys.js.map +1 -0
  161. package/package.json +11 -8
  162. package/dist/transport/hs-desc-monitor.d.ts +0 -12
  163. package/dist/transport/hs-desc-monitor.d.ts.map +0 -1
  164. package/dist/transport/hs-desc-monitor.js +0 -105
  165. package/dist/transport/hs-desc-monitor.js.map +0 -1
  166. package/dist/transport/managed-anon-client.d.ts +0 -93
  167. package/dist/transport/managed-anon-client.d.ts.map +0 -1
  168. package/dist/transport/managed-anon-client.js +0 -522
  169. package/dist/transport/managed-anon-client.js.map +0 -1
  170. package/dist/transport/socks-transport-provider.d.ts +0 -29
  171. package/dist/transport/socks-transport-provider.d.ts.map +0 -1
  172. package/dist/transport/socks-transport-provider.js +0 -136
  173. package/dist/transport/socks-transport-provider.js.map +0 -1
  174. package/dist/transport/socks-url.d.ts +0 -6
  175. package/dist/transport/socks-url.d.ts.map +0 -1
  176. package/dist/transport/socks-url.js +0 -29
  177. package/dist/transport/socks-url.js.map +0 -1
  178. package/dist/transport/socks5-connect.d.ts +0 -12
  179. package/dist/transport/socks5-connect.d.ts.map +0 -1
  180. package/dist/transport/socks5-connect.js +0 -89
  181. package/dist/transport/socks5-connect.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import type { Database } from 'better-sqlite3';
2
2
  export declare const REGISTRY_PEERS_SCHEMA = "\n CREATE TABLE IF NOT EXISTS peers (\n id TEXT PRIMARY KEY,\n url TEXT NOT NULL,\n auth_token TEXT NOT NULL,\n relation TEXT,\n transport TEXT,\n settlement_json TEXT,\n source TEXT NOT NULL,\n updated_at INTEGER NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_peers_source ON peers(source);\n";
3
- export declare const REGISTRY_ROUTES_SCHEMA = "\n CREATE TABLE IF NOT EXISTS routes (\n prefix TEXT PRIMARY KEY,\n next_hop TEXT NOT NULL,\n priority INTEGER NOT NULL DEFAULT 0,\n source TEXT NOT NULL,\n updated_at INTEGER NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_routes_next_hop ON routes(next_hop);\n CREATE INDEX IF NOT EXISTS idx_routes_source ON routes(source);\n";
3
+ export declare const REGISTRY_ROUTES_SCHEMA = "\n CREATE TABLE IF NOT EXISTS routes (\n prefix TEXT PRIMARY KEY,\n next_hop TEXT NOT NULL,\n priority INTEGER NOT NULL DEFAULT 0,\n source TEXT NOT NULL,\n termination_json TEXT,\n updated_at INTEGER NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_routes_next_hop ON routes(next_hop);\n CREATE INDEX IF NOT EXISTS idx_routes_source ON routes(source);\n";
4
+ export declare function migrateRouteTerminationColumn(db: Database): void;
4
5
  export declare function initializeRegistrySchema(db: Database): void;
5
6
  //# sourceMappingURL=registry-db-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-db-schema.d.ts","sourceRoot":"","sources":["../../src/core/registry-db-schema.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAY/C,eAAO,MAAM,qBAAqB,uUAajC,CAAC;AASF,eAAO,MAAM,sBAAsB,iWAWlC,CAAC;AAOF,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAG3D"}
1
+ {"version":3,"file":"registry-db-schema.d.ts","sourceRoot":"","sources":["../../src/core/registry-db-schema.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAY/C,eAAO,MAAM,qBAAqB,uUAajC,CAAC;AASF,eAAO,MAAM,sBAAsB,6XAYlC,CAAC;AAUF,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAKhE;AAOD,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAK3D"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.REGISTRY_ROUTES_SCHEMA = exports.REGISTRY_PEERS_SCHEMA = void 0;
4
+ exports.migrateRouteTerminationColumn = migrateRouteTerminationColumn;
4
5
  exports.initializeRegistrySchema = initializeRegistrySchema;
5
6
  exports.REGISTRY_PEERS_SCHEMA = `
6
7
  CREATE TABLE IF NOT EXISTS peers (
@@ -22,14 +23,22 @@ exports.REGISTRY_ROUTES_SCHEMA = `
22
23
  next_hop TEXT NOT NULL,
23
24
  priority INTEGER NOT NULL DEFAULT 0,
24
25
  source TEXT NOT NULL,
26
+ termination_json TEXT,
25
27
  updated_at INTEGER NOT NULL
26
28
  );
27
29
 
28
30
  CREATE INDEX IF NOT EXISTS idx_routes_next_hop ON routes(next_hop);
29
31
  CREATE INDEX IF NOT EXISTS idx_routes_source ON routes(source);
30
32
  `;
33
+ function migrateRouteTerminationColumn(db) {
34
+ const columns = db.prepare(`PRAGMA table_info(routes)`).all();
35
+ if (!columns.some((c) => c.name === 'termination_json')) {
36
+ db.exec(`ALTER TABLE routes ADD COLUMN termination_json TEXT`);
37
+ }
38
+ }
31
39
  function initializeRegistrySchema(db) {
32
40
  db.exec(exports.REGISTRY_PEERS_SCHEMA);
33
41
  db.exec(exports.REGISTRY_ROUTES_SCHEMA);
42
+ migrateRouteTerminationColumn(db);
34
43
  }
35
44
  //# sourceMappingURL=registry-db-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-db-schema.js","sourceRoot":"","sources":["../../src/core/registry-db-schema.ts"],"names":[],"mappings":";;;AAkEA,4DAGC;AA3CY,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;CAapC,CAAC;AASW,QAAA,sBAAsB,GAAG;;;;;;;;;;;CAWrC,CAAC;AAOF,SAAgB,wBAAwB,CAAC,EAAY;IACnD,EAAE,CAAC,IAAI,CAAC,6BAAqB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,8BAAsB,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"registry-db-schema.js","sourceRoot":"","sources":["../../src/core/registry-db-schema.ts"],"names":[],"mappings":";;;AAsEA,sEAKC;AAOD,4DAKC;AA7DY,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;CAapC,CAAC;AASW,QAAA,sBAAsB,GAAG;;;;;;;;;;;;CAYrC,CAAC;AAUF,SAAgB,6BAA6B,CAAC,EAAY;IACxD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,GAAG,EAA6B,CAAC;IACzF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,EAAE,CAAC;QACxD,EAAE,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAOD,SAAgB,wBAAwB,CAAC,EAAY;IACnD,EAAE,CAAC,IAAI,CAAC,6BAAqB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,8BAAsB,CAAC,CAAC;IAEhC,6BAA6B,CAAC,EAAE,CAAC,CAAC;AACpC,CAAC"}
@@ -15,6 +15,7 @@ export interface RouteRecord {
15
15
  nextHop: string;
16
16
  priority: number;
17
17
  source: RegistrySource;
18
+ terminationJson?: string;
18
19
  }
19
20
  export declare class RegistryStore {
20
21
  private readonly db;
@@ -1 +1 @@
1
- {"version":3,"file":"registry-store.d.ts","sourceRoot":"","sources":["../../src/core/registry-store.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGlD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;CACxB;AAGD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;CACxB;AAQD,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM;IAIjC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IA+BlC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAS5B,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAmBpC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASjC,OAAO,IAAI;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,MAAM,EAAE,WAAW,EAAE,CAAA;KAAE;IA+CzD,OAAO,CAAC,UAAU;CAWnB"}
1
+ {"version":3,"file":"registry-store.d.ts","sourceRoot":"","sources":["../../src/core/registry-store.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGlD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;CACxB;AAGD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IAMvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAQD,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM;IAIjC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IA+BlC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAS5B,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IA2BpC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASjC,OAAO,IAAI;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,MAAM,EAAE,WAAW,EAAE,CAAA;KAAE;IAiDzD,OAAO,CAAC,UAAU;CAWnB"}
@@ -38,14 +38,15 @@ class RegistryStore {
38
38
  saveRoute(record) {
39
39
  try {
40
40
  this.db
41
- .prepare(`INSERT INTO routes (prefix, next_hop, priority, source, updated_at)
42
- VALUES (?, ?, ?, ?, ?)
41
+ .prepare(`INSERT INTO routes (prefix, next_hop, priority, source, termination_json, updated_at)
42
+ VALUES (?, ?, ?, ?, ?, ?)
43
43
  ON CONFLICT(prefix) DO UPDATE SET
44
44
  next_hop = excluded.next_hop,
45
45
  priority = excluded.priority,
46
46
  source = excluded.source,
47
+ termination_json = excluded.termination_json,
47
48
  updated_at = excluded.updated_at`)
48
- .run(record.prefix, record.nextHop, record.priority, record.source, Date.now());
49
+ .run(record.prefix, record.nextHop, record.priority, record.source, record.terminationJson ?? null, Date.now());
49
50
  }
50
51
  catch (error) {
51
52
  this.logFailure('save_route', { prefix: record.prefix }, error);
@@ -65,7 +66,7 @@ class RegistryStore {
65
66
  .prepare(`SELECT id, url, auth_token, relation, transport, settlement_json, source FROM peers`)
66
67
  .all();
67
68
  const routeRows = this.db
68
- .prepare(`SELECT prefix, next_hop, priority, source FROM routes`)
69
+ .prepare(`SELECT prefix, next_hop, priority, source, termination_json FROM routes`)
69
70
  .all();
70
71
  return {
71
72
  peers: peerRows.map((r) => ({
@@ -82,6 +83,7 @@ class RegistryStore {
82
83
  nextHop: r.next_hop,
83
84
  priority: r.priority,
84
85
  source: r.source,
86
+ terminationJson: r.termination_json ?? undefined,
85
87
  })),
86
88
  };
87
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry-store.js","sourceRoot":"","sources":["../../src/core/registry-store.ts"],"names":[],"mappings":";;;AAmDA,MAAa,aAAa;IAEL;IACA;IAFnB,YACmB,EAAY,EACZ,MAAc;QADd,OAAE,GAAF,EAAE,CAAU;QACZ,WAAM,GAAN,MAAM,CAAQ;IAC9B,CAAC;IAGJ,QAAQ,CAAC,MAAkB;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;;;;;;;;8CASoC,CACrC;iBACA,GAAG,CACF,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,QAAQ,IAAI,IAAI,EACvB,MAAM,CAAC,SAAS,IAAI,IAAI,EACxB,MAAM,CAAC,cAAc,IAAI,IAAI,EAC7B,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAGD,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAGD,SAAS,CAAC,MAAmB;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;;;;;8CAMoC,CACrC;iBACA,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAGD,WAAW,CAAC,MAAc;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAGD,OAAO;QACL,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE;iBACrB,OAAO,CACN,qFAAqF,CACtF;iBACA,GAAG,EAQJ,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE;iBACtB,OAAO,CAAC,uDAAuD,CAAC;iBAChE,GAAG,EAKJ,CAAC;YAEH,OAAO;gBACL,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,SAAS,EAAE,CAAC,CAAC,UAAU;oBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,SAAS;oBACjC,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;oBACnC,cAAc,EAAE,CAAC,CAAC,eAAe,IAAI,SAAS;oBAC9C,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,CAAC,CAAC;gBACH,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,OAAO,EAAE,CAAC,CAAC,QAAQ;oBACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,EAAU,EAAE,GAA4B,EAAE,KAAc;QACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;YACE,KAAK,EAAE,sBAAsB;YAC7B,EAAE;YACF,GAAG,GAAG;YACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,EACD,iBAAiB,EAAE,gCAAgC,CACpD,CAAC;IACJ,CAAC;CACF;AArID,sCAqIC"}
1
+ {"version":3,"file":"registry-store.js","sourceRoot":"","sources":["../../src/core/registry-store.ts"],"names":[],"mappings":";;;AAyDA,MAAa,aAAa;IAEL;IACA;IAFnB,YACmB,EAAY,EACZ,MAAc;QADd,OAAE,GAAF,EAAE,CAAU;QACZ,WAAM,GAAN,MAAM,CAAQ;IAC9B,CAAC;IAGJ,QAAQ,CAAC,MAAkB;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;;;;;;;;8CASoC,CACrC;iBACA,GAAG,CACF,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,QAAQ,IAAI,IAAI,EACvB,MAAM,CAAC,SAAS,IAAI,IAAI,EACxB,MAAM,CAAC,cAAc,IAAI,IAAI,EAC7B,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAGD,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAGD,SAAS,CAAC,MAAmB;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;;;;;;8CAOoC,CACrC;iBACA,GAAG,CACF,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,eAAe,IAAI,IAAI,EAC9B,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAGD,WAAW,CAAC,MAAc;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAGD,OAAO;QACL,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE;iBACrB,OAAO,CACN,qFAAqF,CACtF;iBACA,GAAG,EAQJ,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE;iBACtB,OAAO,CAAC,yEAAyE,CAAC;iBAClF,GAAG,EAMJ,CAAC;YAEH,OAAO;gBACL,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,SAAS,EAAE,CAAC,CAAC,UAAU;oBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,SAAS;oBACjC,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;oBACnC,cAAc,EAAE,CAAC,CAAC,eAAe,IAAI,SAAS;oBAC9C,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,CAAC,CAAC;gBACH,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,OAAO,EAAE,CAAC,CAAC,QAAQ;oBACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,eAAe,EAAE,CAAC,CAAC,gBAAgB,IAAI,SAAS;iBACjD,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,EAAU,EAAE,GAA4B,EAAE,KAAc;QACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;YACE,KAAK,EAAE,sBAAsB;YAC7B,EAAE;YACF,GAAG,GAAG;YACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,EACD,iBAAiB,EAAE,gCAAgC,CACpD,CAAC;IACJ,CAAC;CACF;AA/ID,sCA+IC"}
@@ -0,0 +1,17 @@
1
+ import type { LocalDeliveryRequest, RouteTermination } from '../config/types';
2
+ export declare class RouteTerminationRegistry {
3
+ private readonly byPrefix;
4
+ constructor(entries?: Iterable<{
5
+ prefix: string;
6
+ termination?: RouteTermination;
7
+ }>);
8
+ get size(): number;
9
+ prefixes(): string[];
10
+ lookup(prefix: string): RouteTermination | undefined;
11
+ match(destination: string): RouteTermination | undefined;
12
+ set(prefix: string, termination: RouteTermination): void;
13
+ delete(prefix: string): boolean;
14
+ clear(): void;
15
+ readonly resolveUpstream: (request: LocalDeliveryRequest) => string | undefined;
16
+ }
17
+ //# sourceMappingURL=route-upstream-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-upstream-registry.d.ts","sourceRoot":"","sources":["../../src/core/route-upstream-registry.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAU9E,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;gBAOpD,OAAO,CAAC,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAWlF,IAAI,IAAI,IAAI,MAAM,CAEjB;IAGD,QAAQ,IAAI,MAAM,EAAE;IASpB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IASpD,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAexD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAKxD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK/B,KAAK,IAAI,IAAI;IAmBb,QAAQ,CAAC,eAAe,GAAI,SAAS,oBAAoB,KAAG,MAAM,GAAG,SAAS,CAE5E;CACH"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteTerminationRegistry = void 0;
4
+ class RouteTerminationRegistry {
5
+ byPrefix = new Map();
6
+ constructor(entries) {
7
+ if (entries) {
8
+ for (const entry of entries) {
9
+ if (entry.termination) {
10
+ this.byPrefix.set(entry.prefix, entry.termination);
11
+ }
12
+ }
13
+ }
14
+ }
15
+ get size() {
16
+ return this.byPrefix.size;
17
+ }
18
+ prefixes() {
19
+ return [...this.byPrefix.keys()];
20
+ }
21
+ lookup(prefix) {
22
+ return this.byPrefix.get(prefix);
23
+ }
24
+ match(destination) {
25
+ let best;
26
+ let bestLen = -1;
27
+ for (const [prefix, termination] of this.byPrefix) {
28
+ if (destination === prefix || destination.startsWith(prefix + '.')) {
29
+ if (prefix.length > bestLen) {
30
+ bestLen = prefix.length;
31
+ best = termination;
32
+ }
33
+ }
34
+ }
35
+ return best;
36
+ }
37
+ set(prefix, termination) {
38
+ this.byPrefix.set(prefix, termination);
39
+ }
40
+ delete(prefix) {
41
+ return this.byPrefix.delete(prefix);
42
+ }
43
+ clear() {
44
+ this.byPrefix.clear();
45
+ }
46
+ resolveUpstream = (request) => {
47
+ return this.match(request.destination)?.upstream;
48
+ };
49
+ }
50
+ exports.RouteTerminationRegistry = RouteTerminationRegistry;
51
+ //# sourceMappingURL=route-upstream-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-upstream-registry.js","sourceRoot":"","sources":["../../src/core/route-upstream-registry.ts"],"names":[],"mappings":";;;AAmCA,MAAa,wBAAwB;IAClB,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IAOhE,YAAY,OAAsE;QAChF,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAGD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAGD,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAOD,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAOD,KAAK,CAAC,WAAmB;QACvB,IAAI,IAAkC,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClD,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;gBACnE,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;oBAC5B,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;oBACxB,IAAI,GAAG,WAAW,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,GAAG,CAAC,MAAc,EAAE,WAA6B;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IAGD,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAGD,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAiBQ,eAAe,GAAG,CAAC,OAA6B,EAAsB,EAAE;QAC/E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;IACnD,CAAC,CAAC;CACH;AAzFD,4DAyFC"}
@@ -0,0 +1,22 @@
1
+ import { type NostrEvent } from 'nostr-tools';
2
+ export declare const ILP_PEER_INFO_KIND = 10032;
3
+ export declare const EXPIRATION_TAG = "expiration";
4
+ export interface IlpPeerInfo {
5
+ pubkey?: string;
6
+ ilpAddress: string;
7
+ ilpAddresses?: string[];
8
+ btpEndpoint: string;
9
+ httpEndpoint?: string;
10
+ relayUrl?: string;
11
+ assetCode: string;
12
+ assetScale: number;
13
+ supportedChains?: string[];
14
+ settlementAddresses?: Record<string, string>;
15
+ preferredTokens?: Record<string, string>;
16
+ [key: string]: unknown;
17
+ }
18
+ export interface BuildIlpPeerInfoOptions {
19
+ ttlSeconds?: number;
20
+ }
21
+ export declare function buildIlpPeerInfoEvent(info: IlpPeerInfo, secretKey: Uint8Array, options?: BuildIlpPeerInfoOptions): NostrEvent;
22
+ //# sourceMappingURL=ilp-peer-info-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ilp-peer-info-event.d.ts","sourceRoot":"","sources":["../../src/discovery/ilp-peer-info-event.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAG7D,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAGxC,eAAO,MAAM,cAAc,eAAe,CAAC;AAU3C,MAAM,WAAW,WAAW;IAE1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IAEnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAO3B,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,uBAAuB;IAOtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,UAAU,EACrB,OAAO,GAAE,uBAA4B,GACpC,UAAU,CAgBZ"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXPIRATION_TAG = exports.ILP_PEER_INFO_KIND = void 0;
4
+ exports.buildIlpPeerInfoEvent = buildIlpPeerInfoEvent;
5
+ const nostr_tools_1 = require("nostr-tools");
6
+ exports.ILP_PEER_INFO_KIND = 10032;
7
+ exports.EXPIRATION_TAG = 'expiration';
8
+ function buildIlpPeerInfoEvent(info, secretKey, options = {}) {
9
+ const createdAt = Math.floor(Date.now() / 1000);
10
+ const tags = [];
11
+ if (options.ttlSeconds !== undefined && options.ttlSeconds > 0) {
12
+ tags.push([exports.EXPIRATION_TAG, String(createdAt + Math.floor(options.ttlSeconds))]);
13
+ }
14
+ return (0, nostr_tools_1.finalizeEvent)({
15
+ kind: exports.ILP_PEER_INFO_KIND,
16
+ content: JSON.stringify(info),
17
+ tags,
18
+ created_at: createdAt,
19
+ }, secretKey);
20
+ }
21
+ //# sourceMappingURL=ilp-peer-info-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ilp-peer-info-event.js","sourceRoot":"","sources":["../../src/discovery/ilp-peer-info-event.ts"],"names":[],"mappings":";;;AAqGA,sDAoBC;AA5FD,6CAA6D;AAGhD,QAAA,kBAAkB,GAAG,KAAK,CAAC;AAG3B,QAAA,cAAc,GAAG,YAAY,CAAC;AAkE3C,SAAgB,qBAAqB,CACnC,IAAiB,EACjB,SAAqB,EACrB,UAAmC,EAAE;IAErC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAc,EAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,IAAA,2BAAa,EAClB;QACE,IAAI,EAAE,0BAAkB;QACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B,IAAI;QACJ,UAAU,EAAE,SAAS;KACtB,EACD,SAAS,CACV,CAAC;AACJ,CAAC"}
@@ -1,3 +1,11 @@
1
1
  export { PeerDiscoveryService } from './peer-discovery-service';
2
2
  export type { PeerDiscoveryConfig, PeerInfo, AnnounceResponse, PeerListResponse, DiscoveryStatus, PeerDiscoveryEvents, } from './types';
3
+ export { SelfAnnounceService, DEFAULT_REFRESH_INTERVAL_SECS } from './self-announce-service';
4
+ export type { SelfAnnounceServiceDeps, PublishFn, PublishOutcome } from './self-announce-service';
5
+ export { buildSelfAnnouncementInfo, normalizeSettlementAddressKeys, resolveRouteHints, } from './self-announce-builder';
6
+ export type { AnnounceWarnFn, IlpRouteHints, SelfAnnouncementInfo } from './self-announce-builder';
7
+ export { planAnnouncePublish, encodeWriteEnvelope, DEFAULT_ANNOUNCE_PRICE, } from './self-announce-publish';
8
+ export type { AnnouncePublishPlan, AnnouncePublishMode } from './self-announce-publish';
9
+ export { buildIlpPeerInfoEvent, ILP_PEER_INFO_KIND, EXPIRATION_TAG } from './ilp-peer-info-event';
10
+ export type { IlpPeerInfo, BuildIlpPeerInfoOptions } from './ilp-peer-info-event';
3
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EACV,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EACV,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7F,YAAY,EAAE,uBAAuB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClG,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,6 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PeerDiscoveryService = void 0;
3
+ exports.EXPIRATION_TAG = exports.ILP_PEER_INFO_KIND = exports.buildIlpPeerInfoEvent = exports.DEFAULT_ANNOUNCE_PRICE = exports.encodeWriteEnvelope = exports.planAnnouncePublish = exports.resolveRouteHints = exports.normalizeSettlementAddressKeys = exports.buildSelfAnnouncementInfo = exports.DEFAULT_REFRESH_INTERVAL_SECS = exports.SelfAnnounceService = exports.PeerDiscoveryService = void 0;
4
4
  var peer_discovery_service_1 = require("./peer-discovery-service");
5
5
  Object.defineProperty(exports, "PeerDiscoveryService", { enumerable: true, get: function () { return peer_discovery_service_1.PeerDiscoveryService; } });
6
+ var self_announce_service_1 = require("./self-announce-service");
7
+ Object.defineProperty(exports, "SelfAnnounceService", { enumerable: true, get: function () { return self_announce_service_1.SelfAnnounceService; } });
8
+ Object.defineProperty(exports, "DEFAULT_REFRESH_INTERVAL_SECS", { enumerable: true, get: function () { return self_announce_service_1.DEFAULT_REFRESH_INTERVAL_SECS; } });
9
+ var self_announce_builder_1 = require("./self-announce-builder");
10
+ Object.defineProperty(exports, "buildSelfAnnouncementInfo", { enumerable: true, get: function () { return self_announce_builder_1.buildSelfAnnouncementInfo; } });
11
+ Object.defineProperty(exports, "normalizeSettlementAddressKeys", { enumerable: true, get: function () { return self_announce_builder_1.normalizeSettlementAddressKeys; } });
12
+ Object.defineProperty(exports, "resolveRouteHints", { enumerable: true, get: function () { return self_announce_builder_1.resolveRouteHints; } });
13
+ var self_announce_publish_1 = require("./self-announce-publish");
14
+ Object.defineProperty(exports, "planAnnouncePublish", { enumerable: true, get: function () { return self_announce_publish_1.planAnnouncePublish; } });
15
+ Object.defineProperty(exports, "encodeWriteEnvelope", { enumerable: true, get: function () { return self_announce_publish_1.encodeWriteEnvelope; } });
16
+ Object.defineProperty(exports, "DEFAULT_ANNOUNCE_PRICE", { enumerable: true, get: function () { return self_announce_publish_1.DEFAULT_ANNOUNCE_PRICE; } });
17
+ var ilp_peer_info_event_1 = require("./ilp-peer-info-event");
18
+ Object.defineProperty(exports, "buildIlpPeerInfoEvent", { enumerable: true, get: function () { return ilp_peer_info_event_1.buildIlpPeerInfoEvent; } });
19
+ Object.defineProperty(exports, "ILP_PEER_INFO_KIND", { enumerable: true, get: function () { return ilp_peer_info_event_1.ILP_PEER_INFO_KIND; } });
20
+ Object.defineProperty(exports, "EXPIRATION_TAG", { enumerable: true, get: function () { return ilp_peer_info_event_1.EXPIRATION_TAG; } });
6
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":";;;AAMA,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":";;;AAMA,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAa7B,iEAA6F;AAApF,4HAAA,mBAAmB,OAAA;AAAE,sIAAA,6BAA6B,OAAA;AAE3D,iEAIiC;AAH/B,kIAAA,yBAAyB,OAAA;AACzB,uIAAA,8BAA8B,OAAA;AAC9B,0HAAA,iBAAiB,OAAA;AAGnB,iEAIiC;AAH/B,4HAAA,mBAAmB,OAAA;AACnB,4HAAA,mBAAmB,OAAA;AACnB,+HAAA,sBAAsB,OAAA;AAGxB,6DAAkG;AAAzF,4HAAA,qBAAqB,OAAA;AAAE,yHAAA,kBAAkB,OAAA;AAAE,qHAAA,cAAc,OAAA"}
@@ -0,0 +1,14 @@
1
+ import type { ConnectorConfig, RouteConfig, SelfAnnounceConfig } from '../config/types';
2
+ import type { IlpPeerInfo } from './ilp-peer-info-event';
3
+ export type AnnounceWarnFn = (context: object, message: string) => void;
4
+ export interface IlpRouteHints {
5
+ publish: string;
6
+ store: string;
7
+ }
8
+ export type SelfAnnouncementInfo = IlpPeerInfo & {
9
+ routes: IlpRouteHints;
10
+ };
11
+ export declare function resolveRouteHints(routes: RouteConfig[], override?: SelfAnnounceConfig['routes']): IlpRouteHints;
12
+ export declare function normalizeSettlementAddressKeys(addresses: Record<string, string>, supportedChains: string[], warn?: AnnounceWarnFn): Record<string, string>;
13
+ export declare function buildSelfAnnouncementInfo(config: ConnectorConfig, selfAnnounce: SelfAnnounceConfig, warn?: AnnounceWarnFn): SelfAnnouncementInfo;
14
+ //# sourceMappingURL=self-announce-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-announce-builder.d.ts","sourceRoot":"","sources":["../../src/discovery/self-announce-builder.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUzD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAGxE,MAAM,WAAW,aAAa;IAE5B,OAAO,EAAE,MAAM,CAAC;IAEhB,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAyB3E,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GACtC,aAAa,CA0Bf;AA4BD,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,eAAe,EAAE,MAAM,EAAE,EACzB,IAAI,CAAC,EAAE,cAAc,GACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4BxB;AAUD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,kBAAkB,EAChC,IAAI,CAAC,EAAE,cAAc,GACpB,oBAAoB,CAmDtB"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveRouteHints = resolveRouteHints;
4
+ exports.normalizeSettlementAddressKeys = normalizeSettlementAddressKeys;
5
+ exports.buildSelfAnnouncementInfo = buildSelfAnnouncementInfo;
6
+ const DEFAULT_ASSET_CODE = 'USDC';
7
+ const DEFAULT_ASSET_SCALE = 6;
8
+ function isTerminated(route) {
9
+ return typeof route.upstream === 'string' && route.upstream.length > 0;
10
+ }
11
+ function routeAddress(route) {
12
+ return route.ilpAddress ?? route.prefix;
13
+ }
14
+ function resolveRouteHints(routes, override) {
15
+ const addresses = routes.map(routeAddress);
16
+ const relayRoute = addresses.find((a) => a.endsWith('.relay'));
17
+ const directStoreRoute = addresses.find((a) => a.endsWith('.store') && !a.includes('.relay.')) ??
18
+ addresses.find((a) => a.endsWith('.store'));
19
+ let publish = override?.publish ?? relayRoute;
20
+ let store = override?.store ?? directStoreRoute;
21
+ if (!publish && store) {
22
+ publish = store.endsWith('.store') ? `${store.slice(0, -'.store'.length)}.relay` : store;
23
+ }
24
+ if (!store && publish) {
25
+ store = publish.endsWith('.relay') ? `${publish.slice(0, -'.relay'.length)}.store` : publish;
26
+ }
27
+ const fallback = addresses[0] ?? '';
28
+ return {
29
+ publish: publish ?? fallback,
30
+ store: store ?? fallback,
31
+ };
32
+ }
33
+ function normalizeSettlementAddressKeys(addresses, supportedChains, warn) {
34
+ const out = {};
35
+ for (const [key, addr] of Object.entries(addresses)) {
36
+ if (key.includes(':')) {
37
+ if (supportedChains.length === 0 || supportedChains.includes(key)) {
38
+ out[key] = addr;
39
+ }
40
+ else {
41
+ warn?.({ event: 'self_announce_settlement_key_dropped', key, supportedChains }, 'Dropping settlementAddresses key not in supportedChains (would fail core kind:10032 parsing)');
42
+ }
43
+ continue;
44
+ }
45
+ const qualified = supportedChains.filter((chainId) => chainId.split(':')[0] === key);
46
+ if (qualified.length === 0) {
47
+ warn?.({ event: 'self_announce_settlement_key_dropped', key, supportedChains }, 'Dropping bare settlementAddresses key with no matching chainProviders chain id (cannot be announced schema-compliantly)');
48
+ continue;
49
+ }
50
+ for (const chainId of qualified)
51
+ out[chainId] = addr;
52
+ }
53
+ return out;
54
+ }
55
+ function buildSelfAnnouncementInfo(config, selfAnnounce, warn) {
56
+ const terminated = config.routes.filter(isTerminated);
57
+ const sourceRoutes = terminated.length > 0 ? terminated : config.routes;
58
+ const ilpAddresses = Array.from(new Set(sourceRoutes.map(routeAddress))).filter(Boolean);
59
+ const ilpAddress = ilpAddresses[0] ?? '';
60
+ const supportedChains = (config.chainProviders ?? [])
61
+ .map((p) => p.chainId)
62
+ .filter((c) => typeof c === 'string' && c.length > 0);
63
+ const mergedAddresses = {};
64
+ for (const route of sourceRoutes) {
65
+ if (route.settlementAddresses) {
66
+ for (const [chain, addr] of Object.entries(route.settlementAddresses)) {
67
+ if (addr)
68
+ mergedAddresses[chain] = addr;
69
+ }
70
+ }
71
+ }
72
+ const settlementAddresses = normalizeSettlementAddressKeys(mergedAddresses, supportedChains, warn);
73
+ const routes = resolveRouteHints(config.routes, selfAnnounce.routes);
74
+ const info = {
75
+ ilpAddress,
76
+ ...(ilpAddresses.length > 1 ? { ilpAddresses } : {}),
77
+ btpEndpoint: selfAnnounce.btpEndpoint ?? '',
78
+ assetCode: selfAnnounce.assetCode ?? DEFAULT_ASSET_CODE,
79
+ assetScale: selfAnnounce.assetScale ?? DEFAULT_ASSET_SCALE,
80
+ ...(selfAnnounce.httpEndpoint ? { httpEndpoint: selfAnnounce.httpEndpoint } : {}),
81
+ ...(selfAnnounce.relayUrl ? { relayUrl: selfAnnounce.relayUrl } : {}),
82
+ ...(supportedChains.length > 0 ? { supportedChains } : {}),
83
+ ...(Object.keys(settlementAddresses).length > 0 ? { settlementAddresses } : {}),
84
+ routes,
85
+ };
86
+ return info;
87
+ }
88
+ //# sourceMappingURL=self-announce-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-announce-builder.js","sourceRoot":"","sources":["../../src/discovery/self-announce-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { NostrEvent } from 'nostr-tools';
2
+ export declare const DEFAULT_ANNOUNCE_PRICE = "1000";
3
+ export type AnnouncePublishMode = 'local-free' | 'remote-paid';
4
+ export interface AnnouncePublishPlan {
5
+ destination: string;
6
+ amount: bigint;
7
+ mode: AnnouncePublishMode;
8
+ data: Buffer;
9
+ }
10
+ export declare function encodeWriteEnvelope(event: NostrEvent): Buffer;
11
+ export declare function planAnnouncePublish(args: {
12
+ announceTo: string;
13
+ event: NostrEvent;
14
+ isLocallyTerminated: boolean;
15
+ remotePriceAtomic?: string;
16
+ }): AnnouncePublishPlan;
17
+ //# sourceMappingURL=self-announce-publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-announce-publish.d.ts","sourceRoot":"","sources":["../../src/discovery/self-announce-publish.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAG7C,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,aAAa,CAAC;AAG/D,MAAM,WAAW,mBAAmB;IAElC,WAAW,EAAE,MAAM,CAAC;IAMpB,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,mBAAmB,CAAC;IAE1B,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAa7D;AAaD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,mBAAmB,CAYtB"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_ANNOUNCE_PRICE = void 0;
4
+ exports.encodeWriteEnvelope = encodeWriteEnvelope;
5
+ exports.planAnnouncePublish = planAnnouncePublish;
6
+ const http_proxy_handler_1 = require("../core/handlers/http-proxy-handler");
7
+ exports.DEFAULT_ANNOUNCE_PRICE = '1000';
8
+ function encodeWriteEnvelope(event) {
9
+ const body = Buffer.from(JSON.stringify({ event }), 'utf8');
10
+ return (0, http_proxy_handler_1.encodeHttpRequest)({
11
+ method: 'POST',
12
+ target: '/write',
13
+ httpVersion: 'HTTP/1.1',
14
+ headers: [
15
+ ['Host', 'relay'],
16
+ ['Content-Type', 'application/json'],
17
+ ['Content-Length', String(body.length)],
18
+ ],
19
+ body,
20
+ });
21
+ }
22
+ function planAnnouncePublish(args) {
23
+ const data = encodeWriteEnvelope(args.event);
24
+ if (args.isLocallyTerminated) {
25
+ return { destination: args.announceTo, amount: 0n, mode: 'local-free', data };
26
+ }
27
+ const price = args.remotePriceAtomic ?? exports.DEFAULT_ANNOUNCE_PRICE;
28
+ return {
29
+ destination: args.announceTo,
30
+ amount: BigInt(price),
31
+ mode: 'remote-paid',
32
+ data,
33
+ };
34
+ }
35
+ //# sourceMappingURL=self-announce-publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-announce-publish.js","sourceRoot":"","sources":["../../src/discovery/self-announce-publish.ts"],"names":[],"mappings":";;;AA8DA,kDAaC;AAaD,kDAiBC;AAzED,4EAAwE;AAG3D,QAAA,sBAAsB,GAAG,MAAM,CAAC;AA2B7C,SAAgB,mBAAmB,CAAC,KAAiB;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,IAAA,sCAAiB,EAAC;QACvB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE;YACP,CAAC,MAAM,EAAE,OAAO,CAAC;YACjB,CAAC,cAAc,EAAE,kBAAkB,CAAC;YACpC,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACxC;QACD,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAaD,SAAgB,mBAAmB,CAAC,IAKnC;IACC,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,IAAI,8BAAsB,CAAC;IAC/D,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,UAAU;QAC5B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrB,IAAI,EAAE,aAAa;QACnB,IAAI;KACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { Logger } from 'pino';
2
+ import type { NostrEvent } from 'nostr-tools';
3
+ import type { ConnectorConfig, SelfAnnounceConfig } from '../config/types';
4
+ export declare const DEFAULT_REFRESH_INTERVAL_SECS = 300;
5
+ export interface PublishOutcome {
6
+ mode: 'local-free' | 'remote-paid';
7
+ ok: boolean;
8
+ detail?: string;
9
+ }
10
+ export type PublishFn = (event: NostrEvent) => Promise<PublishOutcome>;
11
+ export interface SelfAnnounceServiceDeps {
12
+ config: ConnectorConfig;
13
+ selfAnnounce: SelfAnnounceConfig;
14
+ secretKey: Uint8Array;
15
+ publish: PublishFn;
16
+ logger: Logger;
17
+ }
18
+ export declare class SelfAnnounceService {
19
+ private readonly _config;
20
+ private readonly _selfAnnounce;
21
+ private readonly _secretKey;
22
+ private readonly _publish;
23
+ private readonly _logger;
24
+ private readonly _refreshIntervalSecs;
25
+ private readonly _ttlSeconds;
26
+ private _timer;
27
+ private _running;
28
+ constructor(deps: SelfAnnounceServiceDeps);
29
+ get running(): boolean;
30
+ get ttlSeconds(): number;
31
+ buildEvent(): NostrEvent;
32
+ start(): void;
33
+ stop(): void;
34
+ publish(): Promise<void>;
35
+ }
36
+ //# sourceMappingURL=self-announce-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-announce-service.d.ts","sourceRoot":"","sources":["../../src/discovery/self-announce-service.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAK3E,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAOjD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IACnC,EAAE,EAAE,OAAO,CAAC;IAEZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAEvE,MAAM,WAAW,uBAAuB;IAEtC,MAAM,EAAE,eAAe,CAAC;IAExB,YAAY,EAAE,kBAAkB,CAAC;IAEjC,SAAS,EAAE,UAAU,CAAC;IAEtB,OAAO,EAAE,SAAS,CAAC;IAEnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,EAAE,uBAAuB;IAkBzC,IAAI,OAAO,IAAI,OAAO,CAErB;IAGD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAMD,UAAU,IAAI,UAAU;IAWxB,KAAK,IAAI,IAAI;IAoCb,IAAI,IAAI,IAAI;IAiBN,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD/B"}