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