@vib3code/sdk 2.0.1
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/CHANGELOG.md +118 -0
- package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
- package/DOCS/CI_TESTING.md +38 -0
- package/DOCS/CLI_ONBOARDING.md +75 -0
- package/DOCS/CONTROL_REFERENCE.md +64 -0
- package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
- package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
- package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
- package/DOCS/ENV_SETUP.md +189 -0
- package/DOCS/EXPORT_FORMATS.md +417 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
- package/DOCS/LICENSING_TIERS.md +275 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
- package/DOCS/OBS_SETUP_GUIDE.md +98 -0
- package/DOCS/PROJECT_SETUP.md +66 -0
- package/DOCS/RENDERER_LIFECYCLE.md +40 -0
- package/DOCS/REPO_MANIFEST.md +121 -0
- package/DOCS/SESSION_014_PLAN.md +195 -0
- package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
- package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
- package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
- package/DOCS/SYSTEM_INVENTORY.md +520 -0
- package/DOCS/TELEMETRY_EXPORTS.md +34 -0
- package/DOCS/WEBGPU_STATUS.md +38 -0
- package/DOCS/XR_BENCHMARKS.md +608 -0
- package/LICENSE +21 -0
- package/README.md +426 -0
- package/docs/.nojekyll +0 -0
- package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/02-hyperspatial_ego_death.html +346 -0
- package/docs/03-post_cartesian_sublime.html +346 -0
- package/docs/04-crystalline_void_meditation.html +346 -0
- package/docs/05-quantum_decoherence_ballet.html +346 -0
- package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/07-hyperspatial_ego_death.html +346 -0
- package/docs/08-post_cartesian_sublime.html +346 -0
- package/docs/09-crystalline_void_meditation.html +346 -0
- package/docs/10-quantum_decoherence_ballet.html +346 -0
- package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/12-hyperspatial_ego_death.html +346 -0
- package/docs/13-post_cartesian_sublime.html +346 -0
- package/docs/index.html +794 -0
- package/docs/test-hub.html +441 -0
- package/docs/url-state.js +102 -0
- package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
- package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
- package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
- package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
- package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
- package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
- package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
- package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
- package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
- package/docs/vib3-exports/index.html +238 -0
- package/docs/webgpu-live.html +702 -0
- package/package.json +367 -0
- package/src/advanced/AIPresetGenerator.js +777 -0
- package/src/advanced/MIDIController.js +703 -0
- package/src/advanced/OffscreenWorker.js +1051 -0
- package/src/advanced/WebGPUCompute.js +1051 -0
- package/src/advanced/WebXRRenderer.js +680 -0
- package/src/agent/cli/AgentCLI.js +615 -0
- package/src/agent/cli/index.js +14 -0
- package/src/agent/index.js +73 -0
- package/src/agent/mcp/MCPServer.js +950 -0
- package/src/agent/mcp/index.js +9 -0
- package/src/agent/mcp/tools.js +548 -0
- package/src/agent/telemetry/EventStream.js +669 -0
- package/src/agent/telemetry/Instrumentation.js +618 -0
- package/src/agent/telemetry/TelemetryExporters.js +427 -0
- package/src/agent/telemetry/TelemetryService.js +464 -0
- package/src/agent/telemetry/index.js +52 -0
- package/src/benchmarks/BenchmarkRunner.js +381 -0
- package/src/benchmarks/MetricsCollector.js +299 -0
- package/src/benchmarks/index.js +9 -0
- package/src/benchmarks/scenes.js +259 -0
- package/src/cli/index.js +675 -0
- package/src/config/ApiConfig.js +88 -0
- package/src/core/CanvasManager.js +217 -0
- package/src/core/ErrorReporter.js +117 -0
- package/src/core/ParameterMapper.js +333 -0
- package/src/core/Parameters.js +396 -0
- package/src/core/RendererContracts.js +200 -0
- package/src/core/UnifiedResourceManager.js +370 -0
- package/src/core/VIB3Engine.js +636 -0
- package/src/core/renderers/FacetedRendererAdapter.js +32 -0
- package/src/core/renderers/HolographicRendererAdapter.js +29 -0
- package/src/core/renderers/QuantumRendererAdapter.js +29 -0
- package/src/core/renderers/RendererLifecycleManager.js +63 -0
- package/src/creative/ColorPresetsSystem.js +980 -0
- package/src/creative/ParameterTimeline.js +1061 -0
- package/src/creative/PostProcessingPipeline.js +1113 -0
- package/src/creative/TransitionAnimator.js +683 -0
- package/src/export/CSSExporter.js +226 -0
- package/src/export/CardGeneratorBase.js +279 -0
- package/src/export/ExportManager.js +580 -0
- package/src/export/FacetedCardGenerator.js +279 -0
- package/src/export/HolographicCardGenerator.js +543 -0
- package/src/export/LottieExporter.js +552 -0
- package/src/export/QuantumCardGenerator.js +315 -0
- package/src/export/SVGExporter.js +519 -0
- package/src/export/ShaderExporter.js +903 -0
- package/src/export/TradingCardGenerator.js +3055 -0
- package/src/export/TradingCardManager.js +181 -0
- package/src/export/VIB3PackageExporter.js +559 -0
- package/src/export/index.js +14 -0
- package/src/export/systems/TradingCardSystemFaceted.js +494 -0
- package/src/export/systems/TradingCardSystemHolographic.js +452 -0
- package/src/export/systems/TradingCardSystemQuantum.js +411 -0
- package/src/faceted/FacetedSystem.js +963 -0
- package/src/features/CollectionManager.js +433 -0
- package/src/gallery/CollectionManager.js +240 -0
- package/src/gallery/GallerySystem.js +485 -0
- package/src/geometry/GeometryFactory.js +314 -0
- package/src/geometry/GeometryLibrary.js +72 -0
- package/src/geometry/buffers/BufferBuilder.js +338 -0
- package/src/geometry/buffers/index.js +18 -0
- package/src/geometry/generators/Crystal.js +420 -0
- package/src/geometry/generators/Fractal.js +298 -0
- package/src/geometry/generators/KleinBottle.js +197 -0
- package/src/geometry/generators/Sphere.js +192 -0
- package/src/geometry/generators/Tesseract.js +160 -0
- package/src/geometry/generators/Tetrahedron.js +225 -0
- package/src/geometry/generators/Torus.js +304 -0
- package/src/geometry/generators/Wave.js +341 -0
- package/src/geometry/index.js +142 -0
- package/src/geometry/warp/HypersphereCore.js +211 -0
- package/src/geometry/warp/HypertetraCore.js +386 -0
- package/src/geometry/warp/index.js +57 -0
- package/src/holograms/HolographicVisualizer.js +1073 -0
- package/src/holograms/RealHolographicSystem.js +966 -0
- package/src/holograms/variantRegistry.js +69 -0
- package/src/integrations/FigmaPlugin.js +854 -0
- package/src/integrations/OBSMode.js +754 -0
- package/src/integrations/ThreeJsPackage.js +660 -0
- package/src/integrations/TouchDesignerExport.js +552 -0
- package/src/integrations/frameworks/Vib3React.js +591 -0
- package/src/integrations/frameworks/Vib3Svelte.js +654 -0
- package/src/integrations/frameworks/Vib3Vue.js +628 -0
- package/src/llm/LLMParameterInterface.js +240 -0
- package/src/llm/LLMParameterUI.js +577 -0
- package/src/math/Mat4x4.js +708 -0
- package/src/math/Projection.js +341 -0
- package/src/math/Rotor4D.js +637 -0
- package/src/math/Vec4.js +476 -0
- package/src/math/constants.js +164 -0
- package/src/math/index.js +68 -0
- package/src/math/projections.js +54 -0
- package/src/math/rotations.js +196 -0
- package/src/quantum/QuantumEngine.js +906 -0
- package/src/quantum/QuantumVisualizer.js +1103 -0
- package/src/reactivity/ReactivityConfig.js +499 -0
- package/src/reactivity/ReactivityManager.js +586 -0
- package/src/reactivity/SpatialInputSystem.js +1783 -0
- package/src/reactivity/index.js +93 -0
- package/src/render/CommandBuffer.js +465 -0
- package/src/render/MultiCanvasBridge.js +340 -0
- package/src/render/RenderCommand.js +514 -0
- package/src/render/RenderResourceRegistry.js +523 -0
- package/src/render/RenderState.js +552 -0
- package/src/render/RenderTarget.js +512 -0
- package/src/render/ShaderLoader.js +253 -0
- package/src/render/ShaderProgram.js +599 -0
- package/src/render/UnifiedRenderBridge.js +496 -0
- package/src/render/backends/WebGLBackend.js +1108 -0
- package/src/render/backends/WebGPUBackend.js +1409 -0
- package/src/render/commands/CommandBufferExecutor.js +607 -0
- package/src/render/commands/RenderCommandBuffer.js +661 -0
- package/src/render/commands/index.js +17 -0
- package/src/render/index.js +367 -0
- package/src/scene/Disposable.js +498 -0
- package/src/scene/MemoryPool.js +618 -0
- package/src/scene/Node4D.js +697 -0
- package/src/scene/ResourceManager.js +599 -0
- package/src/scene/Scene4D.js +540 -0
- package/src/scene/index.js +98 -0
- package/src/schemas/error.schema.json +84 -0
- package/src/schemas/extension.schema.json +88 -0
- package/src/schemas/index.js +214 -0
- package/src/schemas/parameters.schema.json +142 -0
- package/src/schemas/tool-pack.schema.json +44 -0
- package/src/schemas/tool-response.schema.json +127 -0
- package/src/shaders/common/fullscreen.vert.glsl +5 -0
- package/src/shaders/common/fullscreen.vert.wgsl +17 -0
- package/src/shaders/common/geometry24.glsl +65 -0
- package/src/shaders/common/geometry24.wgsl +54 -0
- package/src/shaders/common/rotation4d.glsl +85 -0
- package/src/shaders/common/rotation4d.wgsl +86 -0
- package/src/shaders/common/uniforms.glsl +44 -0
- package/src/shaders/common/uniforms.wgsl +48 -0
- package/src/shaders/faceted/faceted.frag.glsl +129 -0
- package/src/shaders/faceted/faceted.frag.wgsl +164 -0
- package/src/shaders/holographic/holographic.frag.glsl +406 -0
- package/src/shaders/holographic/holographic.frag.wgsl +185 -0
- package/src/shaders/quantum/quantum.frag.glsl +513 -0
- package/src/shaders/quantum/quantum.frag.wgsl +361 -0
- package/src/testing/ParallelTestFramework.js +519 -0
- package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
- package/src/testing/exportFormats.test.js +8 -0
- package/src/testing/projections.test.js +14 -0
- package/src/testing/rotations.test.js +37 -0
- package/src/ui/InteractivityMenu.js +516 -0
- package/src/ui/StatusManager.js +96 -0
- package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
- package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
- package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
- package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
- package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
- package/src/variations/VariationManager.js +431 -0
- package/src/viewer/AudioReactivity.js +505 -0
- package/src/viewer/CardBending.js +481 -0
- package/src/viewer/GalleryUI.js +832 -0
- package/src/viewer/ReactivityManager.js +590 -0
- package/src/viewer/TradingCardExporter.js +600 -0
- package/src/viewer/ViewerPortal.js +374 -0
- package/src/viewer/index.js +12 -0
- package/src/wasm/WasmLoader.js +296 -0
- package/src/wasm/index.js +132 -0
- package/tools/agentic/mcpTools.js +88 -0
- package/tools/cli/agent-cli.js +92 -0
- package/tools/export/formats.js +24 -0
- package/tools/math/rotation-baseline.mjs +64 -0
- package/tools/shader-sync-verify.js +937 -0
- package/tools/telemetry/manifestPipeline.js +141 -0
- package/tools/telemetry/telemetryEvents.js +35 -0
- package/types/adaptive-sdk.d.ts +185 -0
- package/types/advanced/AIPresetGenerator.d.ts +81 -0
- package/types/advanced/MIDIController.d.ts +100 -0
- package/types/advanced/OffscreenWorker.d.ts +82 -0
- package/types/advanced/WebGPUCompute.d.ts +52 -0
- package/types/advanced/WebXRRenderer.d.ts +77 -0
- package/types/advanced/index.d.ts +46 -0
- package/types/core/ErrorReporter.d.ts +50 -0
- package/types/core/VIB3Engine.d.ts +204 -0
- package/types/creative/ColorPresetsSystem.d.ts +91 -0
- package/types/creative/ParameterTimeline.d.ts +74 -0
- package/types/creative/PostProcessingPipeline.d.ts +109 -0
- package/types/creative/TransitionAnimator.d.ts +71 -0
- package/types/creative/index.d.ts +35 -0
- package/types/integrations/FigmaPlugin.d.ts +46 -0
- package/types/integrations/OBSMode.d.ts +74 -0
- package/types/integrations/ThreeJsPackage.d.ts +62 -0
- package/types/integrations/TouchDesignerExport.d.ts +36 -0
- package/types/integrations/Vib3React.d.ts +74 -0
- package/types/integrations/Vib3Svelte.d.ts +63 -0
- package/types/integrations/Vib3Vue.d.ts +55 -0
- package/types/integrations/index.d.ts +52 -0
- package/types/reactivity/SpatialInputSystem.d.ts +173 -0
- package/types/reactivity/index.d.ts +394 -0
- package/types/render/CommandBuffer.d.ts +169 -0
- package/types/render/RenderCommand.d.ts +312 -0
- package/types/render/RenderState.d.ts +279 -0
- package/types/render/RenderTarget.d.ts +254 -0
- package/types/render/ShaderProgram.d.ts +277 -0
- package/types/render/UnifiedRenderBridge.d.ts +143 -0
- package/types/render/WebGLBackend.d.ts +168 -0
- package/types/render/WebGPUBackend.d.ts +186 -0
- package/types/render/index.d.ts +141 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# Licensing tiers (draft)
|
|
2
|
+
|
|
3
|
+
This document outlines the proposed licensing tiers for the VIB3+ SDK and agentic tooling. It is intended as a working draft for Phase 5.
|
|
4
|
+
|
|
5
|
+
## Proposed tiers
|
|
6
|
+
| Tier | Price | Revenue Limit | Key Features |
|
|
7
|
+
| --- | --- | --- | --- |
|
|
8
|
+
| Community | Free (MIT) | Non-commercial | Runtime access, watermark on exports |
|
|
9
|
+
| Indie | $29/mo | <$100K | Commercial use, standard formats |
|
|
10
|
+
| Studio | $99/mo/seat | <$500K | Priority support, all formats |
|
|
11
|
+
| Pro | $249/mo/seat | <$2M | Source access, custom shaders |
|
|
12
|
+
| Enterprise | Custom | $2M+ | Indemnification, dedicated support |
|
|
13
|
+
| OEM/White-Label | Custom annual | Any | Rebranding/redistribution rights |
|
|
14
|
+
|
|
15
|
+
## Feature matrix by tier
|
|
16
|
+
|
|
17
|
+
| Feature | Community | Indie | Studio | Pro | Enterprise |
|
|
18
|
+
|---------|-----------|-------|--------|-----|------------|
|
|
19
|
+
| WebGL backend | Yes | Yes | Yes | Yes | Yes |
|
|
20
|
+
| WebGPU backend | Yes | Yes | Yes | Yes | Yes |
|
|
21
|
+
| 24 geometry variants | Yes | Yes | Yes | Yes | Yes |
|
|
22
|
+
| 6D rotation | Yes | Yes | Yes | Yes | Yes |
|
|
23
|
+
| Export watermark | Yes | No | No | No | No |
|
|
24
|
+
| SVG export | 3/day | Unlimited | Unlimited | Unlimited | Unlimited |
|
|
25
|
+
| Lottie export | No | Yes | Yes | Yes | Yes |
|
|
26
|
+
| CSS variables export | No | Yes | Yes | Yes | Yes |
|
|
27
|
+
| Custom shaders | No | No | No | Yes | Yes |
|
|
28
|
+
| WASM core | No | No | Yes | Yes | Yes |
|
|
29
|
+
| Flutter bindings | No | No | Yes | Yes | Yes |
|
|
30
|
+
| Source access | No | No | No | Yes | Yes |
|
|
31
|
+
| Priority support | No | No | Yes | Yes | Yes |
|
|
32
|
+
| Dedicated support | No | No | No | No | Yes |
|
|
33
|
+
| SLA | No | No | No | No | Yes |
|
|
34
|
+
|
|
35
|
+
## Activation workflow (implementation)
|
|
36
|
+
|
|
37
|
+
### 1. License key format
|
|
38
|
+
```
|
|
39
|
+
VIB3-{TIER}-{UUID}-{CHECKSUM}
|
|
40
|
+
|
|
41
|
+
Examples:
|
|
42
|
+
VIB3-INDIE-a1b2c3d4-e5f6g7h8-XXXX
|
|
43
|
+
VIB3-STUDIO-b2c3d4e5-f6g7h8i9-YYYY
|
|
44
|
+
VIB3-PRO-c3d4e5f6-g7h8i9j0-ZZZZ
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 2. Activation flow
|
|
48
|
+
```
|
|
49
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
50
|
+
│ LICENSE ACTIVATION │
|
|
51
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
52
|
+
|
|
53
|
+
User CLI/UI License Server
|
|
54
|
+
│ │ │
|
|
55
|
+
│ 1. Enter license key │ │
|
|
56
|
+
│───────────────────────>│ │
|
|
57
|
+
│ │ 2. Validate key format │
|
|
58
|
+
│ │───────────────────────────>│
|
|
59
|
+
│ │ │
|
|
60
|
+
│ │ 3. Return signed token │
|
|
61
|
+
│ │<───────────────────────────│
|
|
62
|
+
│ │ │
|
|
63
|
+
│ │ 4. Store token locally │
|
|
64
|
+
│ │ (encrypted, machine-bound)│
|
|
65
|
+
│ │ │
|
|
66
|
+
│ 5. Activation success │ │
|
|
67
|
+
│<───────────────────────│ │
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 3. CLI activation commands
|
|
71
|
+
```bash
|
|
72
|
+
# Activate a license
|
|
73
|
+
vib3 license activate VIB3-INDIE-a1b2c3d4-e5f6g7h8-XXXX
|
|
74
|
+
|
|
75
|
+
# Check license status
|
|
76
|
+
vib3 license status
|
|
77
|
+
|
|
78
|
+
# Deactivate (for moving to new machine)
|
|
79
|
+
vib3 license deactivate
|
|
80
|
+
|
|
81
|
+
# Refresh license token (manual heartbeat)
|
|
82
|
+
vib3 license refresh
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4. Programmatic activation
|
|
86
|
+
```javascript
|
|
87
|
+
import { LicenseManager } from '@vib3code/sdk/license';
|
|
88
|
+
|
|
89
|
+
const license = new LicenseManager();
|
|
90
|
+
|
|
91
|
+
// Activate
|
|
92
|
+
const result = await license.activate('VIB3-INDIE-...');
|
|
93
|
+
if (result.success) {
|
|
94
|
+
console.log('Tier:', result.tier);
|
|
95
|
+
console.log('Expires:', result.expiresAt);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Check status
|
|
99
|
+
const status = license.getStatus();
|
|
100
|
+
// { tier: 'indie', valid: true, expiresAt: '2026-02-23', features: [...] }
|
|
101
|
+
|
|
102
|
+
// Feature gating
|
|
103
|
+
if (license.hasFeature('lottie-export')) {
|
|
104
|
+
await exportToLottie(scene);
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## License token schema
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
112
|
+
"type": "object",
|
|
113
|
+
"properties": {
|
|
114
|
+
"version": { "type": "integer", "const": 1 },
|
|
115
|
+
"licenseKey": { "type": "string", "pattern": "^VIB3-[A-Z]+-[a-f0-9-]+$" },
|
|
116
|
+
"tier": { "enum": ["community", "indie", "studio", "pro", "enterprise", "oem"] },
|
|
117
|
+
"machineId": { "type": "string" },
|
|
118
|
+
"issuedAt": { "type": "string", "format": "date-time" },
|
|
119
|
+
"expiresAt": { "type": "string", "format": "date-time" },
|
|
120
|
+
"features": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"items": { "type": "string" }
|
|
123
|
+
},
|
|
124
|
+
"signature": { "type": "string" }
|
|
125
|
+
},
|
|
126
|
+
"required": ["version", "licenseKey", "tier", "machineId", "issuedAt", "expiresAt", "signature"]
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Offline validation
|
|
131
|
+
|
|
132
|
+
### Grace period rules
|
|
133
|
+
- **Initial grace period:** 7 days without network connection
|
|
134
|
+
- **Refresh interval:** Token refresh attempted every 24 hours when online
|
|
135
|
+
- **Expiration warning:** 3 days before token expiration
|
|
136
|
+
- **Hard expiration:** After grace period, features downgrade to Community tier
|
|
137
|
+
|
|
138
|
+
### Offline validation flow
|
|
139
|
+
```javascript
|
|
140
|
+
// Pseudocode for offline validation
|
|
141
|
+
function validateOffline(token) {
|
|
142
|
+
// 1. Verify signature with embedded public key
|
|
143
|
+
if (!verifySignature(token, PUBLIC_KEY)) {
|
|
144
|
+
return { valid: false, reason: 'invalid_signature' };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// 2. Check expiration with grace period
|
|
148
|
+
const now = Date.now();
|
|
149
|
+
const expires = new Date(token.expiresAt).getTime();
|
|
150
|
+
const gracePeriod = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
151
|
+
|
|
152
|
+
if (now > expires + gracePeriod) {
|
|
153
|
+
return { valid: false, reason: 'expired', gracePeriodExceeded: true };
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// 3. Verify machine binding
|
|
157
|
+
if (token.machineId !== getMachineId()) {
|
|
158
|
+
return { valid: false, reason: 'machine_mismatch' };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return {
|
|
162
|
+
valid: true,
|
|
163
|
+
tier: token.tier,
|
|
164
|
+
features: token.features,
|
|
165
|
+
gracePeriodActive: now > expires
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Feature gating implementation
|
|
171
|
+
|
|
172
|
+
### Runtime feature checks
|
|
173
|
+
```javascript
|
|
174
|
+
// src/license/FeatureGate.js
|
|
175
|
+
export class FeatureGate {
|
|
176
|
+
constructor(licenseManager) {
|
|
177
|
+
this.license = licenseManager;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Check if feature is available
|
|
181
|
+
can(feature) {
|
|
182
|
+
const status = this.license.getStatus();
|
|
183
|
+
if (!status.valid) return false;
|
|
184
|
+
return status.features.includes(feature);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Gate a function call
|
|
188
|
+
guard(feature, fn) {
|
|
189
|
+
if (!this.can(feature)) {
|
|
190
|
+
throw new FeatureNotAvailableError(feature, this.license.getStatus().tier);
|
|
191
|
+
}
|
|
192
|
+
return fn();
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Async gate
|
|
196
|
+
async guardAsync(feature, fn) {
|
|
197
|
+
if (!this.can(feature)) {
|
|
198
|
+
throw new FeatureNotAvailableError(feature, this.license.getStatus().tier);
|
|
199
|
+
}
|
|
200
|
+
return await fn();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Usage in export pipeline
|
|
205
|
+
const gate = new FeatureGate(licenseManager);
|
|
206
|
+
|
|
207
|
+
async function exportScene(scene, format) {
|
|
208
|
+
switch (format) {
|
|
209
|
+
case 'svg':
|
|
210
|
+
// Community: 3/day limit
|
|
211
|
+
if (gate.can('unlimited-svg')) {
|
|
212
|
+
return await exportSVG(scene);
|
|
213
|
+
} else {
|
|
214
|
+
return await exportSVGWithLimit(scene, 3);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
case 'lottie':
|
|
218
|
+
return await gate.guardAsync('lottie-export', () => exportLottie(scene));
|
|
219
|
+
|
|
220
|
+
case 'css':
|
|
221
|
+
return await gate.guardAsync('css-export', () => exportCSS(scene));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Watermark implementation (Community tier)
|
|
227
|
+
|
|
228
|
+
For Community tier exports, a subtle watermark is applied:
|
|
229
|
+
```javascript
|
|
230
|
+
function applyWatermark(svg) {
|
|
231
|
+
const watermark = `
|
|
232
|
+
<g id="vib3-watermark" opacity="0.3" transform="translate(10, ${height - 20})">
|
|
233
|
+
<text font-size="10" fill="#666">Created with VIB3+ Community</text>
|
|
234
|
+
</g>
|
|
235
|
+
`;
|
|
236
|
+
return svg.replace('</svg>', `${watermark}</svg>`);
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Telemetry (opt-in)
|
|
241
|
+
|
|
242
|
+
Anonymous usage telemetry can be enabled to help improve the SDK:
|
|
243
|
+
```javascript
|
|
244
|
+
// Telemetry is opt-in and respects license tier
|
|
245
|
+
const telemetryConfig = {
|
|
246
|
+
enabled: userConsent && license.tier !== 'enterprise',
|
|
247
|
+
events: ['render_frame', 'export_complete', 'geometry_change'],
|
|
248
|
+
excludeFields: ['custom_shader_source', 'scene_data']
|
|
249
|
+
};
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Migration path
|
|
253
|
+
|
|
254
|
+
### Upgrading tiers
|
|
255
|
+
- Seamless upgrade via CLI or dashboard
|
|
256
|
+
- Existing exports retain their tier watermark status
|
|
257
|
+
- No re-export required for previously exported assets
|
|
258
|
+
|
|
259
|
+
### Downgrading tiers
|
|
260
|
+
- Features revert to lower tier limits
|
|
261
|
+
- Existing high-tier exports continue to work
|
|
262
|
+
- New exports subject to new tier limits
|
|
263
|
+
|
|
264
|
+
## Implementation status
|
|
265
|
+
|
|
266
|
+
| Component | Status | Location |
|
|
267
|
+
|-----------|--------|----------|
|
|
268
|
+
| License key format | Defined | This document |
|
|
269
|
+
| Token schema | Defined | This document |
|
|
270
|
+
| CLI commands | TODO | `src/cli/license.js` |
|
|
271
|
+
| LicenseManager | TODO | `src/license/LicenseManager.js` |
|
|
272
|
+
| FeatureGate | TODO | `src/license/FeatureGate.js` |
|
|
273
|
+
| Offline validation | TODO | `src/license/OfflineValidator.js` |
|
|
274
|
+
| Server endpoints | TODO | External service |
|
|
275
|
+
| Dashboard | TODO | External service |
|