@private.me/xbind 3.0.2 → 3.0.4

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 (222) hide show
  1. package/README.md +2366 -204
  2. package/dist-standalone/_deps/mldsa-wasm/dist/mldsa.js +1 -1920
  3. package/dist-standalone/_deps/shared/cjs/errors.js +1 -729
  4. package/dist-standalone/_deps/shared/cjs/index.js +1 -463
  5. package/dist-standalone/_deps/shared/cjs/types.js +1 -315
  6. package/dist-standalone/_deps/shared/errors.js +1 -244
  7. package/dist-standalone/_deps/shared/index.js +1 -72
  8. package/dist-standalone/_deps/shared/types.js +1 -86
  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.d.ts +2 -2
  47. package/dist-standalone/agent-call.js +1 -659
  48. package/dist-standalone/agent-sdk.js +1 -328
  49. package/dist-standalone/agent.d.ts +2 -0
  50. package/dist-standalone/agent.js +1 -1800
  51. package/dist-standalone/approval.js +1 -193
  52. package/dist-standalone/async-iterators.d.ts +3 -3
  53. package/dist-standalone/async-iterators.js +1 -382
  54. package/dist-standalone/auth.js +1 -219
  55. package/dist-standalone/auto-accept.js +1 -229
  56. package/dist-standalone/backup-config.js +1 -201
  57. package/dist-standalone/backup.js +1 -326
  58. package/dist-standalone/batch-operations.js +1 -388
  59. package/dist-standalone/cancellation.js +1 -477
  60. package/dist-standalone/checkpoint.js +1 -186
  61. package/dist-standalone/circuit-breaker.js +1 -468
  62. package/dist-standalone/cjs/agent-call.js +1 -701
  63. package/dist-standalone/cjs/agent-sdk.js +1 -332
  64. package/dist-standalone/cjs/agent.js +1 -1837
  65. package/dist-standalone/cjs/approval.js +1 -199
  66. package/dist-standalone/cjs/async-iterators.js +1 -392
  67. package/dist-standalone/cjs/auth.js +1 -225
  68. package/dist-standalone/cjs/auto-accept.js +1 -233
  69. package/dist-standalone/cjs/backup-config.js +1 -207
  70. package/dist-standalone/cjs/backup.js +1 -330
  71. package/dist-standalone/cjs/batch-operations.js +1 -397
  72. package/dist-standalone/cjs/cancellation.js +1 -490
  73. package/dist-standalone/cjs/checkpoint.js +1 -193
  74. package/dist-standalone/cjs/circuit-breaker.js +1 -476
  75. package/dist-standalone/cjs/cli/init.js +1 -492
  76. package/dist-standalone/cjs/config-validation.js +1 -522
  77. package/dist-standalone/cjs/connect.js +1 -312
  78. package/dist-standalone/cjs/connection-pool.js +1 -506
  79. package/dist-standalone/cjs/correlation-id.js +1 -339
  80. package/dist-standalone/cjs/crypto-utils.js +1 -176
  81. package/dist-standalone/cjs/debug-mode.js +1 -534
  82. package/dist-standalone/cjs/did-document.js +1 -101
  83. package/dist-standalone/cjs/did-privateme.js +1 -130
  84. package/dist-standalone/cjs/did-web.js +1 -201
  85. package/dist-standalone/cjs/discovery.js +1 -462
  86. package/dist-standalone/cjs/dual-mode.js +1 -251
  87. package/dist-standalone/cjs/email-templates.js +1 -313
  88. package/dist-standalone/cjs/email-transport.js +1 -239
  89. package/dist-standalone/cjs/envelope.js +1 -538
  90. package/dist-standalone/cjs/errors.js +1 -913
  91. package/dist-standalone/cjs/event-emitter.js +1 -461
  92. package/dist-standalone/cjs/gateway-state.js +1 -55
  93. package/dist-standalone/cjs/gateway-transport.js +1 -120
  94. package/dist-standalone/cjs/graceful-degradation.js +1 -403
  95. package/dist-standalone/cjs/guardrails.js +1 -223
  96. package/dist-standalone/cjs/health-check.js +1 -336
  97. package/dist-standalone/cjs/http-compat.js +1 -272
  98. package/dist-standalone/cjs/http-status-map.js +1 -571
  99. package/dist-standalone/cjs/identity.js +1 -645
  100. package/dist-standalone/cjs/index.js +1 -406
  101. package/dist-standalone/cjs/invitation.js +1 -421
  102. package/dist-standalone/cjs/invite.js +1 -328
  103. package/dist-standalone/cjs/key-agreement.js +1 -335
  104. package/dist-standalone/cjs/lazy-init.js +1 -300
  105. package/dist-standalone/cjs/logger.js +1 -291
  106. package/dist-standalone/cjs/loopback-transport.js +1 -0
  107. package/dist-standalone/cjs/mdns-discovery.js +1 -202
  108. package/dist-standalone/cjs/nonce-store.js +1 -80
  109. package/dist-standalone/cjs/pairing-manager.js +1 -223
  110. package/dist-standalone/cjs/plugin-system.js +1 -264
  111. package/dist-standalone/cjs/plugins/logging.js +1 -168
  112. package/dist-standalone/cjs/plugins/metrics.js +1 -181
  113. package/dist-standalone/cjs/plugins/validation.js +1 -302
  114. package/dist-standalone/cjs/policy.js +1 -320
  115. package/dist-standalone/cjs/progress-callbacks.js +1 -583
  116. package/dist-standalone/cjs/redis-nonce-store.js +1 -76
  117. package/dist-standalone/cjs/registry-middleware.js +1 -50
  118. package/dist-standalone/cjs/retry-strategies.js +1 -544
  119. package/dist-standalone/cjs/retry-transport.js +1 -102
  120. package/dist-standalone/cjs/runtime/browser.js +1 -533
  121. package/dist-standalone/cjs/runtime/edge.js +1 -526
  122. package/dist-standalone/cjs/runtime/react-native.js +1 -394
  123. package/dist-standalone/cjs/security-policy.js +1 -245
  124. package/dist-standalone/cjs/serialization.js +1 -1040
  125. package/dist-standalone/cjs/split-channel.js +1 -225
  126. package/dist-standalone/cjs/subscription-proof.js +1 -230
  127. package/dist-standalone/cjs/succession.js +1 -148
  128. package/dist-standalone/cjs/timeouts.js +1 -412
  129. package/dist-standalone/cjs/trace-context.js +1 -424
  130. package/dist-standalone/cjs/trace-spans.js +1 -495
  131. package/dist-standalone/cjs/transport.js +1 -63
  132. package/dist-standalone/cjs/trust-registry.js +1 -991
  133. package/dist-standalone/cjs/types/error-response.js +1 -56
  134. package/dist-standalone/cjs/vault-auth.js +1 -178
  135. package/dist-standalone/cjs/vault-store-loader.js +1 -194
  136. package/dist-standalone/cjs/verify.js +1 -25
  137. package/dist-standalone/cjs/version-info.js +1 -543
  138. package/dist-standalone/cjs/xfetch.js +1 -340
  139. package/dist-standalone/cli/init.js +1 -455
  140. package/dist-standalone/cli/setup.js +1 -514
  141. package/dist-standalone/cli/types.js +1 -27
  142. package/dist-standalone/cli/xbind.js +1 -148
  143. package/dist-standalone/config-validation.js +1 -513
  144. package/dist-standalone/connect.js +1 -274
  145. package/dist-standalone/connection-pool.js +1 -500
  146. package/dist-standalone/correlation-id.js +1 -326
  147. package/dist-standalone/crypto-utils.d.ts +2 -7
  148. package/dist-standalone/crypto-utils.js +1 -157
  149. package/dist-standalone/debug-mode.js +1 -510
  150. package/dist-standalone/did-document.js +1 -96
  151. package/dist-standalone/did-privateme.js +1 -121
  152. package/dist-standalone/did-web.js +1 -196
  153. package/dist-standalone/discovery.js +1 -458
  154. package/dist-standalone/dual-mode.js +1 -247
  155. package/dist-standalone/email-templates.js +1 -309
  156. package/dist-standalone/email-transport.d.ts +2 -2
  157. package/dist-standalone/email-transport.js +1 -232
  158. package/dist-standalone/envelope.js +1 -525
  159. package/dist-standalone/errors.d.ts +13 -3
  160. package/dist-standalone/errors.js +1 -896
  161. package/dist-standalone/event-emitter.js +1 -456
  162. package/dist-standalone/gateway-state.d.ts +1 -1
  163. package/dist-standalone/gateway-state.js +1 -51
  164. package/dist-standalone/gateway-transport.js +1 -116
  165. package/dist-standalone/graceful-degradation.js +1 -396
  166. package/dist-standalone/guardrails.js +1 -216
  167. package/dist-standalone/health-check.d.ts +5 -1
  168. package/dist-standalone/health-check.js +1 -332
  169. package/dist-standalone/http-compat.d.ts +1 -1
  170. package/dist-standalone/http-compat.js +1 -267
  171. package/dist-standalone/http-status-map.js +1 -561
  172. package/dist-standalone/identity.js +1 -619
  173. package/dist-standalone/index.d.ts +15 -4
  174. package/dist-standalone/index.js +1 -78
  175. package/dist-standalone/invitation.js +1 -415
  176. package/dist-standalone/invite.js +1 -324
  177. package/dist-standalone/key-agreement.js +1 -325
  178. package/dist-standalone/lazy-init.d.ts +11 -6
  179. package/dist-standalone/lazy-init.js +1 -295
  180. package/dist-standalone/logger.js +1 -285
  181. package/dist-standalone/loopback-transport.d.ts +87 -0
  182. package/dist-standalone/loopback-transport.js +1 -0
  183. package/dist-standalone/mdns-discovery.js +1 -195
  184. package/dist-standalone/nonce-store.js +1 -76
  185. package/dist-standalone/pairing-manager.js +1 -219
  186. package/dist-standalone/plugin-system.js +1 -257
  187. package/dist-standalone/plugins/logging.js +1 -163
  188. package/dist-standalone/plugins/metrics.d.ts +4 -4
  189. package/dist-standalone/plugins/metrics.js +1 -176
  190. package/dist-standalone/plugins/validation.js +1 -297
  191. package/dist-standalone/policy.js +1 -315
  192. package/dist-standalone/progress-callbacks.js +1 -576
  193. package/dist-standalone/redis-nonce-store.js +1 -72
  194. package/dist-standalone/registry-middleware.js +1 -47
  195. package/dist-standalone/retry-strategies.js +1 -534
  196. package/dist-standalone/retry-transport.js +1 -98
  197. package/dist-standalone/runtime/browser.js +1 -516
  198. package/dist-standalone/runtime/edge.js +1 -511
  199. package/dist-standalone/runtime/react-native.d.ts +1 -1
  200. package/dist-standalone/runtime/react-native.js +1 -383
  201. package/dist-standalone/security-policy.js +1 -239
  202. package/dist-standalone/serialization.js +1 -1031
  203. package/dist-standalone/split-channel.d.ts +1 -1
  204. package/dist-standalone/split-channel.js +1 -219
  205. package/dist-standalone/subscription-proof.js +1 -224
  206. package/dist-standalone/succession.js +1 -142
  207. package/dist-standalone/timeouts.js +1 -398
  208. package/dist-standalone/trace-context.js +1 -414
  209. package/dist-standalone/trace-spans.js +1 -488
  210. package/dist-standalone/transport.d.ts +1 -1
  211. package/dist-standalone/transport.js +1 -59
  212. package/dist-standalone/trust-registry.d.ts +3 -3
  213. package/dist-standalone/trust-registry.js +1 -950
  214. package/dist-standalone/types/error-response.js +1 -52
  215. package/dist-standalone/vault-auth.js +1 -174
  216. package/dist-standalone/vault-store-loader.d.ts +9 -0
  217. package/dist-standalone/vault-store-loader.js +1 -187
  218. package/dist-standalone/verify.js +1 -16
  219. package/dist-standalone/version-info.js +1 -530
  220. package/dist-standalone/xfetch.js +1 -335
  221. package/package.json +1 -1
  222. package/share1.dat +0 -0
@@ -1,530 +1 @@
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
- }
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.3",major:3,minor:0,patch:3,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{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{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)}}