@private.me/xbind 3.0.1 → 3.0.2

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 (210) hide show
  1. package/README.md +55 -14
  2. package/dist-standalone/_deps/mldsa-wasm/dist/mldsa.js +1920 -1
  3. package/dist-standalone/_deps/shared/cjs/errors.js +729 -1
  4. package/dist-standalone/_deps/shared/cjs/index.js +463 -1
  5. package/dist-standalone/_deps/shared/cjs/types.js +315 -1
  6. package/dist-standalone/_deps/shared/errors.js +244 -1
  7. package/dist-standalone/_deps/shared/index.js +72 -1
  8. package/dist-standalone/_deps/shared/types.js +86 -1
  9. package/dist-standalone/_deps/ux-helpers/cjs/errors.js +1 -1
  10. package/dist-standalone/_deps/ux-helpers/cjs/index.js +1 -1
  11. package/dist-standalone/_deps/ux-helpers/cjs/pagination.js +1 -1
  12. package/dist-standalone/_deps/ux-helpers/cjs/progress.js +1 -1
  13. package/dist-standalone/_deps/ux-helpers/cjs/search.js +1 -1
  14. package/dist-standalone/_deps/ux-helpers/cjs/types.js +1 -1
  15. package/dist-standalone/_deps/ux-helpers/errors.js +1 -1
  16. package/dist-standalone/_deps/ux-helpers/index.js +1 -1
  17. package/dist-standalone/_deps/ux-helpers/pagination.js +1 -1
  18. package/dist-standalone/_deps/ux-helpers/progress.js +1 -1
  19. package/dist-standalone/_deps/ux-helpers/search.js +1 -1
  20. package/dist-standalone/_deps/xchange/auto-accept.js +1 -1
  21. package/dist-standalone/_deps/xchange/cjs/auto-accept.js +1 -1
  22. package/dist-standalone/_deps/xchange/cjs/errors.js +1 -1
  23. package/dist-standalone/_deps/xchange/cjs/index.js +1 -1
  24. package/dist-standalone/_deps/xchange/cjs/invite-client.js +1 -1
  25. package/dist-standalone/_deps/xchange/cjs/lazy-init.js +1 -1
  26. package/dist-standalone/_deps/xchange/cjs/trust-integration.js +1 -1
  27. package/dist-standalone/_deps/xchange/cjs/xchange.js +1 -1
  28. package/dist-standalone/_deps/xchange/errors.js +1 -1
  29. package/dist-standalone/_deps/xchange/index.js +1 -1
  30. package/dist-standalone/_deps/xchange/invite-client.js +1 -1
  31. package/dist-standalone/_deps/xchange/lazy-init.js +1 -1
  32. package/dist-standalone/_deps/xchange/trust-integration.js +1 -1
  33. package/dist-standalone/_deps/xchange/xchange.js +1 -1
  34. package/dist-standalone/_deps/xregistry/cjs/discovery.js +1 -1
  35. package/dist-standalone/_deps/xregistry/cjs/errors.js +1 -1
  36. package/dist-standalone/_deps/xregistry/cjs/index.js +1 -1
  37. package/dist-standalone/_deps/xregistry/cjs/registry.js +1 -1
  38. package/dist-standalone/_deps/xregistry/cjs/schema.js +1 -1
  39. package/dist-standalone/_deps/xregistry/cjs/types.js +1 -1
  40. package/dist-standalone/_deps/xregistry/discovery.js +1 -1
  41. package/dist-standalone/_deps/xregistry/errors.js +1 -1
  42. package/dist-standalone/_deps/xregistry/index.js +1 -1
  43. package/dist-standalone/_deps/xregistry/registry.js +1 -1
  44. package/dist-standalone/_deps/xregistry/schema.js +1 -1
  45. package/dist-standalone/_deps/xregistry/types.js +1 -1
  46. package/dist-standalone/agent-call.js +659 -1
  47. package/dist-standalone/agent-sdk.js +328 -1
  48. package/dist-standalone/agent.js +1800 -1
  49. package/dist-standalone/approval.js +193 -1
  50. package/dist-standalone/async-iterators.js +382 -1
  51. package/dist-standalone/auth.js +219 -1
  52. package/dist-standalone/auto-accept.js +229 -1
  53. package/dist-standalone/backup-config.js +201 -1
  54. package/dist-standalone/backup.js +326 -1
  55. package/dist-standalone/batch-operations.js +388 -1
  56. package/dist-standalone/cancellation.js +477 -1
  57. package/dist-standalone/checkpoint.js +186 -1
  58. package/dist-standalone/circuit-breaker.js +468 -1
  59. package/dist-standalone/cjs/agent-call.js +701 -1
  60. package/dist-standalone/cjs/agent-sdk.js +332 -1
  61. package/dist-standalone/cjs/agent.js +1837 -1
  62. package/dist-standalone/cjs/approval.js +199 -1
  63. package/dist-standalone/cjs/async-iterators.js +392 -1
  64. package/dist-standalone/cjs/auth.js +225 -1
  65. package/dist-standalone/cjs/auto-accept.js +233 -1
  66. package/dist-standalone/cjs/backup-config.js +207 -1
  67. package/dist-standalone/cjs/backup.js +330 -1
  68. package/dist-standalone/cjs/batch-operations.js +397 -1
  69. package/dist-standalone/cjs/cancellation.js +490 -1
  70. package/dist-standalone/cjs/checkpoint.js +193 -1
  71. package/dist-standalone/cjs/circuit-breaker.js +476 -1
  72. package/dist-standalone/cjs/cli/init.js +492 -1
  73. package/dist-standalone/cjs/config-validation.js +522 -1
  74. package/dist-standalone/cjs/connect.js +312 -1
  75. package/dist-standalone/cjs/connection-pool.js +506 -1
  76. package/dist-standalone/cjs/correlation-id.js +339 -1
  77. package/dist-standalone/cjs/crypto-utils.js +176 -1
  78. package/dist-standalone/cjs/debug-mode.js +534 -1
  79. package/dist-standalone/cjs/did-document.js +101 -1
  80. package/dist-standalone/cjs/did-privateme.js +130 -1
  81. package/dist-standalone/cjs/did-web.js +201 -1
  82. package/dist-standalone/cjs/discovery.js +462 -1
  83. package/dist-standalone/cjs/dual-mode.js +251 -1
  84. package/dist-standalone/cjs/email-templates.js +313 -1
  85. package/dist-standalone/cjs/email-transport.js +239 -1
  86. package/dist-standalone/cjs/envelope.js +538 -1
  87. package/dist-standalone/cjs/errors.js +913 -1
  88. package/dist-standalone/cjs/event-emitter.js +461 -1
  89. package/dist-standalone/cjs/gateway-state.js +55 -1
  90. package/dist-standalone/cjs/gateway-transport.js +120 -1
  91. package/dist-standalone/cjs/graceful-degradation.js +403 -1
  92. package/dist-standalone/cjs/guardrails.js +223 -1
  93. package/dist-standalone/cjs/health-check.js +336 -1
  94. package/dist-standalone/cjs/http-compat.js +272 -1
  95. package/dist-standalone/cjs/http-status-map.js +571 -1
  96. package/dist-standalone/cjs/identity.js +645 -1
  97. package/dist-standalone/cjs/index.js +406 -1
  98. package/dist-standalone/cjs/invitation.js +421 -1
  99. package/dist-standalone/cjs/invite.js +328 -1
  100. package/dist-standalone/cjs/key-agreement.js +335 -1
  101. package/dist-standalone/cjs/lazy-init.js +300 -1
  102. package/dist-standalone/cjs/logger.js +291 -1
  103. package/dist-standalone/cjs/mdns-discovery.js +202 -1
  104. package/dist-standalone/cjs/nonce-store.js +80 -1
  105. package/dist-standalone/cjs/pairing-manager.js +223 -1
  106. package/dist-standalone/cjs/plugin-system.js +264 -1
  107. package/dist-standalone/cjs/plugins/logging.js +168 -1
  108. package/dist-standalone/cjs/plugins/metrics.js +181 -1
  109. package/dist-standalone/cjs/plugins/validation.js +302 -1
  110. package/dist-standalone/cjs/policy.js +320 -1
  111. package/dist-standalone/cjs/progress-callbacks.js +583 -1
  112. package/dist-standalone/cjs/redis-nonce-store.js +76 -1
  113. package/dist-standalone/cjs/registry-middleware.js +50 -1
  114. package/dist-standalone/cjs/retry-strategies.js +544 -1
  115. package/dist-standalone/cjs/retry-transport.js +102 -1
  116. package/dist-standalone/cjs/runtime/browser.js +533 -1
  117. package/dist-standalone/cjs/runtime/edge.js +526 -1
  118. package/dist-standalone/cjs/runtime/react-native.js +394 -1
  119. package/dist-standalone/cjs/security-policy.js +245 -1
  120. package/dist-standalone/cjs/serialization.js +1040 -1
  121. package/dist-standalone/cjs/split-channel.js +225 -1
  122. package/dist-standalone/cjs/subscription-proof.js +230 -1
  123. package/dist-standalone/cjs/succession.js +148 -1
  124. package/dist-standalone/cjs/timeouts.js +412 -1
  125. package/dist-standalone/cjs/trace-context.js +424 -1
  126. package/dist-standalone/cjs/trace-spans.js +495 -1
  127. package/dist-standalone/cjs/transport.js +63 -1
  128. package/dist-standalone/cjs/trust-registry.js +991 -1
  129. package/dist-standalone/cjs/types/error-response.js +56 -1
  130. package/dist-standalone/cjs/vault-auth.js +178 -1
  131. package/dist-standalone/cjs/vault-store-loader.js +194 -1
  132. package/dist-standalone/cjs/verify.js +25 -1
  133. package/dist-standalone/cjs/version-info.js +543 -1
  134. package/dist-standalone/cjs/xfetch.js +340 -1
  135. package/dist-standalone/cli/init.js +455 -1
  136. package/dist-standalone/cli/setup.js +514 -1
  137. package/dist-standalone/cli/types.js +27 -1
  138. package/dist-standalone/cli/xbind.js +148 -1
  139. package/dist-standalone/config-validation.js +513 -1
  140. package/dist-standalone/connect.js +274 -1
  141. package/dist-standalone/connection-pool.js +500 -1
  142. package/dist-standalone/correlation-id.js +326 -1
  143. package/dist-standalone/crypto-utils.js +157 -1
  144. package/dist-standalone/debug-mode.js +510 -1
  145. package/dist-standalone/did-document.js +96 -1
  146. package/dist-standalone/did-privateme.js +121 -1
  147. package/dist-standalone/did-web.js +196 -1
  148. package/dist-standalone/discovery.js +458 -1
  149. package/dist-standalone/dual-mode.js +247 -1
  150. package/dist-standalone/email-templates.js +309 -1
  151. package/dist-standalone/email-transport.js +232 -1
  152. package/dist-standalone/envelope.js +525 -1
  153. package/dist-standalone/errors.js +896 -1
  154. package/dist-standalone/event-emitter.js +456 -1
  155. package/dist-standalone/gateway-state.js +51 -1
  156. package/dist-standalone/gateway-transport.js +116 -1
  157. package/dist-standalone/graceful-degradation.js +396 -1
  158. package/dist-standalone/guardrails.js +216 -1
  159. package/dist-standalone/health-check.js +332 -1
  160. package/dist-standalone/http-compat.js +267 -1
  161. package/dist-standalone/http-status-map.js +561 -1
  162. package/dist-standalone/identity.js +619 -1
  163. package/dist-standalone/index.js +78 -1
  164. package/dist-standalone/invitation.js +415 -1
  165. package/dist-standalone/invite.js +324 -1
  166. package/dist-standalone/key-agreement.js +325 -1
  167. package/dist-standalone/lazy-init.js +295 -1
  168. package/dist-standalone/logger.js +285 -1
  169. package/dist-standalone/mdns-discovery.js +195 -1
  170. package/dist-standalone/nonce-store.js +76 -1
  171. package/dist-standalone/pairing-manager.js +219 -1
  172. package/dist-standalone/plugin-system.js +257 -1
  173. package/dist-standalone/plugins/logging.js +163 -1
  174. package/dist-standalone/plugins/metrics.js +176 -1
  175. package/dist-standalone/plugins/validation.js +297 -1
  176. package/dist-standalone/policy.js +315 -1
  177. package/dist-standalone/progress-callbacks.js +576 -1
  178. package/dist-standalone/redis-nonce-store.js +72 -1
  179. package/dist-standalone/registry-middleware.js +47 -1
  180. package/dist-standalone/retry-strategies.js +534 -1
  181. package/dist-standalone/retry-transport.js +98 -1
  182. package/dist-standalone/runtime/browser.js +516 -1
  183. package/dist-standalone/runtime/edge.js +511 -1
  184. package/dist-standalone/runtime/react-native.js +383 -1
  185. package/dist-standalone/security-policy.js +239 -1
  186. package/dist-standalone/serialization.js +1031 -1
  187. package/dist-standalone/split-channel.js +219 -1
  188. package/dist-standalone/subscription-proof.js +224 -1
  189. package/dist-standalone/succession.js +142 -1
  190. package/dist-standalone/timeouts.js +398 -1
  191. package/dist-standalone/trace-context.js +414 -1
  192. package/dist-standalone/trace-spans.js +488 -1
  193. package/dist-standalone/transport.js +59 -1
  194. package/dist-standalone/trust-registry.js +950 -1
  195. package/dist-standalone/types/error-response.js +52 -1
  196. package/dist-standalone/vault-auth.js +174 -1
  197. package/dist-standalone/vault-store-loader.js +187 -1
  198. package/dist-standalone/verify.js +16 -1
  199. package/dist-standalone/version-info.js +530 -1
  200. package/dist-standalone/xfetch.js +335 -1
  201. package/package.json +4 -13
  202. package/share1.dat +0 -0
  203. package/dist-standalone/_deps/mldsa-wasm/LICENSE +0 -24
  204. package/dist-standalone/_deps/mldsa-wasm/package.json +0 -46
  205. package/dist-standalone/_deps/shared/cjs/package.json +0 -1
  206. package/dist-standalone/_deps/ux-helpers/cjs/package.json +0 -1
  207. package/dist-standalone/_deps/xchange/cjs/package.json +0 -1
  208. package/dist-standalone/_deps/xregistry/cjs/package.json +0 -1
  209. package/dist-standalone/cjs/package.json +0 -3
  210. package/dist-standalone/package.json +0 -10
@@ -1 +1,530 @@
1
- import{createLogger}from"./logger.js";const logger=createLogger("version-info");export var Capability;!function(e){e.ENVELOPE_V1="envelope-v1",e.ENVELOPE_V2="envelope-v2",e.ENVELOPE_V3="envelope-v3",e.ENVELOPE_V4="envelope-v4",e.ML_KEM_768="ml-kem-768",e.ML_DSA_65="ml-dsa-65",e.X25519_ECDH="x25519-ecdh",e.ED25519_SIG="ed25519-sig",e.XORIDA="xorida",e.SPLIT_CHANNEL="split-channel",e.TRUST_REGISTRY="trust-registry",e.SERVICE_DISCOVERY="service-discovery",e.INVITE_SYSTEM="invite-system",e.AGENT_CALL="agent-call",e.XFETCH="xfetch",e.DUAL_MODE="dual-mode",e.BACKUP_RESTORE="backup-restore",e.CORRELATION_ID="correlation-id",e.STRUCTURED_LOGGING="structured-logging",e.DID_SUCCESSION="did-succession",e.GATEWAY_STATE="gateway-state",e.SUBSCRIPTION_PROOF="subscription-proof",e.POLICY_ENGINE="policy-engine",e.APPROVAL_FLOW="approval-flow",e.GUARDRAILS="guardrails",e.HTTP_COMPAT="http-compat",e.DID_WEB="did-web",e.DID_PRIVATEME="did:privateme",e.REDIS_NONCE="redis-nonce",e.RETRY_TRANSPORT="retry-transport"}(Capability||(Capability={}));const VERSION_METADATA={semver:"3.0.0",major:1,minor:4,patch:2,prerelease:void 0,build:void 0,features:[Capability.ENVELOPE_V1,Capability.ENVELOPE_V2,Capability.ENVELOPE_V3,Capability.ENVELOPE_V4,Capability.ML_KEM_768,Capability.ML_DSA_65,Capability.X25519_ECDH,Capability.ED25519_SIG,Capability.XORIDA,Capability.SPLIT_CHANNEL,Capability.TRUST_REGISTRY,Capability.SERVICE_DISCOVERY,Capability.INVITE_SYSTEM,Capability.AGENT_CALL,Capability.XFETCH,Capability.DUAL_MODE,Capability.BACKUP_RESTORE,Capability.CORRELATION_ID,Capability.STRUCTURED_LOGGING,Capability.DID_SUCCESSION,Capability.GATEWAY_STATE,Capability.SUBSCRIPTION_PROOF,Capability.POLICY_ENGINE,Capability.APPROVAL_FLOW,Capability.GUARDRAILS,Capability.HTTP_COMPAT,Capability.DID_WEB,Capability.DID_PRIVATEME,Capability.REDIS_NONCE,Capability.RETRY_TRANSPORT],deprecated:[{name:"envelope-v1",since:"1.2.0",removedIn:"2.0.0",migration:"Use createEnvelopeV2() or higher for split-channel support",docs:"https://private.me/docs/xbind/migration-v2"}],buildDate:(new Date).toISOString(),nodeVersion:process.version};export function getVersion(){return Object.freeze({...VERSION_METADATA})}export function hasCapability(e){return VERSION_METADATA.features.includes(e)}export function getCapabilities(){return Object.freeze([...VERSION_METADATA.features])}export function getDeprecationInfo(e){return VERSION_METADATA.deprecated.find(i=>i.name===e)}const warnedFeatures=new Set;export function warnIfDeprecated(e){if(warnedFeatures.has(e))return;const i=getDeprecationInfo(e);if(!i)return;warnedFeatures.add(e);const r=[`Feature "${e}" is deprecated since v${i.since}`,i.removedIn?`and will be removed in v${i.removedIn}.`:".",i.migration].join(" ");logger.warn(r,{feature:e,deprecatedSince:i.since,removedIn:i.removedIn,docs:i.docs}),"undefined"!=typeof console&&console.warn&&(console.warn(`[xBind] ${r}`),i.docs&&console.warn(`[xBind] See: ${i.docs}`))}export function parseVersion(e){const i=e.match(/^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9.-]+))?(?:\+([a-zA-Z0-9.-]+))?$/);if(!(i&&i[1]&&i[2]&&i[3]))throw new Error(`Invalid semantic version: ${e}`);return{major:parseInt(i[1],10),minor:parseInt(i[2],10),patch:parseInt(i[3],10),prerelease:i[4]||void 0,build:i[5]||void 0}}export function compareVersions(e,i){const r=parseVersion(e),a=parseVersion(i);if(r.major<a.major)return-1;if(r.major>a.major)return 1;if(r.minor<a.minor)return-1;if(r.minor>a.minor)return 1;if(r.patch<a.patch)return-1;if(r.patch>a.patch)return 1;if(r.prerelease&&!a.prerelease)return-1;if(!r.prerelease&&a.prerelease)return 1;if(r.prerelease&&a.prerelease){if(r.prerelease<a.prerelease)return-1;if(r.prerelease>a.prerelease)return 1}return 0}export function checkCompatibility(e){const i=VERSION_METADATA.semver;if(e.startsWith("^")){const r=e.slice(1),a=parseVersion(r);return parseVersion(i).major!==a.major?{compatible:!1,message:`Incompatible major version. Required: ^${r}, Current: ${i}`,severity:"error",required:e,actual:i}:compareVersions(i,r)<0?{compatible:!1,message:`SDK version too old. Required: ^${r}, Current: ${i}`,severity:"error",required:e,actual:i}:{compatible:!0,message:`Compatible (${i} satisfies ^${r})`,severity:"info",required:e,actual:i}}if(e.startsWith("~")){const r=e.slice(1),a=parseVersion(r),t=parseVersion(i);return t.major!==a.major||t.minor!==a.minor?{compatible:!1,message:`Incompatible version. Required: ~${r}, Current: ${i}`,severity:"error",required:e,actual:i}:compareVersions(i,r)<0?{compatible:!1,message:`SDK version too old. Required: ~${r}, Current: ${i}`,severity:"error",required:e,actual:i}:{compatible:!0,message:`Compatible (${i} satisfies ~${r})`,severity:"info",required:e,actual:i}}let r,a,t;try{r=compareVersions(i,e)}catch(r){return{compatible:!1,message:`Invalid version format: ${e}`,severity:"error",required:e,actual:i}}if(0===r)return{compatible:!0,message:`Exact version match (${i})`,severity:"info",required:e,actual:i};if(r<0)return{compatible:!1,message:`SDK version too old. Required: ${e}, Current: ${i}`,severity:"error",required:e,actual:i};try{a=parseVersion(e),t=parseVersion(i)}catch(r){return{compatible:!0,message:`Compatible (${i} is newer than ${e})`,severity:"info",required:e,actual:i}}return t.major>a.major?{compatible:!1,message:`Breaking changes in SDK. Required: ${e}, Current: ${i}`,severity:"warning",required:e,actual:i}:{compatible:!0,message:`Compatible (${i} is newer than ${e})`,severity:"info",required:e,actual:i}}export function getMinimumVersionFor(e){return{[Capability.ENVELOPE_V1]:"1.0.0",[Capability.ENVELOPE_V2]:"1.1.0",[Capability.ENVELOPE_V3]:"1.2.0",[Capability.ENVELOPE_V4]:"1.3.0",[Capability.ML_KEM_768]:"1.2.0",[Capability.ML_DSA_65]:"1.3.0",[Capability.X25519_ECDH]:"1.0.0",[Capability.ED25519_SIG]:"1.0.0",[Capability.XORIDA]:"1.0.0",[Capability.SPLIT_CHANNEL]:"1.1.0",[Capability.TRUST_REGISTRY]:"1.0.0",[Capability.SERVICE_DISCOVERY]:"1.1.0",[Capability.INVITE_SYSTEM]:"1.1.0",[Capability.AGENT_CALL]:"1.0.0",[Capability.XFETCH]:"1.2.0",[Capability.DUAL_MODE]:"1.2.0",[Capability.BACKUP_RESTORE]:"1.3.0",[Capability.CORRELATION_ID]:"1.3.0",[Capability.STRUCTURED_LOGGING]:"1.3.0",[Capability.DID_SUCCESSION]:"1.2.0",[Capability.GATEWAY_STATE]:"1.2.0",[Capability.SUBSCRIPTION_PROOF]:"1.2.0",[Capability.POLICY_ENGINE]:"1.1.0",[Capability.APPROVAL_FLOW]:"1.1.0",[Capability.GUARDRAILS]:"1.2.0",[Capability.HTTP_COMPAT]:"1.2.0",[Capability.DID_WEB]:"1.1.0",[Capability.DID_PRIVATEME]:"1.2.0",[Capability.REDIS_NONCE]:"1.1.0",[Capability.RETRY_TRANSPORT]:"1.1.0"}[e]}export function assertMinimumVersion(e,i){const r=checkCompatibility(e);if(!r.compatible&&"error"===r.severity){const a=i?`${i} requires xBind >= ${e} (current: ${VERSION_METADATA.semver})`:r.message;throw new Error(a)}}
1
+ /**
2
+ * @module version-info
3
+ * Runtime SDK version information and capability detection
4
+ *
5
+ * Provides version metadata, feature flags, deprecation warnings,
6
+ * and compatibility checks for the xBind SDK.
7
+ *
8
+ * Usage:
9
+ * ```typescript
10
+ * import { getVersion, hasCapability, checkCompatibility } from '@private.me/xbind';
11
+ *
12
+ * // Get version information
13
+ * const version = getVersion();
14
+ * console.log(version.semver); // "1.4.0"
15
+ * console.log(version.features); // ["envelope-v4", "ml-kem-768", ...]
16
+ *
17
+ * // Check capabilities
18
+ * if (hasCapability('envelope-v4')) {
19
+ * // Use v4 envelopes
20
+ * }
21
+ *
22
+ * // Compatibility check
23
+ * const compat = checkCompatibility('1.0.0');
24
+ * if (!compat.compatible) {
25
+ * console.warn(compat.message);
26
+ * }
27
+ * ```
28
+ */
29
+ import { createLogger } from './logger.js';
30
+ const logger = createLogger('version-info');
31
+ /**
32
+ * Feature capability flags
33
+ */
34
+ export var Capability;
35
+ (function (Capability) {
36
+ /** Transport Envelope v1 support */
37
+ Capability["ENVELOPE_V1"] = "envelope-v1";
38
+ /** Transport Envelope v2 support (split-channel) */
39
+ Capability["ENVELOPE_V2"] = "envelope-v2";
40
+ /** Transport Envelope v3 support (hybrid PQ) */
41
+ Capability["ENVELOPE_V3"] = "envelope-v3";
42
+ /** Transport Envelope v4 support (ML-DSA signatures) */
43
+ Capability["ENVELOPE_V4"] = "envelope-v4";
44
+ /** ML-KEM-768 post-quantum KEM */
45
+ Capability["ML_KEM_768"] = "ml-kem-768";
46
+ /** ML-DSA-65 post-quantum signatures */
47
+ Capability["ML_DSA_65"] = "ml-dsa-65";
48
+ /** X25519 ECDH key agreement */
49
+ Capability["X25519_ECDH"] = "x25519-ecdh";
50
+ /** Ed25519 signatures */
51
+ Capability["ED25519_SIG"] = "ed25519-sig";
52
+ /** XorIDA threshold sharing */
53
+ Capability["XORIDA"] = "xorida";
54
+ /** Split-channel transport */
55
+ Capability["SPLIT_CHANNEL"] = "split-channel";
56
+ /** Trust registry support */
57
+ Capability["TRUST_REGISTRY"] = "trust-registry";
58
+ /** Service discovery (mDNS) */
59
+ Capability["SERVICE_DISCOVERY"] = "service-discovery";
60
+ /** Invite system (viral growth) */
61
+ Capability["INVITE_SYSTEM"] = "invite-system";
62
+ /** Agent.call() API */
63
+ Capability["AGENT_CALL"] = "agent-call";
64
+ /** xFetch auto-upgrade */
65
+ Capability["XFETCH"] = "xfetch";
66
+ /** Dual-mode adapter (xBind + API key fallback) */
67
+ Capability["DUAL_MODE"] = "dual-mode";
68
+ /** Encrypted backup/restore */
69
+ Capability["BACKUP_RESTORE"] = "backup-restore";
70
+ /** Correlation ID tracing */
71
+ Capability["CORRELATION_ID"] = "correlation-id";
72
+ /** Structured logging */
73
+ Capability["STRUCTURED_LOGGING"] = "structured-logging";
74
+ /** DID succession */
75
+ Capability["DID_SUCCESSION"] = "did-succession";
76
+ /** Gateway connection state */
77
+ Capability["GATEWAY_STATE"] = "gateway-state";
78
+ /** Subscription proofs (portability) */
79
+ Capability["SUBSCRIPTION_PROOF"] = "subscription-proof";
80
+ /** Policy engine (constraints) */
81
+ Capability["POLICY_ENGINE"] = "policy-engine";
82
+ /** Approval flow (consent) */
83
+ Capability["APPROVAL_FLOW"] = "approval-flow";
84
+ /** Guardrails (error suggestions) */
85
+ Capability["GUARDRAILS"] = "guardrails";
86
+ /** HTTP client compatibility (axios, got) */
87
+ Capability["HTTP_COMPAT"] = "http-compat";
88
+ /** did:web resolver */
89
+ Capability["DID_WEB"] = "did-web";
90
+ /** did:privateme method */
91
+ Capability["DID_PRIVATEME"] = "did:privateme";
92
+ /** Redis nonce store */
93
+ Capability["REDIS_NONCE"] = "redis-nonce";
94
+ /** Retry transport */
95
+ Capability["RETRY_TRANSPORT"] = "retry-transport";
96
+ })(Capability || (Capability = {}));
97
+ /**
98
+ * Current version metadata (extracted at build time)
99
+ */
100
+ const VERSION_METADATA = {
101
+ semver: '3.0.0',
102
+ major: 1,
103
+ minor: 4,
104
+ patch: 2,
105
+ prerelease: undefined,
106
+ build: undefined,
107
+ features: [
108
+ Capability.ENVELOPE_V1,
109
+ Capability.ENVELOPE_V2,
110
+ Capability.ENVELOPE_V3,
111
+ Capability.ENVELOPE_V4,
112
+ Capability.ML_KEM_768,
113
+ Capability.ML_DSA_65,
114
+ Capability.X25519_ECDH,
115
+ Capability.ED25519_SIG,
116
+ Capability.XORIDA,
117
+ Capability.SPLIT_CHANNEL,
118
+ Capability.TRUST_REGISTRY,
119
+ Capability.SERVICE_DISCOVERY,
120
+ Capability.INVITE_SYSTEM,
121
+ Capability.AGENT_CALL,
122
+ Capability.XFETCH,
123
+ Capability.DUAL_MODE,
124
+ Capability.BACKUP_RESTORE,
125
+ Capability.CORRELATION_ID,
126
+ Capability.STRUCTURED_LOGGING,
127
+ Capability.DID_SUCCESSION,
128
+ Capability.GATEWAY_STATE,
129
+ Capability.SUBSCRIPTION_PROOF,
130
+ Capability.POLICY_ENGINE,
131
+ Capability.APPROVAL_FLOW,
132
+ Capability.GUARDRAILS,
133
+ Capability.HTTP_COMPAT,
134
+ Capability.DID_WEB,
135
+ Capability.DID_PRIVATEME,
136
+ Capability.REDIS_NONCE,
137
+ Capability.RETRY_TRANSPORT,
138
+ ],
139
+ deprecated: [
140
+ {
141
+ name: 'envelope-v1',
142
+ since: '1.2.0',
143
+ removedIn: '2.0.0',
144
+ migration: 'Use createEnvelopeV2() or higher for split-channel support',
145
+ docs: 'https://private.me/docs/xbind/migration-v2',
146
+ },
147
+ ],
148
+ buildDate: new Date().toISOString(),
149
+ nodeVersion: process.version,
150
+ };
151
+ /**
152
+ * Get SDK version information
153
+ *
154
+ * Returns complete version metadata including semver, capabilities,
155
+ * deprecated features, and build information.
156
+ *
157
+ * @returns Version information object
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const version = getVersion();
162
+ * console.log(`xBind v${version.semver}`);
163
+ * console.log(`Features: ${version.features.join(', ')}`);
164
+ * ```
165
+ */
166
+ export function getVersion() {
167
+ return Object.freeze({ ...VERSION_METADATA });
168
+ }
169
+ /**
170
+ * Check if SDK supports a specific capability
171
+ *
172
+ * @param capability - Capability name to check
173
+ * @returns True if capability is supported
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * if (hasCapability('envelope-v4')) {
178
+ * // Use ML-DSA signatures
179
+ * }
180
+ * ```
181
+ */
182
+ export function hasCapability(capability) {
183
+ return VERSION_METADATA.features.includes(capability);
184
+ }
185
+ /**
186
+ * Get all supported capabilities
187
+ *
188
+ * @returns Array of capability names
189
+ */
190
+ export function getCapabilities() {
191
+ return Object.freeze([...VERSION_METADATA.features]);
192
+ }
193
+ /**
194
+ * Check if a feature is deprecated
195
+ *
196
+ * @param feature - Feature name to check
197
+ * @returns Deprecation info if deprecated, undefined otherwise
198
+ */
199
+ export function getDeprecationInfo(feature) {
200
+ return VERSION_METADATA.deprecated.find((d) => d.name === feature);
201
+ }
202
+ /**
203
+ * Emit deprecation warning if feature is deprecated
204
+ *
205
+ * Logs warning message with migration instructions if the feature
206
+ * is marked as deprecated. Safe to call multiple times (warnings
207
+ * are deduplicated).
208
+ *
209
+ * @param feature - Feature name to check
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * warnIfDeprecated('envelope-v1');
214
+ * // Logs: "Warning: envelope-v1 is deprecated since 1.2.0..."
215
+ * ```
216
+ */
217
+ const warnedFeatures = new Set();
218
+ export function warnIfDeprecated(feature) {
219
+ if (warnedFeatures.has(feature)) {
220
+ return; // Already warned
221
+ }
222
+ const info = getDeprecationInfo(feature);
223
+ if (!info) {
224
+ return; // Not deprecated
225
+ }
226
+ warnedFeatures.add(feature);
227
+ const message = [
228
+ `Feature "${feature}" is deprecated since v${info.since}`,
229
+ info.removedIn ? `and will be removed in v${info.removedIn}.` : '.',
230
+ info.migration,
231
+ ].join(' ');
232
+ logger.warn(message, {
233
+ feature,
234
+ deprecatedSince: info.since,
235
+ removedIn: info.removedIn,
236
+ docs: info.docs,
237
+ });
238
+ // Also log to console for visibility
239
+ // eslint-disable-next-line no-console
240
+ if (typeof console !== 'undefined' && console.warn) {
241
+ // eslint-disable-next-line no-console
242
+ console.warn(`[xBind] ${message}`);
243
+ if (info.docs) {
244
+ // eslint-disable-next-line no-console
245
+ console.warn(`[xBind] See: ${info.docs}`);
246
+ }
247
+ }
248
+ }
249
+ /**
250
+ * Parse semantic version string
251
+ *
252
+ * @param version - Version string (e.g., "1.3.5-beta.1+abc123")
253
+ * @returns Parsed version components
254
+ */
255
+ export function parseVersion(version) {
256
+ // Match semver pattern: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
257
+ const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9.-]+))?(?:\+([a-zA-Z0-9.-]+))?$/);
258
+ if (!match || !match[1] || !match[2] || !match[3]) {
259
+ throw new Error(`Invalid semantic version: ${version}`);
260
+ }
261
+ return {
262
+ major: parseInt(match[1], 10),
263
+ minor: parseInt(match[2], 10),
264
+ patch: parseInt(match[3], 10),
265
+ prerelease: match[4] || undefined,
266
+ build: match[5] || undefined,
267
+ };
268
+ }
269
+ /**
270
+ * Compare two semantic versions
271
+ *
272
+ * @param a - First version
273
+ * @param b - Second version
274
+ * @returns -1 if a < b, 0 if a == b, 1 if a > b
275
+ */
276
+ export function compareVersions(a, b) {
277
+ const parsedA = parseVersion(a);
278
+ const parsedB = parseVersion(b);
279
+ // Compare major
280
+ if (parsedA.major < parsedB.major)
281
+ return -1;
282
+ if (parsedA.major > parsedB.major)
283
+ return 1;
284
+ // Compare minor
285
+ if (parsedA.minor < parsedB.minor)
286
+ return -1;
287
+ if (parsedA.minor > parsedB.minor)
288
+ return 1;
289
+ // Compare patch
290
+ if (parsedA.patch < parsedB.patch)
291
+ return -1;
292
+ if (parsedA.patch > parsedB.patch)
293
+ return 1;
294
+ // Compare prerelease (semver: 1.0.0-alpha < 1.0.0)
295
+ if (parsedA.prerelease && !parsedB.prerelease)
296
+ return -1;
297
+ if (!parsedA.prerelease && parsedB.prerelease)
298
+ return 1;
299
+ if (parsedA.prerelease && parsedB.prerelease) {
300
+ if (parsedA.prerelease < parsedB.prerelease)
301
+ return -1;
302
+ if (parsedA.prerelease > parsedB.prerelease)
303
+ return 1;
304
+ }
305
+ return 0;
306
+ }
307
+ /**
308
+ * Check version compatibility
309
+ *
310
+ * Determines if the current SDK version is compatible with a
311
+ * required version constraint. Follows semantic versioning rules:
312
+ * - Breaking changes increment major version
313
+ * - Minor/patch updates are backward compatible
314
+ *
315
+ * @param requiredVersion - Required version or range (e.g., "1.0.0", "^1.2.0")
316
+ * @returns Compatibility result with message
317
+ *
318
+ * @example
319
+ * ```typescript
320
+ * const compat = checkCompatibility('1.0.0');
321
+ * if (!compat.compatible) {
322
+ * throw new Error(compat.message);
323
+ * }
324
+ * ```
325
+ */
326
+ export function checkCompatibility(requiredVersion) {
327
+ const current = VERSION_METADATA.semver;
328
+ // Handle caret range (^1.2.0 means >=1.2.0 <2.0.0)
329
+ if (requiredVersion.startsWith('^')) {
330
+ const minVersion = requiredVersion.slice(1);
331
+ const minParsed = parseVersion(minVersion);
332
+ const currentParsed = parseVersion(current);
333
+ // Major must match
334
+ if (currentParsed.major !== minParsed.major) {
335
+ return {
336
+ compatible: false,
337
+ message: `Incompatible major version. Required: ^${minVersion}, Current: ${current}`,
338
+ severity: 'error',
339
+ required: requiredVersion,
340
+ actual: current,
341
+ };
342
+ }
343
+ // Current must be >= min version
344
+ if (compareVersions(current, minVersion) < 0) {
345
+ return {
346
+ compatible: false,
347
+ message: `SDK version too old. Required: ^${minVersion}, Current: ${current}`,
348
+ severity: 'error',
349
+ required: requiredVersion,
350
+ actual: current,
351
+ };
352
+ }
353
+ return {
354
+ compatible: true,
355
+ message: `Compatible (${current} satisfies ^${minVersion})`,
356
+ severity: 'info',
357
+ required: requiredVersion,
358
+ actual: current,
359
+ };
360
+ }
361
+ // Handle tilde range (~1.2.0 means >=1.2.0 <1.3.0)
362
+ if (requiredVersion.startsWith('~')) {
363
+ const minVersion = requiredVersion.slice(1);
364
+ const minParsed = parseVersion(minVersion);
365
+ const currentParsed = parseVersion(current);
366
+ // Major and minor must match
367
+ if (currentParsed.major !== minParsed.major ||
368
+ currentParsed.minor !== minParsed.minor) {
369
+ return {
370
+ compatible: false,
371
+ message: `Incompatible version. Required: ~${minVersion}, Current: ${current}`,
372
+ severity: 'error',
373
+ required: requiredVersion,
374
+ actual: current,
375
+ };
376
+ }
377
+ // Current must be >= min version
378
+ if (compareVersions(current, minVersion) < 0) {
379
+ return {
380
+ compatible: false,
381
+ message: `SDK version too old. Required: ~${minVersion}, Current: ${current}`,
382
+ severity: 'error',
383
+ required: requiredVersion,
384
+ actual: current,
385
+ };
386
+ }
387
+ return {
388
+ compatible: true,
389
+ message: `Compatible (${current} satisfies ~${minVersion})`,
390
+ severity: 'info',
391
+ required: requiredVersion,
392
+ actual: current,
393
+ };
394
+ }
395
+ // Exact version match or comparison
396
+ let cmp;
397
+ try {
398
+ cmp = compareVersions(current, requiredVersion);
399
+ }
400
+ catch (error) {
401
+ // Invalid version format
402
+ return {
403
+ compatible: false,
404
+ message: `Invalid version format: ${requiredVersion}`,
405
+ severity: 'error',
406
+ required: requiredVersion,
407
+ actual: current,
408
+ };
409
+ }
410
+ if (cmp === 0) {
411
+ return {
412
+ compatible: true,
413
+ message: `Exact version match (${current})`,
414
+ severity: 'info',
415
+ required: requiredVersion,
416
+ actual: current,
417
+ };
418
+ }
419
+ if (cmp < 0) {
420
+ return {
421
+ compatible: false,
422
+ message: `SDK version too old. Required: ${requiredVersion}, Current: ${current}`,
423
+ severity: 'error',
424
+ required: requiredVersion,
425
+ actual: current,
426
+ };
427
+ }
428
+ // Current version is newer - check major version compatibility
429
+ let requiredParsed;
430
+ let currentParsed;
431
+ try {
432
+ requiredParsed = parseVersion(requiredVersion);
433
+ currentParsed = parseVersion(current);
434
+ }
435
+ catch (error) {
436
+ // Version parsing error, already newer
437
+ return {
438
+ compatible: true,
439
+ message: `Compatible (${current} is newer than ${requiredVersion})`,
440
+ severity: 'info',
441
+ required: requiredVersion,
442
+ actual: current,
443
+ };
444
+ }
445
+ if (currentParsed.major > requiredParsed.major) {
446
+ return {
447
+ compatible: false,
448
+ message: `Breaking changes in SDK. Required: ${requiredVersion}, Current: ${current}`,
449
+ severity: 'warning',
450
+ required: requiredVersion,
451
+ actual: current,
452
+ };
453
+ }
454
+ return {
455
+ compatible: true,
456
+ message: `Compatible (${current} is newer than ${requiredVersion})`,
457
+ severity: 'info',
458
+ required: requiredVersion,
459
+ actual: current,
460
+ };
461
+ }
462
+ /**
463
+ * Get recommended SDK version for a feature
464
+ *
465
+ * Returns the minimum SDK version required to use a specific feature.
466
+ *
467
+ * @param feature - Feature or capability name
468
+ * @returns Minimum version string, or undefined if feature is unknown
469
+ */
470
+ export function getMinimumVersionFor(feature) {
471
+ // Feature introduction versions
472
+ const featureVersions = {
473
+ [Capability.ENVELOPE_V1]: '1.0.0',
474
+ [Capability.ENVELOPE_V2]: '1.1.0',
475
+ [Capability.ENVELOPE_V3]: '1.2.0',
476
+ [Capability.ENVELOPE_V4]: '1.3.0',
477
+ [Capability.ML_KEM_768]: '1.2.0',
478
+ [Capability.ML_DSA_65]: '1.3.0',
479
+ [Capability.X25519_ECDH]: '1.0.0',
480
+ [Capability.ED25519_SIG]: '1.0.0',
481
+ [Capability.XORIDA]: '1.0.0',
482
+ [Capability.SPLIT_CHANNEL]: '1.1.0',
483
+ [Capability.TRUST_REGISTRY]: '1.0.0',
484
+ [Capability.SERVICE_DISCOVERY]: '1.1.0',
485
+ [Capability.INVITE_SYSTEM]: '1.1.0',
486
+ [Capability.AGENT_CALL]: '1.0.0',
487
+ [Capability.XFETCH]: '1.2.0',
488
+ [Capability.DUAL_MODE]: '1.2.0',
489
+ [Capability.BACKUP_RESTORE]: '1.3.0',
490
+ [Capability.CORRELATION_ID]: '1.3.0',
491
+ [Capability.STRUCTURED_LOGGING]: '1.3.0',
492
+ [Capability.DID_SUCCESSION]: '1.2.0',
493
+ [Capability.GATEWAY_STATE]: '1.2.0',
494
+ [Capability.SUBSCRIPTION_PROOF]: '1.2.0',
495
+ [Capability.POLICY_ENGINE]: '1.1.0',
496
+ [Capability.APPROVAL_FLOW]: '1.1.0',
497
+ [Capability.GUARDRAILS]: '1.2.0',
498
+ [Capability.HTTP_COMPAT]: '1.2.0',
499
+ [Capability.DID_WEB]: '1.1.0',
500
+ [Capability.DID_PRIVATEME]: '1.2.0',
501
+ [Capability.REDIS_NONCE]: '1.1.0',
502
+ [Capability.RETRY_TRANSPORT]: '1.1.0',
503
+ };
504
+ return featureVersions[feature];
505
+ }
506
+ /**
507
+ * Assert minimum SDK version
508
+ *
509
+ * Throws an error if the current SDK version does not meet the
510
+ * minimum required version.
511
+ *
512
+ * @param minVersion - Minimum required version
513
+ * @param context - Optional context message
514
+ * @throws Error if version is too old
515
+ *
516
+ * @example
517
+ * ```typescript
518
+ * assertMinimumVersion('1.2.0', 'ML-KEM-768 support');
519
+ * // Throws if SDK < 1.2.0
520
+ * ```
521
+ */
522
+ export function assertMinimumVersion(minVersion, context) {
523
+ const compat = checkCompatibility(minVersion);
524
+ if (!compat.compatible && compat.severity === 'error') {
525
+ const message = context
526
+ ? `${context} requires xBind >= ${minVersion} (current: ${VERSION_METADATA.semver})`
527
+ : compat.message;
528
+ throw new Error(message);
529
+ }
530
+ }