@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.
- package/README.md +55 -14
- package/dist-standalone/_deps/mldsa-wasm/dist/mldsa.js +1920 -1
- package/dist-standalone/_deps/shared/cjs/errors.js +729 -1
- package/dist-standalone/_deps/shared/cjs/index.js +463 -1
- package/dist-standalone/_deps/shared/cjs/types.js +315 -1
- package/dist-standalone/_deps/shared/errors.js +244 -1
- package/dist-standalone/_deps/shared/index.js +72 -1
- package/dist-standalone/_deps/shared/types.js +86 -1
- package/dist-standalone/_deps/ux-helpers/cjs/errors.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/index.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/pagination.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/progress.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/search.js +1 -1
- package/dist-standalone/_deps/ux-helpers/cjs/types.js +1 -1
- package/dist-standalone/_deps/ux-helpers/errors.js +1 -1
- package/dist-standalone/_deps/ux-helpers/index.js +1 -1
- package/dist-standalone/_deps/ux-helpers/pagination.js +1 -1
- package/dist-standalone/_deps/ux-helpers/progress.js +1 -1
- package/dist-standalone/_deps/ux-helpers/search.js +1 -1
- package/dist-standalone/_deps/xchange/auto-accept.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/auto-accept.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/errors.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/index.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/invite-client.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/lazy-init.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/trust-integration.js +1 -1
- package/dist-standalone/_deps/xchange/cjs/xchange.js +1 -1
- package/dist-standalone/_deps/xchange/errors.js +1 -1
- package/dist-standalone/_deps/xchange/index.js +1 -1
- package/dist-standalone/_deps/xchange/invite-client.js +1 -1
- package/dist-standalone/_deps/xchange/lazy-init.js +1 -1
- package/dist-standalone/_deps/xchange/trust-integration.js +1 -1
- package/dist-standalone/_deps/xchange/xchange.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/discovery.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/errors.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/index.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/registry.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/schema.js +1 -1
- package/dist-standalone/_deps/xregistry/cjs/types.js +1 -1
- package/dist-standalone/_deps/xregistry/discovery.js +1 -1
- package/dist-standalone/_deps/xregistry/errors.js +1 -1
- package/dist-standalone/_deps/xregistry/index.js +1 -1
- package/dist-standalone/_deps/xregistry/registry.js +1 -1
- package/dist-standalone/_deps/xregistry/schema.js +1 -1
- package/dist-standalone/_deps/xregistry/types.js +1 -1
- package/dist-standalone/agent-call.js +659 -1
- package/dist-standalone/agent-sdk.js +328 -1
- package/dist-standalone/agent.js +1800 -1
- package/dist-standalone/approval.js +193 -1
- package/dist-standalone/async-iterators.js +382 -1
- package/dist-standalone/auth.js +219 -1
- package/dist-standalone/auto-accept.js +229 -1
- package/dist-standalone/backup-config.js +201 -1
- package/dist-standalone/backup.js +326 -1
- package/dist-standalone/batch-operations.js +388 -1
- package/dist-standalone/cancellation.js +477 -1
- package/dist-standalone/checkpoint.js +186 -1
- package/dist-standalone/circuit-breaker.js +468 -1
- package/dist-standalone/cjs/agent-call.js +701 -1
- package/dist-standalone/cjs/agent-sdk.js +332 -1
- package/dist-standalone/cjs/agent.js +1837 -1
- package/dist-standalone/cjs/approval.js +199 -1
- package/dist-standalone/cjs/async-iterators.js +392 -1
- package/dist-standalone/cjs/auth.js +225 -1
- package/dist-standalone/cjs/auto-accept.js +233 -1
- package/dist-standalone/cjs/backup-config.js +207 -1
- package/dist-standalone/cjs/backup.js +330 -1
- package/dist-standalone/cjs/batch-operations.js +397 -1
- package/dist-standalone/cjs/cancellation.js +490 -1
- package/dist-standalone/cjs/checkpoint.js +193 -1
- package/dist-standalone/cjs/circuit-breaker.js +476 -1
- package/dist-standalone/cjs/cli/init.js +492 -1
- package/dist-standalone/cjs/config-validation.js +522 -1
- package/dist-standalone/cjs/connect.js +312 -1
- package/dist-standalone/cjs/connection-pool.js +506 -1
- package/dist-standalone/cjs/correlation-id.js +339 -1
- package/dist-standalone/cjs/crypto-utils.js +176 -1
- package/dist-standalone/cjs/debug-mode.js +534 -1
- package/dist-standalone/cjs/did-document.js +101 -1
- package/dist-standalone/cjs/did-privateme.js +130 -1
- package/dist-standalone/cjs/did-web.js +201 -1
- package/dist-standalone/cjs/discovery.js +462 -1
- package/dist-standalone/cjs/dual-mode.js +251 -1
- package/dist-standalone/cjs/email-templates.js +313 -1
- package/dist-standalone/cjs/email-transport.js +239 -1
- package/dist-standalone/cjs/envelope.js +538 -1
- package/dist-standalone/cjs/errors.js +913 -1
- package/dist-standalone/cjs/event-emitter.js +461 -1
- package/dist-standalone/cjs/gateway-state.js +55 -1
- package/dist-standalone/cjs/gateway-transport.js +120 -1
- package/dist-standalone/cjs/graceful-degradation.js +403 -1
- package/dist-standalone/cjs/guardrails.js +223 -1
- package/dist-standalone/cjs/health-check.js +336 -1
- package/dist-standalone/cjs/http-compat.js +272 -1
- package/dist-standalone/cjs/http-status-map.js +571 -1
- package/dist-standalone/cjs/identity.js +645 -1
- package/dist-standalone/cjs/index.js +406 -1
- package/dist-standalone/cjs/invitation.js +421 -1
- package/dist-standalone/cjs/invite.js +328 -1
- package/dist-standalone/cjs/key-agreement.js +335 -1
- package/dist-standalone/cjs/lazy-init.js +300 -1
- package/dist-standalone/cjs/logger.js +291 -1
- package/dist-standalone/cjs/mdns-discovery.js +202 -1
- package/dist-standalone/cjs/nonce-store.js +80 -1
- package/dist-standalone/cjs/pairing-manager.js +223 -1
- package/dist-standalone/cjs/plugin-system.js +264 -1
- package/dist-standalone/cjs/plugins/logging.js +168 -1
- package/dist-standalone/cjs/plugins/metrics.js +181 -1
- package/dist-standalone/cjs/plugins/validation.js +302 -1
- package/dist-standalone/cjs/policy.js +320 -1
- package/dist-standalone/cjs/progress-callbacks.js +583 -1
- package/dist-standalone/cjs/redis-nonce-store.js +76 -1
- package/dist-standalone/cjs/registry-middleware.js +50 -1
- package/dist-standalone/cjs/retry-strategies.js +544 -1
- package/dist-standalone/cjs/retry-transport.js +102 -1
- package/dist-standalone/cjs/runtime/browser.js +533 -1
- package/dist-standalone/cjs/runtime/edge.js +526 -1
- package/dist-standalone/cjs/runtime/react-native.js +394 -1
- package/dist-standalone/cjs/security-policy.js +245 -1
- package/dist-standalone/cjs/serialization.js +1040 -1
- package/dist-standalone/cjs/split-channel.js +225 -1
- package/dist-standalone/cjs/subscription-proof.js +230 -1
- package/dist-standalone/cjs/succession.js +148 -1
- package/dist-standalone/cjs/timeouts.js +412 -1
- package/dist-standalone/cjs/trace-context.js +424 -1
- package/dist-standalone/cjs/trace-spans.js +495 -1
- package/dist-standalone/cjs/transport.js +63 -1
- package/dist-standalone/cjs/trust-registry.js +991 -1
- package/dist-standalone/cjs/types/error-response.js +56 -1
- package/dist-standalone/cjs/vault-auth.js +178 -1
- package/dist-standalone/cjs/vault-store-loader.js +194 -1
- package/dist-standalone/cjs/verify.js +25 -1
- package/dist-standalone/cjs/version-info.js +543 -1
- package/dist-standalone/cjs/xfetch.js +340 -1
- package/dist-standalone/cli/init.js +455 -1
- package/dist-standalone/cli/setup.js +514 -1
- package/dist-standalone/cli/types.js +27 -1
- package/dist-standalone/cli/xbind.js +148 -1
- package/dist-standalone/config-validation.js +513 -1
- package/dist-standalone/connect.js +274 -1
- package/dist-standalone/connection-pool.js +500 -1
- package/dist-standalone/correlation-id.js +326 -1
- package/dist-standalone/crypto-utils.js +157 -1
- package/dist-standalone/debug-mode.js +510 -1
- package/dist-standalone/did-document.js +96 -1
- package/dist-standalone/did-privateme.js +121 -1
- package/dist-standalone/did-web.js +196 -1
- package/dist-standalone/discovery.js +458 -1
- package/dist-standalone/dual-mode.js +247 -1
- package/dist-standalone/email-templates.js +309 -1
- package/dist-standalone/email-transport.js +232 -1
- package/dist-standalone/envelope.js +525 -1
- package/dist-standalone/errors.js +896 -1
- package/dist-standalone/event-emitter.js +456 -1
- package/dist-standalone/gateway-state.js +51 -1
- package/dist-standalone/gateway-transport.js +116 -1
- package/dist-standalone/graceful-degradation.js +396 -1
- package/dist-standalone/guardrails.js +216 -1
- package/dist-standalone/health-check.js +332 -1
- package/dist-standalone/http-compat.js +267 -1
- package/dist-standalone/http-status-map.js +561 -1
- package/dist-standalone/identity.js +619 -1
- package/dist-standalone/index.js +78 -1
- package/dist-standalone/invitation.js +415 -1
- package/dist-standalone/invite.js +324 -1
- package/dist-standalone/key-agreement.js +325 -1
- package/dist-standalone/lazy-init.js +295 -1
- package/dist-standalone/logger.js +285 -1
- package/dist-standalone/mdns-discovery.js +195 -1
- package/dist-standalone/nonce-store.js +76 -1
- package/dist-standalone/pairing-manager.js +219 -1
- package/dist-standalone/plugin-system.js +257 -1
- package/dist-standalone/plugins/logging.js +163 -1
- package/dist-standalone/plugins/metrics.js +176 -1
- package/dist-standalone/plugins/validation.js +297 -1
- package/dist-standalone/policy.js +315 -1
- package/dist-standalone/progress-callbacks.js +576 -1
- package/dist-standalone/redis-nonce-store.js +72 -1
- package/dist-standalone/registry-middleware.js +47 -1
- package/dist-standalone/retry-strategies.js +534 -1
- package/dist-standalone/retry-transport.js +98 -1
- package/dist-standalone/runtime/browser.js +516 -1
- package/dist-standalone/runtime/edge.js +511 -1
- package/dist-standalone/runtime/react-native.js +383 -1
- package/dist-standalone/security-policy.js +239 -1
- package/dist-standalone/serialization.js +1031 -1
- package/dist-standalone/split-channel.js +219 -1
- package/dist-standalone/subscription-proof.js +224 -1
- package/dist-standalone/succession.js +142 -1
- package/dist-standalone/timeouts.js +398 -1
- package/dist-standalone/trace-context.js +414 -1
- package/dist-standalone/trace-spans.js +488 -1
- package/dist-standalone/transport.js +59 -1
- package/dist-standalone/trust-registry.js +950 -1
- package/dist-standalone/types/error-response.js +52 -1
- package/dist-standalone/vault-auth.js +174 -1
- package/dist-standalone/vault-store-loader.js +187 -1
- package/dist-standalone/verify.js +16 -1
- package/dist-standalone/version-info.js +530 -1
- package/dist-standalone/xfetch.js +335 -1
- package/package.json +4 -13
- package/share1.dat +0 -0
- package/dist-standalone/_deps/mldsa-wasm/LICENSE +0 -24
- package/dist-standalone/_deps/mldsa-wasm/package.json +0 -46
- package/dist-standalone/_deps/shared/cjs/package.json +0 -1
- package/dist-standalone/_deps/ux-helpers/cjs/package.json +0 -1
- package/dist-standalone/_deps/xchange/cjs/package.json +0 -1
- package/dist-standalone/_deps/xregistry/cjs/package.json +0 -1
- package/dist-standalone/cjs/package.json +0 -3
- package/dist-standalone/package.json +0 -10
|
@@ -1 +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
|
+
}
|