@antseed/node 0.2.156 → 0.2.158

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 (179) hide show
  1. package/dist/discovery/announcer.d.ts +16 -1
  2. package/dist/discovery/announcer.d.ts.map +1 -1
  3. package/dist/discovery/announcer.js +69 -9
  4. package/dist/discovery/announcer.js.map +1 -1
  5. package/dist/discovery/http-metadata-resolver.d.ts +1 -1
  6. package/dist/discovery/http-metadata-resolver.d.ts.map +1 -1
  7. package/dist/discovery/http-metadata-resolver.js +7 -1
  8. package/dist/discovery/http-metadata-resolver.js.map +1 -1
  9. package/dist/discovery/index.d.ts +3 -2
  10. package/dist/discovery/index.d.ts.map +1 -1
  11. package/dist/discovery/index.js +2 -1
  12. package/dist/discovery/index.js.map +1 -1
  13. package/dist/discovery/metadata/define-version.d.ts +40 -0
  14. package/dist/discovery/metadata/define-version.d.ts.map +1 -0
  15. package/dist/discovery/metadata/define-version.js +104 -0
  16. package/dist/discovery/metadata/define-version.js.map +1 -0
  17. package/dist/discovery/metadata/field.d.ts +26 -0
  18. package/dist/discovery/metadata/field.d.ts.map +1 -0
  19. package/dist/discovery/metadata/field.js +2 -0
  20. package/dist/discovery/metadata/field.js.map +1 -0
  21. package/dist/discovery/metadata/fields/offerings.d.ts +7 -0
  22. package/dist/discovery/metadata/fields/offerings.d.ts.map +1 -0
  23. package/dist/discovery/metadata/fields/offerings.js +52 -0
  24. package/dist/discovery/metadata/fields/offerings.js.map +1 -0
  25. package/dist/discovery/metadata/fields/on-chain-stats.d.ts +6 -0
  26. package/dist/discovery/metadata/fields/on-chain-stats.d.ts.map +1 -0
  27. package/dist/discovery/metadata/fields/on-chain-stats.js +30 -0
  28. package/dist/discovery/metadata/fields/on-chain-stats.js.map +1 -0
  29. package/dist/discovery/metadata/fields/peer-capabilities.d.ts +4 -0
  30. package/dist/discovery/metadata/fields/peer-capabilities.d.ts.map +1 -0
  31. package/dist/discovery/metadata/fields/peer-capabilities.js +21 -0
  32. package/dist/discovery/metadata/fields/peer-capabilities.js.map +1 -0
  33. package/dist/discovery/metadata/fields/peer-profile.d.ts +11 -0
  34. package/dist/discovery/metadata/fields/peer-profile.d.ts.map +1 -0
  35. package/dist/discovery/metadata/fields/peer-profile.js +58 -0
  36. package/dist/discovery/metadata/fields/peer-profile.js.map +1 -0
  37. package/dist/discovery/metadata/fields/provider-basics.d.ts +12 -0
  38. package/dist/discovery/metadata/fields/provider-basics.d.ts.map +1 -0
  39. package/dist/discovery/metadata/fields/provider-basics.js +87 -0
  40. package/dist/discovery/metadata/fields/provider-basics.js.map +1 -0
  41. package/dist/discovery/metadata/fields/service-api-protocols.d.ts +4 -0
  42. package/dist/discovery/metadata/fields/service-api-protocols.d.ts.map +1 -0
  43. package/dist/discovery/metadata/fields/service-api-protocols.js +40 -0
  44. package/dist/discovery/metadata/fields/service-api-protocols.js.map +1 -0
  45. package/dist/discovery/metadata/fields/service-capabilities.d.ts +7 -0
  46. package/dist/discovery/metadata/fields/service-capabilities.d.ts.map +1 -0
  47. package/dist/discovery/metadata/fields/service-capabilities.js +229 -0
  48. package/dist/discovery/metadata/fields/service-capabilities.js.map +1 -0
  49. package/dist/discovery/metadata/fields/service-categories.d.ts +4 -0
  50. package/dist/discovery/metadata/fields/service-categories.d.ts.map +1 -0
  51. package/dist/discovery/metadata/fields/service-categories.js +37 -0
  52. package/dist/discovery/metadata/fields/service-categories.js.map +1 -0
  53. package/dist/discovery/metadata/fields/service-health.d.ts +7 -0
  54. package/dist/discovery/metadata/fields/service-health.d.ts.map +1 -0
  55. package/dist/discovery/metadata/fields/service-health.js +90 -0
  56. package/dist/discovery/metadata/fields/service-health.js.map +1 -0
  57. package/dist/discovery/metadata/fields/service-performance.d.ts +7 -0
  58. package/dist/discovery/metadata/fields/service-performance.d.ts.map +1 -0
  59. package/dist/discovery/metadata/fields/service-performance.js +63 -0
  60. package/dist/discovery/metadata/fields/service-performance.js.map +1 -0
  61. package/dist/discovery/metadata/fields/service-unit-billing.d.ts +8 -0
  62. package/dist/discovery/metadata/fields/service-unit-billing.d.ts.map +1 -0
  63. package/dist/discovery/metadata/fields/service-unit-billing.js +81 -0
  64. package/dist/discovery/metadata/fields/service-unit-billing.js.map +1 -0
  65. package/dist/discovery/metadata/fields/verifications.d.ts +7 -0
  66. package/dist/discovery/metadata/fields/verifications.d.ts.map +1 -0
  67. package/dist/discovery/metadata/fields/verifications.js +96 -0
  68. package/dist/discovery/metadata/fields/verifications.js.map +1 -0
  69. package/dist/discovery/metadata/index.d.ts +27 -0
  70. package/dist/discovery/metadata/index.d.ts.map +1 -0
  71. package/dist/discovery/metadata/index.js +56 -0
  72. package/dist/discovery/metadata/index.js.map +1 -0
  73. package/dist/discovery/metadata/versions/v10.d.ts +5 -0
  74. package/dist/discovery/metadata/versions/v10.d.ts.map +1 -0
  75. package/dist/discovery/metadata/versions/v10.js +32 -0
  76. package/dist/discovery/metadata/versions/v10.js.map +1 -0
  77. package/dist/discovery/metadata/versions/v11.d.ts +5 -0
  78. package/dist/discovery/metadata/versions/v11.d.ts.map +1 -0
  79. package/dist/discovery/metadata/versions/v11.js +11 -0
  80. package/dist/discovery/metadata/versions/v11.js.map +1 -0
  81. package/dist/discovery/metadata/versions/v12.d.ts +5 -0
  82. package/dist/discovery/metadata/versions/v12.d.ts.map +1 -0
  83. package/dist/discovery/metadata/versions/v12.js +66 -0
  84. package/dist/discovery/metadata/versions/v12.js.map +1 -0
  85. package/dist/discovery/metadata/versions/v13.d.ts +5 -0
  86. package/dist/discovery/metadata/versions/v13.d.ts.map +1 -0
  87. package/dist/discovery/metadata/versions/v13.js +16 -0
  88. package/dist/discovery/metadata/versions/v13.js.map +1 -0
  89. package/dist/discovery/metadata/versions/v14.d.ts +5 -0
  90. package/dist/discovery/metadata/versions/v14.d.ts.map +1 -0
  91. package/dist/discovery/metadata/versions/v14.js +16 -0
  92. package/dist/discovery/metadata/versions/v14.js.map +1 -0
  93. package/dist/discovery/metadata/wire.d.ts +54 -0
  94. package/dist/discovery/metadata/wire.d.ts.map +1 -0
  95. package/dist/discovery/metadata/wire.js +149 -0
  96. package/dist/discovery/metadata/wire.js.map +1 -0
  97. package/dist/discovery/metadata-codec.d.ts +1 -38
  98. package/dist/discovery/metadata-codec.d.ts.map +1 -1
  99. package/dist/discovery/metadata-codec.js +3 -1154
  100. package/dist/discovery/metadata-codec.js.map +1 -1
  101. package/dist/discovery/metadata-server.d.ts +3 -2
  102. package/dist/discovery/metadata-server.d.ts.map +1 -1
  103. package/dist/discovery/metadata-server.js +4 -1
  104. package/dist/discovery/metadata-server.js.map +1 -1
  105. package/dist/discovery/metadata-validator.d.ts.map +1 -1
  106. package/dist/discovery/metadata-validator.js +90 -1
  107. package/dist/discovery/metadata-validator.js.map +1 -1
  108. package/dist/discovery/service-catalog.d.ts +16 -2
  109. package/dist/discovery/service-catalog.d.ts.map +1 -1
  110. package/dist/discovery/service-catalog.js +8 -1
  111. package/dist/discovery/service-catalog.js.map +1 -1
  112. package/dist/health/gas-auto-refuel.d.ts +138 -0
  113. package/dist/health/gas-auto-refuel.d.ts.map +1 -0
  114. package/dist/health/gas-auto-refuel.js +216 -0
  115. package/dist/health/gas-auto-refuel.js.map +1 -0
  116. package/dist/health/gas-health-monitor.d.ts +4 -0
  117. package/dist/health/gas-health-monitor.d.ts.map +1 -1
  118. package/dist/health/gas-health-monitor.js +13 -0
  119. package/dist/health/gas-health-monitor.js.map +1 -1
  120. package/dist/health/model-health-checker.d.ts +67 -33
  121. package/dist/health/model-health-checker.d.ts.map +1 -1
  122. package/dist/health/model-health-checker.js +273 -121
  123. package/dist/health/model-health-checker.js.map +1 -1
  124. package/dist/health/self-health-error.d.ts +20 -0
  125. package/dist/health/self-health-error.d.ts.map +1 -0
  126. package/dist/health/self-health-error.js +60 -0
  127. package/dist/health/self-health-error.js.map +1 -0
  128. package/dist/health/seller-events.d.ts +1 -1
  129. package/dist/health/seller-events.d.ts.map +1 -1
  130. package/dist/health/seller-events.js.map +1 -1
  131. package/dist/health/service-performance.d.ts +28 -0
  132. package/dist/health/service-performance.d.ts.map +1 -0
  133. package/dist/health/service-performance.js +144 -0
  134. package/dist/health/service-performance.js.map +1 -0
  135. package/dist/health/stream-outcome.d.ts +19 -0
  136. package/dist/health/stream-outcome.d.ts.map +1 -0
  137. package/dist/health/stream-outcome.js +91 -0
  138. package/dist/health/stream-outcome.js.map +1 -0
  139. package/dist/index.d.ts +8 -5
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +6 -3
  142. package/dist/index.js.map +1 -1
  143. package/dist/interfaces/seller-provider.d.ts +11 -5
  144. package/dist/interfaces/seller-provider.d.ts.map +1 -1
  145. package/dist/node.d.ts +10 -2
  146. package/dist/node.d.ts.map +1 -1
  147. package/dist/node.js +43 -89
  148. package/dist/node.js.map +1 -1
  149. package/dist/p2p/connection-manager.d.ts +5 -1
  150. package/dist/p2p/connection-manager.d.ts.map +1 -1
  151. package/dist/p2p/connection-manager.js +48 -13
  152. package/dist/p2p/connection-manager.js.map +1 -1
  153. package/dist/payments/chain-config.d.ts +11 -0
  154. package/dist/payments/chain-config.d.ts.map +1 -1
  155. package/dist/payments/chain-config.js +7 -0
  156. package/dist/payments/chain-config.js.map +1 -1
  157. package/dist/payments/evm/usdc-eth-swap-client.d.ts +45 -0
  158. package/dist/payments/evm/usdc-eth-swap-client.d.ts.map +1 -0
  159. package/dist/payments/evm/usdc-eth-swap-client.js +83 -0
  160. package/dist/payments/evm/usdc-eth-swap-client.js.map +1 -0
  161. package/dist/payments/index.d.ts +2 -0
  162. package/dist/payments/index.d.ts.map +1 -1
  163. package/dist/payments/index.js +2 -0
  164. package/dist/payments/index.js.map +1 -1
  165. package/dist/payments/seller-payment-manager.d.ts +50 -0
  166. package/dist/payments/seller-payment-manager.d.ts.map +1 -1
  167. package/dist/payments/seller-payment-manager.js +320 -80
  168. package/dist/payments/seller-payment-manager.js.map +1 -1
  169. package/dist/routing/seller-health.d.ts +21 -0
  170. package/dist/routing/seller-health.d.ts.map +1 -1
  171. package/dist/routing/seller-health.js +19 -3
  172. package/dist/routing/seller-health.js.map +1 -1
  173. package/dist/seller-request-handler.d.ts +14 -0
  174. package/dist/seller-request-handler.d.ts.map +1 -1
  175. package/dist/seller-request-handler.js +207 -30
  176. package/dist/seller-request-handler.js.map +1 -1
  177. package/dist/types/peer.d.ts +6 -2
  178. package/dist/types/peer.d.ts.map +1 -1
  179. package/package.json +3 -3
@@ -0,0 +1,96 @@
1
+ import { compareCodeUnits } from "../wire.js";
2
+ const DOMAIN_VERIFICATION_METHOD_IDS = {
3
+ "dns-txt": 0,
4
+ "https-well-known": 1,
5
+ };
6
+ const DOMAIN_VERIFICATION_METHODS_BY_ID = ["dns-txt", "https-well-known"];
7
+ /**
8
+ * [domainCount:1]([domainLen:1][domain:N][methodCount:1][methodIds...])...
9
+ * [githubCount:1]([usernameLen:1][username:N][repoLen:1][repo:N])... (repoLen 0 = profile repo)
10
+ */
11
+ export const verificationsField = {
12
+ keys: ["verifications"],
13
+ encode(writer, metadata) {
14
+ const claims = (metadata.verifications?.domains ?? [])
15
+ .map((claim) => ({
16
+ domain: claim.domain.trim().toLowerCase(),
17
+ methods: claim.methods
18
+ ? Array.from(new Set(claim.methods.map((method) => method.trim())))
19
+ : undefined,
20
+ }))
21
+ .filter((claim) => claim.domain.length > 0)
22
+ // Code-unit sort: buyers verify signatures by re-encoding decoded
23
+ // metadata, so claim order must not depend on the verifier's locale.
24
+ .sort((a, b) => compareCodeUnits(a.domain, b.domain));
25
+ if (claims.length > 255) {
26
+ throw new Error(`Too many domain verification claims (${claims.length})`);
27
+ }
28
+ writer.u8(claims.length);
29
+ for (const claim of claims) {
30
+ if (new TextEncoder().encode(claim.domain).length > 255) {
31
+ throw new Error(`Domain verification claim too long (${new TextEncoder().encode(claim.domain).length} bytes)`);
32
+ }
33
+ writer.utf8(claim.domain);
34
+ const methods = claim.methods
35
+ ? claim.methods.slice().sort((a, b) => DOMAIN_VERIFICATION_METHOD_IDS[a] - DOMAIN_VERIFICATION_METHOD_IDS[b])
36
+ : [];
37
+ writer.u8(methods.length);
38
+ for (const method of methods) {
39
+ const methodId = DOMAIN_VERIFICATION_METHOD_IDS[method];
40
+ if (methodId === undefined) {
41
+ throw new Error(`Unsupported domain verification method "${method}"`);
42
+ }
43
+ writer.u8(methodId);
44
+ }
45
+ }
46
+ const githubClaims = (metadata.verifications?.github ?? [])
47
+ .map((claim) => ({
48
+ username: claim.username.trim().toLowerCase(),
49
+ repository: claim.repository ? claim.repository.trim().toLowerCase() : "",
50
+ }))
51
+ .filter((claim) => claim.username.length > 0)
52
+ .sort((a, b) => compareCodeUnits(a.username, b.username) || compareCodeUnits(a.repository, b.repository));
53
+ if (githubClaims.length > 255) {
54
+ throw new Error(`Too many GitHub verification claims (${githubClaims.length})`);
55
+ }
56
+ writer.u8(githubClaims.length);
57
+ for (const claim of githubClaims) {
58
+ const encoder = new TextEncoder();
59
+ if (encoder.encode(claim.username).length > 255 || encoder.encode(claim.repository).length > 255) {
60
+ throw new Error("GitHub verification claim too long");
61
+ }
62
+ writer.utf8(claim.username);
63
+ writer.utf8(claim.repository);
64
+ }
65
+ },
66
+ decode(reader, metadata) {
67
+ const domains = [];
68
+ const domainCount = reader.u8();
69
+ for (let i = 0; i < domainCount; i += 1) {
70
+ const domain = reader.utf8();
71
+ const methodCount = reader.u8();
72
+ const methods = [];
73
+ for (let j = 0; j < methodCount; j += 1) {
74
+ const method = DOMAIN_VERIFICATION_METHODS_BY_ID[reader.u8()];
75
+ if (method === undefined)
76
+ throw new Error("Unsupported domain verification method id");
77
+ methods.push(method);
78
+ }
79
+ domains.push({ domain, ...(methods.length > 0 ? { methods } : {}) });
80
+ }
81
+ const github = [];
82
+ const githubCount = reader.u8();
83
+ for (let i = 0; i < githubCount; i += 1) {
84
+ const username = reader.utf8();
85
+ const repository = reader.utf8();
86
+ github.push({ username, ...(repository.length > 0 ? { repository } : {}) });
87
+ }
88
+ if (domains.length > 0 || github.length > 0) {
89
+ metadata.verifications = {
90
+ ...(domains.length > 0 ? { domains } : {}),
91
+ ...(github.length > 0 ? { github } : {}),
92
+ };
93
+ }
94
+ },
95
+ };
96
+ //# sourceMappingURL=verifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifications.js","sourceRoot":"","sources":["../../../../src/discovery/metadata/fields/verifications.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,8BAA8B,GAA6C;IAC/E,SAAS,EAAE,CAAC;IACZ,kBAAkB,EAAE,CAAC;CACtB,CAAC;AACF,MAAM,iCAAiC,GAA+B,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAEtG;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,IAAI,EAAE,CAAC,eAAe,CAAC;IACvB,MAAM,CAAC,MAAM,EAAE,QAAQ;QACrB,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,IAAI,EAAE,CAAC;aACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACzC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACpB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAA8B,CAAC,CAAC,CAAC;gBAC/F,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,kEAAkE;YAClE,qEAAqE;aACpE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;YACjH,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;gBAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC,GAAG,8BAA8B,CAAC,CAAC,CAAC,CAAC;gBAC7G,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;gBACxD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,GAAG,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,EAAE,CAAC;aACxD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YAC7C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;SAC1E,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5G,IAAI,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,wCAAwC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACjG,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,MAAM,CAAC,MAAM,EAAE,QAAQ;QACrB,MAAM,OAAO,GAA8B,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,OAAO,GAA+B,EAAE,CAAC;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,iCAAiC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9D,IAAI,MAAM,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBACvF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,aAAa,GAAG;gBACvB,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzC,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Signed peer metadata codec.
3
+ *
4
+ * Every metadata version lives in its own file under `versions/` and lists
5
+ * the shared field modules from `fields/` it carries, in wire order. To add a
6
+ * version: write the new field module, add `versions/vNN.ts` that extends the
7
+ * previous layout, register it below, and bump METADATA_VERSION. Older
8
+ * versions keep their bytes, so sellers can keep serving them to buyers that
9
+ * have not upgraded (see `negotiateMetadataVersion`).
10
+ */
11
+ import type { PeerMetadata } from "../peer-metadata.js";
12
+ import type { MetadataVersionCodec } from "./define-version.js";
13
+ export type { MetadataVersionCodec } from "./define-version.js";
14
+ export declare function getMetadataCodec(version: number): MetadataVersionCodec;
15
+ /** Versions a seller signs on every refresh, oldest first. */
16
+ export declare const SERVED_METADATA_VERSIONS: readonly number[];
17
+ /**
18
+ * The version a seller should answer with. `requested` is the newest version
19
+ * the buyer understands, from the metadata version request header; buyers
20
+ * that predate the header send nothing and get the legacy version.
21
+ */
22
+ export declare function negotiateMetadataVersion(requested: number | undefined): number;
23
+ /** Signed bytes for `metadata`, laid out by its own `version`. */
24
+ export declare function encodeMetadataForSigning(metadata: PeerMetadata): Uint8Array;
25
+ export declare function encodeMetadata(metadata: PeerMetadata): Uint8Array;
26
+ export declare function decodeMetadata(data: Uint8Array): PeerMetadata;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/discovery/metadata/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAOhE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAUhE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAItE;AAED,8DAA8D;AAC9D,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAG9B,CAAC;AAEzB;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAS9E;AAED,kEAAkE;AAClE,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAE3E;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAOjE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAG7D"}
@@ -0,0 +1,56 @@
1
+ import { LEGACY_METADATA_VERSION, METADATA_VERSION } from "../peer-metadata.js";
2
+ import { hexToBytes } from "../../utils/hex.js";
3
+ import { metadataV10 } from "./versions/v10.js";
4
+ import { metadataV11 } from "./versions/v11.js";
5
+ import { metadataV12 } from "./versions/v12.js";
6
+ import { metadataV13 } from "./versions/v13.js";
7
+ import { metadataV14 } from "./versions/v14.js";
8
+ const CODECS = new Map([metadataV10, metadataV11, metadataV12, metadataV13, metadataV14].map((codec) => [codec.version, codec]));
9
+ if (!CODECS.has(METADATA_VERSION)) {
10
+ throw new Error(`No codec registered for METADATA_VERSION ${METADATA_VERSION}`);
11
+ }
12
+ export function getMetadataCodec(version) {
13
+ const codec = CODECS.get(version);
14
+ if (!codec)
15
+ throw new Error(`Unsupported metadata version ${version}`);
16
+ return codec;
17
+ }
18
+ /** Versions a seller signs on every refresh, oldest first. */
19
+ export const SERVED_METADATA_VERSIONS = [...CODECS.values()]
20
+ .filter((codec) => codec.servable && codec.version <= METADATA_VERSION)
21
+ .map((codec) => codec.version)
22
+ .sort((a, b) => a - b);
23
+ /**
24
+ * The version a seller should answer with. `requested` is the newest version
25
+ * the buyer understands, from the metadata version request header; buyers
26
+ * that predate the header send nothing and get the legacy version.
27
+ */
28
+ export function negotiateMetadataVersion(requested) {
29
+ const ceiling = requested === undefined || !Number.isSafeInteger(requested)
30
+ ? LEGACY_METADATA_VERSION
31
+ : Math.min(requested, METADATA_VERSION);
32
+ let chosen = SERVED_METADATA_VERSIONS[0];
33
+ for (const version of SERVED_METADATA_VERSIONS) {
34
+ if (version <= ceiling)
35
+ chosen = version;
36
+ }
37
+ return chosen;
38
+ }
39
+ /** Signed bytes for `metadata`, laid out by its own `version`. */
40
+ export function encodeMetadataForSigning(metadata) {
41
+ return getMetadataCodec(metadata.version).encodeBody(metadata);
42
+ }
43
+ export function encodeMetadata(metadata) {
44
+ const body = encodeMetadataForSigning(metadata);
45
+ const signature = hexToBytes(metadata.signature);
46
+ const result = new Uint8Array(body.length + signature.length);
47
+ result.set(body, 0);
48
+ result.set(signature, body.length);
49
+ return result;
50
+ }
51
+ export function decodeMetadata(data) {
52
+ if (data.length < 1)
53
+ throw new Error("Truncated metadata buffer");
54
+ return getMetadataCodec(data[0]).decode(data);
55
+ }
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/discovery/metadata/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type MetadataLayout } from "../define-version.js";
2
+ /** v10: peer capabilities. The oldest version buyers accept. Decode-only. */
3
+ export declare const V10_LAYOUT: MetadataLayout;
4
+ export declare const metadataV10: import("../define-version.js").MetadataVersionCodec;
5
+ //# sourceMappingURL=v10.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v10.d.ts","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v10.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAgBlF,6EAA6E;AAC7E,eAAO,MAAM,UAAU,EAAE,cAmBxB,CAAC;AAEF,eAAO,MAAM,WAAW,qDAAkF,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { defineMetadataVersion } from "../define-version.js";
2
+ import { offeringsField } from "../fields/offerings.js";
3
+ import { onChainStatsField } from "../fields/on-chain-stats.js";
4
+ import { peerCapabilitiesField } from "../fields/peer-capabilities.js";
5
+ import { displayNameField, publicAddressField, sellerContractField } from "../fields/peer-profile.js";
6
+ import { defaultPricingField, providerLoadField, providerNameField, servicePricingField, servicesField, } from "../fields/provider-basics.js";
7
+ import { serviceApiProtocolsField } from "../fields/service-api-protocols.js";
8
+ import { serviceCategoriesField } from "../fields/service-categories.js";
9
+ import { verificationsField } from "../fields/verifications.js";
10
+ /** v10: peer capabilities. The oldest version buyers accept. Decode-only. */
11
+ export const V10_LAYOUT = {
12
+ providerFields: [
13
+ providerNameField,
14
+ servicesField,
15
+ defaultPricingField,
16
+ servicePricingField,
17
+ serviceCategoriesField,
18
+ serviceApiProtocolsField,
19
+ providerLoadField,
20
+ ],
21
+ peerFields: [
22
+ displayNameField,
23
+ publicAddressField,
24
+ sellerContractField,
25
+ verificationsField,
26
+ offeringsField,
27
+ onChainStatsField,
28
+ peerCapabilitiesField,
29
+ ],
30
+ };
31
+ export const metadataV10 = defineMetadataVersion({ version: 10, wideServiceCounts: false, ...V10_LAYOUT });
32
+ //# sourceMappingURL=v10.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v10.js","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v10.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAuB,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACtG,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,cAAc,EAAE;QACd,iBAAiB;QACjB,aAAa;QACb,mBAAmB;QACnB,mBAAmB;QACnB,sBAAsB;QACtB,wBAAwB;QACxB,iBAAiB;KAClB;IACD,UAAU,EAAE;QACV,gBAAgB;QAChB,kBAAkB;QAClB,mBAAmB;QACnB,kBAAkB;QAClB,cAAc;QACd,iBAAiB;QACjB,qBAAqB;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type MetadataLayout } from "../define-version.js";
2
+ /** v11: per-service unit billing models. Decode-only. */
3
+ export declare const V11_LAYOUT: MetadataLayout;
4
+ export declare const metadataV11: import("../define-version.js").MetadataVersionCodec;
5
+ //# sourceMappingURL=v11.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v11.d.ts","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v11.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKhG,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,cAGxB,CAAC;AAEF,eAAO,MAAM,WAAW,qDAAkF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { defineMetadataVersion, insertBefore } from "../define-version.js";
2
+ import { providerLoadField } from "../fields/provider-basics.js";
3
+ import { serviceUnitBillingField } from "../fields/service-unit-billing.js";
4
+ import { V10_LAYOUT } from "./v10.js";
5
+ /** v11: per-service unit billing models. Decode-only. */
6
+ export const V11_LAYOUT = {
7
+ providerFields: insertBefore(V10_LAYOUT.providerFields, providerLoadField, serviceUnitBillingField),
8
+ peerFields: V10_LAYOUT.peerFields,
9
+ };
10
+ export const metadataV11 = defineMetadataVersion({ version: 11, wideServiceCounts: false, ...V11_LAYOUT });
11
+ //# sourceMappingURL=v11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v11.js","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v11.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,yDAAyD;AACzD,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,cAAc,EAAE,YAAY,CAAC,UAAU,CAAC,cAAc,EAAE,iBAAiB,EAAE,uBAAuB,CAAC;IACnG,UAAU,EAAE,UAAU,CAAC,UAAU;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type MetadataLayout } from "../define-version.js";
2
+ /** v12: per-service capability hints and u16 service entry counts. */
3
+ export declare const V12_LAYOUT: MetadataLayout;
4
+ export declare const metadataV12: import("../define-version.js").MetadataVersionCodec;
5
+ //# sourceMappingURL=v12.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v12.d.ts","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v12.ts"],"names":[],"mappings":"AACA,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKhG,sEAAsE;AACtE,eAAO,MAAM,UAAU,EAAE,cAGxB,CAAC;AAkDF,eAAO,MAAM,WAAW,qDAKtB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { defineMetadataVersion, insertBefore } from "../define-version.js";
2
+ import { providerLoadField } from "../fields/provider-basics.js";
3
+ import { serviceCapabilitiesField } from "../fields/service-capabilities.js";
4
+ import { V11_LAYOUT } from "./v11.js";
5
+ /** v12: per-service capability hints and u16 service entry counts. */
6
+ export const V12_LAYOUT = {
7
+ providerFields: insertBefore(V11_LAYOUT.providerFields, providerLoadField, serviceCapabilitiesField),
8
+ peerFields: V11_LAYOUT.peerFields,
9
+ };
10
+ /** Per-service maps that must not mention a service missing from `services`. */
11
+ const PER_SERVICE_KEYS = [
12
+ "servicePricing",
13
+ "serviceCategories",
14
+ "serviceApiProtocols",
15
+ "serviceUnitBillingModels",
16
+ "serviceCapabilities",
17
+ ];
18
+ /**
19
+ * v12 has no service health, and v12 buyers would route to anything listed.
20
+ * Failing services are left out instead, which is how sellers withdrew them
21
+ * before v13. A provider whose services are all failing is left out
22
+ * entirely, because an empty service list means "any service".
23
+ */
24
+ function withoutFailingServices(latest) {
25
+ const providers = [];
26
+ for (const provider of latest.providers) {
27
+ const health = provider.serviceHealth;
28
+ if (!health) {
29
+ providers.push(provider);
30
+ continue;
31
+ }
32
+ const failing = new Set(Object.keys(health).filter((service) => health[service]?.status === "failing"));
33
+ if (failing.size === 0) {
34
+ providers.push(provider);
35
+ continue;
36
+ }
37
+ if (provider.services.length === 0) {
38
+ // Wildcard providers cannot drop single services.
39
+ providers.push(provider);
40
+ continue;
41
+ }
42
+ const services = provider.services.filter((service) => !failing.has(service));
43
+ if (services.length === 0)
44
+ continue;
45
+ const next = { ...provider, services };
46
+ for (const key of PER_SERVICE_KEYS) {
47
+ const map = provider[key];
48
+ if (!map)
49
+ continue;
50
+ const kept = Object.fromEntries(Object.entries(map).filter(([service]) => !failing.has(service)));
51
+ if (Object.keys(kept).length > 0)
52
+ next[key] = kept;
53
+ else
54
+ delete next[key];
55
+ }
56
+ providers.push(next);
57
+ }
58
+ return { ...latest, providers };
59
+ }
60
+ export const metadataV12 = defineMetadataVersion({
61
+ version: 12,
62
+ wideServiceCounts: true,
63
+ ...V12_LAYOUT,
64
+ fromLatest: withoutFailingServices,
65
+ });
66
+ //# sourceMappingURL=v12.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v12.js","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v12.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,cAAc,EAAE,YAAY,CAAC,UAAU,CAAC,cAAc,EAAE,iBAAiB,EAAE,wBAAwB,CAAC;IACpG,UAAU,EAAE,UAAU,CAAC,UAAU;CAClC,CAAC;AAEF,gFAAgF;AAChF,MAAM,gBAAgB,GAAG;IACvB,gBAAgB;IAChB,mBAAmB;IACnB,qBAAqB;IACrB,0BAA0B;IAC1B,qBAAqB;CACuC,CAAC;AAE/D;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,MAAoB;IAClD,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;QACxG,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,kDAAkD;YAClD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACpC,MAAM,IAAI,GAAyB,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC7D,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAwC,CAAC;YACjE,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAG,IAA2C,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;gBACtF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;IAC/C,OAAO,EAAE,EAAE;IACX,iBAAiB,EAAE,IAAI;IACvB,GAAG,UAAU;IACb,UAAU,EAAE,sBAAsB;CACnC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type MetadataLayout } from "../define-version.js";
2
+ /** v13: per-service seller self health check results. */
3
+ export declare const V13_LAYOUT: MetadataLayout;
4
+ export declare const metadataV13: import("../define-version.js").MetadataVersionCodec;
5
+ //# sourceMappingURL=v13.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v13.d.ts","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v13.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKhG,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,cAGxB,CAAC;AAEF,eAAO,MAAM,WAAW,qDAKtB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { defineMetadataVersion, insertBefore } from "../define-version.js";
2
+ import { providerLoadField } from "../fields/provider-basics.js";
3
+ import { serviceHealthField } from "../fields/service-health.js";
4
+ import { V12_LAYOUT } from "./v12.js";
5
+ /** v13: per-service seller self health check results. */
6
+ export const V13_LAYOUT = {
7
+ providerFields: insertBefore(V12_LAYOUT.providerFields, providerLoadField, serviceHealthField),
8
+ peerFields: V12_LAYOUT.peerFields,
9
+ };
10
+ export const metadataV13 = defineMetadataVersion({
11
+ version: 13,
12
+ wideServiceCounts: true,
13
+ ...V13_LAYOUT,
14
+ fromLatest: (latest) => latest,
15
+ });
16
+ //# sourceMappingURL=v13.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v13.js","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v13.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,yDAAyD;AACzD,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,cAAc,EAAE,YAAY,CAAC,UAAU,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;IAC9F,UAAU,EAAE,UAAU,CAAC,UAAU;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;IAC/C,OAAO,EAAE,EAAE;IACX,iBAAiB,EAAE,IAAI;IACvB,GAAG,UAAU;IACb,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM;CAC/B,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type MetadataLayout } from "../define-version.js";
2
+ /** v14: per-service performance the seller measured on its buyer traffic. */
3
+ export declare const V14_LAYOUT: MetadataLayout;
4
+ export declare const metadataV14: import("../define-version.js").MetadataVersionCodec;
5
+ //# sourceMappingURL=v14.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v14.d.ts","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v14.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKhG,6EAA6E;AAC7E,eAAO,MAAM,UAAU,EAAE,cAGxB,CAAC;AAEF,eAAO,MAAM,WAAW,qDAKtB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { defineMetadataVersion, insertBefore } from "../define-version.js";
2
+ import { providerLoadField } from "../fields/provider-basics.js";
3
+ import { servicePerformanceField } from "../fields/service-performance.js";
4
+ import { V13_LAYOUT } from "./v13.js";
5
+ /** v14: per-service performance the seller measured on its buyer traffic. */
6
+ export const V14_LAYOUT = {
7
+ providerFields: insertBefore(V13_LAYOUT.providerFields, providerLoadField, servicePerformanceField),
8
+ peerFields: V13_LAYOUT.peerFields,
9
+ };
10
+ export const metadataV14 = defineMetadataVersion({
11
+ version: 14,
12
+ wideServiceCounts: true,
13
+ ...V14_LAYOUT,
14
+ fromLatest: (latest) => latest,
15
+ });
16
+ //# sourceMappingURL=v14.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v14.js","sourceRoot":"","sources":["../../../../src/discovery/metadata/versions/v14.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,cAAc,EAAE,YAAY,CAAC,UAAU,CAAC,cAAc,EAAE,iBAAiB,EAAE,uBAAuB,CAAC;IACnG,UAAU,EAAE,UAAU,CAAC,UAAU;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;IAC/C,OAAO,EAAE,EAAE;IACX,iBAAiB,EAAE,IAAI;IACvB,GAAG,UAAU;IACb,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM;CAC/B,CAAC,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Byte-level helpers shared by every metadata version. All multi-byte values
3
+ * are big-endian.
4
+ */
5
+ export declare const SIGNATURE_LENGTH = 65;
6
+ /**
7
+ * A map for decoded service-keyed entries. It has no prototype, so a service
8
+ * named "__proto__" or "constructor" decodes as an ordinary entry.
9
+ */
10
+ export declare function serviceMap<T>(): Record<string, T>;
11
+ export declare class MetadataWriter {
12
+ private readonly parts;
13
+ u8(value: number): void;
14
+ u16(value: number): void;
15
+ u32(value: number): void;
16
+ u64(value: number): void;
17
+ f32(value: number): void;
18
+ bytes(value: Uint8Array): void;
19
+ /** u8-length-prefixed UTF-8. Throws past 255 bytes. */
20
+ utf8(value: string): void;
21
+ /**
22
+ * u8-length-prefixed UTF-8 whose length byte wraps past 255 instead of
23
+ * throwing. Older fields were written this way; their bytes are signed, so
24
+ * they must stay exactly as they were.
25
+ */
26
+ utf8Wrapping(value: string): void;
27
+ /** u16-length-prefixed UTF-8. */
28
+ utf8Long(value: string): void;
29
+ /** Entry count for a per-service list: u16 when `wide`, u8 otherwise. */
30
+ serviceEntryCount(count: number, wide: boolean): void;
31
+ finish(): Uint8Array;
32
+ }
33
+ export declare class MetadataReader {
34
+ private readonly data;
35
+ private readonly end;
36
+ offset: number;
37
+ /** `end` is the first byte this reader may not read (the signature start). */
38
+ constructor(data: Uint8Array, end: number);
39
+ remaining(): number;
40
+ private need;
41
+ private view;
42
+ u8(): number;
43
+ u16(): number;
44
+ u32(): number;
45
+ u64(): number;
46
+ f32(): number;
47
+ bytes(count: number): Uint8Array;
48
+ utf8(): string;
49
+ utf8Long(): string;
50
+ serviceEntryCount(wide: boolean): number;
51
+ }
52
+ /** Code-unit string order: signed bytes must not depend on the verifier's locale. */
53
+ export declare function compareCodeUnits(a: string, b: string): number;
54
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/discovery/metadata/wire.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAEjD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAE1C,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI9B,uDAAuD;IACvD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASzB;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMjC,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B,yEAAyE;IACzE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAUrD,MAAM,IAAI,UAAU;CAUrB;AAED,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAc,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHnE,MAAM,SAAK;IAEX,8EAA8E;gBACjD,IAAI,EAAE,UAAU,EAAmB,GAAG,EAAE,MAAM;IAE3E,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,IAAI;IAOZ,EAAE,IAAI,MAAM;IAKZ,GAAG,IAAI,MAAM;IAIb,GAAG,IAAI,MAAM;IAIb,GAAG,IAAI,MAAM;IAIb,GAAG,IAAI,MAAM;IAIb,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAOhC,IAAI,IAAI,MAAM;IAId,QAAQ,IAAI,MAAM;IAIlB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;CAGzC;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Byte-level helpers shared by every metadata version. All multi-byte values
3
+ * are big-endian.
4
+ */
5
+ const textEncoder = new TextEncoder();
6
+ const textDecoder = new TextDecoder();
7
+ export const SIGNATURE_LENGTH = 65;
8
+ /**
9
+ * A map for decoded service-keyed entries. It has no prototype, so a service
10
+ * named "__proto__" or "constructor" decodes as an ordinary entry.
11
+ */
12
+ export function serviceMap() {
13
+ return Object.create(null);
14
+ }
15
+ export class MetadataWriter {
16
+ parts = [];
17
+ u8(value) {
18
+ this.parts.push(new Uint8Array([value]));
19
+ }
20
+ u16(value) {
21
+ const buf = new ArrayBuffer(2);
22
+ new DataView(buf).setUint16(0, value, false);
23
+ this.parts.push(new Uint8Array(buf));
24
+ }
25
+ u32(value) {
26
+ const buf = new ArrayBuffer(4);
27
+ new DataView(buf).setUint32(0, value, false);
28
+ this.parts.push(new Uint8Array(buf));
29
+ }
30
+ u64(value) {
31
+ const buf = new ArrayBuffer(8);
32
+ new DataView(buf).setBigUint64(0, BigInt(value), false);
33
+ this.parts.push(new Uint8Array(buf));
34
+ }
35
+ f32(value) {
36
+ const buf = new ArrayBuffer(4);
37
+ new DataView(buf).setFloat32(0, value, false);
38
+ this.parts.push(new Uint8Array(buf));
39
+ }
40
+ bytes(value) {
41
+ this.parts.push(value);
42
+ }
43
+ /** u8-length-prefixed UTF-8. Throws past 255 bytes. */
44
+ utf8(value) {
45
+ const bytes = textEncoder.encode(value);
46
+ if (bytes.length > 255) {
47
+ throw new Error(`Metadata string too long (${bytes.length} bytes)`);
48
+ }
49
+ this.u8(bytes.length);
50
+ this.bytes(bytes);
51
+ }
52
+ /**
53
+ * u8-length-prefixed UTF-8 whose length byte wraps past 255 instead of
54
+ * throwing. Older fields were written this way; their bytes are signed, so
55
+ * they must stay exactly as they were.
56
+ */
57
+ utf8Wrapping(value) {
58
+ const bytes = textEncoder.encode(value);
59
+ this.u8(bytes.length);
60
+ this.bytes(bytes);
61
+ }
62
+ /** u16-length-prefixed UTF-8. */
63
+ utf8Long(value) {
64
+ const bytes = textEncoder.encode(value);
65
+ this.u16(bytes.length);
66
+ this.bytes(bytes);
67
+ }
68
+ /** Entry count for a per-service list: u16 when `wide`, u8 otherwise. */
69
+ serviceEntryCount(count, wide) {
70
+ if (wide) {
71
+ if (count > 0xffff)
72
+ throw new Error(`Service entry count ${count} exceeds uint16`);
73
+ this.u16(count);
74
+ return;
75
+ }
76
+ if (count > 0xff)
77
+ throw new Error(`Service entry count ${count} requires wide service counts`);
78
+ this.u8(count);
79
+ }
80
+ finish() {
81
+ const total = this.parts.reduce((sum, part) => sum + part.length, 0);
82
+ const result = new Uint8Array(total);
83
+ let offset = 0;
84
+ for (const part of this.parts) {
85
+ result.set(part, offset);
86
+ offset += part.length;
87
+ }
88
+ return result;
89
+ }
90
+ }
91
+ export class MetadataReader {
92
+ data;
93
+ end;
94
+ offset = 0;
95
+ /** `end` is the first byte this reader may not read (the signature start). */
96
+ constructor(data, end) {
97
+ this.data = data;
98
+ this.end = end;
99
+ }
100
+ remaining() {
101
+ return this.end - this.offset;
102
+ }
103
+ need(count) {
104
+ if (this.offset + count > this.end)
105
+ throw new Error("Truncated metadata buffer");
106
+ }
107
+ view(count) {
108
+ this.need(count);
109
+ const view = new DataView(this.data.buffer, this.data.byteOffset + this.offset, count);
110
+ this.offset += count;
111
+ return view;
112
+ }
113
+ u8() {
114
+ this.need(1);
115
+ return this.data[this.offset++];
116
+ }
117
+ u16() {
118
+ return this.view(2).getUint16(0, false);
119
+ }
120
+ u32() {
121
+ return this.view(4).getUint32(0, false);
122
+ }
123
+ u64() {
124
+ return Number(this.view(8).getBigUint64(0, false));
125
+ }
126
+ f32() {
127
+ return this.view(4).getFloat32(0, false);
128
+ }
129
+ bytes(count) {
130
+ this.need(count);
131
+ const value = this.data.slice(this.offset, this.offset + count);
132
+ this.offset += count;
133
+ return value;
134
+ }
135
+ utf8() {
136
+ return textDecoder.decode(this.bytes(this.u8()));
137
+ }
138
+ utf8Long() {
139
+ return textDecoder.decode(this.bytes(this.u16()));
140
+ }
141
+ serviceEntryCount(wide) {
142
+ return wide ? this.u16() : this.u8();
143
+ }
144
+ }
145
+ /** Code-unit string order: signed bytes must not depend on the verifier's locale. */
146
+ export function compareCodeUnits(a, b) {
147
+ return a < b ? -1 : a > b ? 1 : 0;
148
+ }
149
+ //# sourceMappingURL=wire.js.map