@octomil/browser 1.0.0 → 1.1.0
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 +168 -36
- package/dist/_generated/accelerator_type.d.ts +8 -0
- package/dist/_generated/accelerator_type.d.ts.map +1 -0
- package/dist/_generated/accelerator_type.js +10 -0
- package/dist/_generated/accelerator_type.js.map +1 -0
- package/dist/_generated/activation_policy.d.ts +7 -0
- package/dist/_generated/activation_policy.d.ts.map +1 -0
- package/dist/_generated/activation_policy.js +9 -0
- package/dist/_generated/activation_policy.js.map +1 -0
- package/dist/_generated/adapter_activation_state.d.ts +13 -0
- package/dist/_generated/adapter_activation_state.d.ts.map +1 -0
- package/dist/_generated/adapter_activation_state.js +15 -0
- package/dist/_generated/adapter_activation_state.js.map +1 -0
- package/dist/_generated/artifact_format.d.ts +11 -0
- package/dist/_generated/artifact_format.d.ts.map +1 -0
- package/dist/_generated/artifact_format.js +13 -0
- package/dist/_generated/artifact_format.js.map +1 -0
- package/dist/_generated/artifact_resource_kind.d.ts +16 -0
- package/dist/_generated/artifact_resource_kind.d.ts.map +1 -0
- package/dist/_generated/artifact_resource_kind.js +18 -0
- package/dist/_generated/artifact_resource_kind.js.map +1 -0
- package/dist/_generated/artifact_status.d.ts +21 -0
- package/dist/_generated/artifact_status.d.ts.map +1 -0
- package/dist/_generated/artifact_status.js +23 -0
- package/dist/_generated/artifact_status.js.map +1 -0
- package/dist/_generated/auth_method.d.ts +10 -0
- package/dist/_generated/auth_method.d.ts.map +1 -0
- package/dist/_generated/auth_method.js +12 -0
- package/dist/_generated/auth_method.js.map +1 -0
- package/dist/_generated/auth_type.d.ts +7 -0
- package/dist/_generated/auth_type.d.ts.map +1 -0
- package/dist/_generated/auth_type.js +9 -0
- package/dist/_generated/auth_type.js.map +1 -0
- package/dist/_generated/billing_interval.d.ts +5 -0
- package/dist/_generated/billing_interval.d.ts.map +1 -0
- package/dist/_generated/billing_interval.js +7 -0
- package/dist/_generated/billing_interval.js.map +1 -0
- package/dist/_generated/billing_plan.d.ts +47 -0
- package/dist/_generated/billing_plan.d.ts.map +1 -0
- package/dist/_generated/billing_plan.js +41 -0
- package/dist/_generated/billing_plan.js.map +1 -0
- package/dist/_generated/cloud_provider.d.ts +12 -0
- package/dist/_generated/cloud_provider.d.ts.map +1 -0
- package/dist/_generated/cloud_provider.js +14 -0
- package/dist/_generated/cloud_provider.js.map +1 -0
- package/dist/_generated/compatibility_level.d.ts +7 -0
- package/dist/_generated/compatibility_level.d.ts.map +1 -0
- package/dist/_generated/compatibility_level.js +9 -0
- package/dist/_generated/compatibility_level.js.map +1 -0
- package/dist/_generated/content_part_type.d.ts +7 -0
- package/dist/_generated/content_part_type.d.ts.map +1 -0
- package/dist/_generated/content_part_type.js +9 -0
- package/dist/_generated/content_part_type.js.map +1 -0
- package/dist/_generated/delivery_mode.d.ts +6 -0
- package/dist/_generated/delivery_mode.d.ts.map +1 -0
- package/dist/_generated/delivery_mode.js +8 -0
- package/dist/_generated/delivery_mode.js.map +1 -0
- package/dist/_generated/device_class.d.ts +7 -0
- package/dist/_generated/device_class.d.ts.map +1 -0
- package/dist/_generated/device_class.js +9 -0
- package/dist/_generated/device_class.js.map +1 -0
- package/dist/_generated/device_connectivity_status.d.ts +8 -0
- package/dist/_generated/device_connectivity_status.d.ts.map +1 -0
- package/dist/_generated/device_connectivity_status.js +10 -0
- package/dist/_generated/device_connectivity_status.js.map +1 -0
- package/dist/_generated/device_model_status.d.ts +14 -0
- package/dist/_generated/device_model_status.d.ts.map +1 -0
- package/dist/_generated/device_model_status.js +16 -0
- package/dist/_generated/device_model_status.js.map +1 -0
- package/dist/_generated/device_platform.d.ts +9 -0
- package/dist/_generated/device_platform.d.ts.map +1 -0
- package/dist/_generated/device_platform.js +11 -0
- package/dist/_generated/device_platform.js.map +1 -0
- package/dist/_generated/email_provider.d.ts +8 -0
- package/dist/_generated/email_provider.d.ts.map +1 -0
- package/dist/_generated/email_provider.js +10 -0
- package/dist/_generated/email_provider.js.map +1 -0
- package/dist/_generated/email_template.d.ts +11 -0
- package/dist/_generated/email_template.d.ts.map +1 -0
- package/dist/_generated/email_template.js +13 -0
- package/dist/_generated/email_template.js.map +1 -0
- package/dist/_generated/error_code.d.ts +52 -0
- package/dist/_generated/error_code.d.ts.map +1 -0
- package/dist/_generated/error_code.js +85 -0
- package/dist/_generated/error_code.js.map +1 -0
- package/dist/_generated/federated_participation_state.d.ts +25 -0
- package/dist/_generated/federated_participation_state.d.ts.map +1 -0
- package/dist/_generated/federated_participation_state.js +27 -0
- package/dist/_generated/federated_participation_state.js.map +1 -0
- package/dist/_generated/federated_round_state.d.ts +17 -0
- package/dist/_generated/federated_round_state.d.ts.map +1 -0
- package/dist/_generated/federated_round_state.js +19 -0
- package/dist/_generated/federated_round_state.js.map +1 -0
- package/dist/_generated/finish_reason.d.ts +7 -0
- package/dist/_generated/finish_reason.d.ts.map +1 -0
- package/dist/_generated/finish_reason.js +9 -0
- package/dist/_generated/finish_reason.js.map +1 -0
- package/dist/_generated/index.d.ts +17 -0
- package/dist/_generated/index.d.ts.map +1 -0
- package/dist/_generated/index.js +17 -0
- package/dist/_generated/index.js.map +1 -0
- package/dist/_generated/input_modality.d.ts +7 -0
- package/dist/_generated/input_modality.d.ts.map +1 -0
- package/dist/_generated/input_modality.js +9 -0
- package/dist/_generated/input_modality.js.map +1 -0
- package/dist/_generated/message_role.d.ts +7 -0
- package/dist/_generated/message_role.d.ts.map +1 -0
- package/dist/_generated/message_role.js +9 -0
- package/dist/_generated/message_role.js.map +1 -0
- package/dist/_generated/metric_views.d.ts +18 -0
- package/dist/_generated/metric_views.d.ts.map +1 -0
- package/dist/_generated/metric_views.js +22 -0
- package/dist/_generated/metric_views.js.map +1 -0
- package/dist/_generated/modality.d.ts +7 -0
- package/dist/_generated/modality.d.ts.map +1 -0
- package/dist/_generated/modality.js +9 -0
- package/dist/_generated/modality.js.map +1 -0
- package/dist/_generated/model_capability.d.ts +10 -0
- package/dist/_generated/model_capability.d.ts.map +1 -0
- package/dist/_generated/model_capability.js +12 -0
- package/dist/_generated/model_capability.js.map +1 -0
- package/dist/_generated/model_feature.d.ts +7 -0
- package/dist/_generated/model_feature.d.ts.map +1 -0
- package/dist/_generated/model_feature.js +9 -0
- package/dist/_generated/model_feature.js.map +1 -0
- package/dist/_generated/model_lifecycle.d.ts +7 -0
- package/dist/_generated/model_lifecycle.d.ts.map +1 -0
- package/dist/_generated/model_lifecycle.js +9 -0
- package/dist/_generated/model_lifecycle.js.map +1 -0
- package/dist/_generated/model_source_format.d.ts +9 -0
- package/dist/_generated/model_source_format.d.ts.map +1 -0
- package/dist/_generated/model_source_format.js +11 -0
- package/dist/_generated/model_source_format.js.map +1 -0
- package/dist/_generated/model_status.d.ts +7 -0
- package/dist/_generated/model_status.d.ts.map +1 -0
- package/dist/_generated/model_status.js +9 -0
- package/dist/_generated/model_status.js.map +1 -0
- package/dist/_generated/network_type.d.ts +7 -0
- package/dist/_generated/network_type.d.ts.map +1 -0
- package/dist/_generated/network_type.js +9 -0
- package/dist/_generated/network_type.js.map +1 -0
- package/dist/_generated/oauth_provider.d.ts +8 -0
- package/dist/_generated/oauth_provider.d.ts.map +1 -0
- package/dist/_generated/oauth_provider.js +10 -0
- package/dist/_generated/oauth_provider.js.map +1 -0
- package/dist/_generated/operation_state.d.ts +9 -0
- package/dist/_generated/operation_state.d.ts.map +1 -0
- package/dist/_generated/operation_state.js +11 -0
- package/dist/_generated/operation_state.js.map +1 -0
- package/dist/_generated/otlp_resource_attributes.d.ts +16 -0
- package/dist/_generated/otlp_resource_attributes.d.ts.map +1 -0
- package/dist/_generated/otlp_resource_attributes.js +17 -0
- package/dist/_generated/otlp_resource_attributes.js.map +1 -0
- package/dist/_generated/principal_type.d.ts +7 -0
- package/dist/_generated/principal_type.d.ts.map +1 -0
- package/dist/_generated/principal_type.js +9 -0
- package/dist/_generated/principal_type.js.map +1 -0
- package/dist/_generated/query_routing_tier.d.ts +6 -0
- package/dist/_generated/query_routing_tier.d.ts.map +1 -0
- package/dist/_generated/query_routing_tier.js +8 -0
- package/dist/_generated/query_routing_tier.js.map +1 -0
- package/dist/_generated/routing_policy.d.ts +7 -0
- package/dist/_generated/routing_policy.d.ts.map +1 -0
- package/dist/_generated/routing_policy.js +9 -0
- package/dist/_generated/routing_policy.js.map +1 -0
- package/dist/_generated/runtime_executor.d.ts +18 -0
- package/dist/_generated/runtime_executor.d.ts.map +1 -0
- package/dist/_generated/runtime_executor.js +20 -0
- package/dist/_generated/runtime_executor.js.map +1 -0
- package/dist/_generated/scope.d.ts +16 -0
- package/dist/_generated/scope.d.ts.map +1 -0
- package/dist/_generated/scope.js +18 -0
- package/dist/_generated/scope.js.map +1 -0
- package/dist/_generated/span_attributes.d.ts +25 -0
- package/dist/_generated/span_attributes.d.ts.map +1 -0
- package/dist/_generated/span_attributes.js +34 -0
- package/dist/_generated/span_attributes.js.map +1 -0
- package/dist/_generated/span_event_attributes.d.ts +23 -0
- package/dist/_generated/span_event_attributes.d.ts.map +1 -0
- package/dist/_generated/span_event_attributes.js +36 -0
- package/dist/_generated/span_event_attributes.js.map +1 -0
- package/dist/_generated/span_event_names.d.ts +42 -0
- package/dist/_generated/span_event_names.d.ts.map +1 -0
- package/dist/_generated/span_event_names.js +82 -0
- package/dist/_generated/span_event_names.js.map +1 -0
- package/dist/_generated/span_names.d.ts +17 -0
- package/dist/_generated/span_names.d.ts.map +1 -0
- package/dist/_generated/span_names.js +18 -0
- package/dist/_generated/span_names.js.map +1 -0
- package/dist/_generated/span_status_mapping.d.ts +8 -0
- package/dist/_generated/span_status_mapping.d.ts.map +1 -0
- package/dist/_generated/span_status_mapping.js +17 -0
- package/dist/_generated/span_status_mapping.js.map +1 -0
- package/dist/_generated/subscription_status.d.ts +11 -0
- package/dist/_generated/subscription_status.d.ts.map +1 -0
- package/dist/_generated/subscription_status.js +13 -0
- package/dist/_generated/subscription_status.js.map +1 -0
- package/dist/_generated/support_tier.d.ts +7 -0
- package/dist/_generated/support_tier.d.ts.map +1 -0
- package/dist/_generated/support_tier.js +9 -0
- package/dist/_generated/support_tier.js.map +1 -0
- package/dist/_generated/telemetry_class.d.ts +6 -0
- package/dist/_generated/telemetry_class.d.ts.map +1 -0
- package/dist/_generated/telemetry_class.js +8 -0
- package/dist/_generated/telemetry_class.js.map +1 -0
- package/dist/_generated/telemetry_events.d.ts +10 -0
- package/dist/_generated/telemetry_events.d.ts.map +1 -0
- package/dist/_generated/telemetry_events.js +18 -0
- package/dist/_generated/telemetry_events.js.map +1 -0
- package/dist/_generated/thermal_state.d.ts +7 -0
- package/dist/_generated/thermal_state.d.ts.map +1 -0
- package/dist/_generated/thermal_state.js +9 -0
- package/dist/_generated/thermal_state.js.map +1 -0
- package/dist/_generated/tool_call_tier.d.ts +7 -0
- package/dist/_generated/tool_call_tier.d.ts.map +1 -0
- package/dist/_generated/tool_call_tier.js +9 -0
- package/dist/_generated/tool_call_tier.js.map +1 -0
- package/dist/_generated/training_job_state.d.ts +23 -0
- package/dist/_generated/training_job_state.d.ts.map +1 -0
- package/dist/_generated/training_job_state.js +25 -0
- package/dist/_generated/training_job_state.js.map +1 -0
- package/dist/_generated/work_class.d.ts +6 -0
- package/dist/_generated/work_class.d.ts.map +1 -0
- package/dist/_generated/work_class.js +8 -0
- package/dist/_generated/work_class.js.map +1 -0
- package/dist/artifacts.d.ts +16 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +16 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/audio/audio-transcriptions.d.ts +31 -0
- package/dist/audio/audio-transcriptions.d.ts.map +1 -0
- package/dist/audio/audio-transcriptions.js +73 -0
- package/dist/audio/audio-transcriptions.js.map +1 -0
- package/dist/audio/index.d.ts +5 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +3 -0
- package/dist/audio/index.js.map +1 -0
- package/dist/audio/octomil-audio.d.ts +9 -0
- package/dist/audio/octomil-audio.d.ts.map +1 -0
- package/dist/audio/octomil-audio.js +11 -0
- package/dist/audio/octomil-audio.js.map +1 -0
- package/dist/audio/transcription-types.d.ts +17 -0
- package/dist/audio/transcription-types.d.ts.map +1 -0
- package/dist/audio/transcription-types.js +6 -0
- package/dist/audio/transcription-types.js.map +1 -0
- package/dist/cache.js +1 -1
- package/dist/cache.js.map +1 -1
- package/dist/capabilities.d.ts +26 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +68 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/chat.d.ts +109 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +258 -0
- package/dist/chat.js.map +1 -0
- package/dist/configure.d.ts +18 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +136 -0
- package/dist/configure.js.map +1 -0
- package/dist/control.d.ts +171 -0
- package/dist/control.d.ts.map +1 -0
- package/dist/control.js +317 -0
- package/dist/control.js.map +1 -0
- package/dist/device-auth.d.ts +1 -1
- package/dist/device-auth.d.ts.map +1 -1
- package/dist/device-auth.js +7 -7
- package/dist/device-auth.js.map +1 -1
- package/dist/device-context.d.ts +48 -0
- package/dist/device-context.d.ts.map +1 -0
- package/dist/device-context.js +92 -0
- package/dist/device-context.js.map +1 -0
- package/dist/devices.d.ts +17 -0
- package/dist/devices.d.ts.map +1 -0
- package/dist/devices.js +16 -0
- package/dist/devices.js.map +1 -0
- package/dist/embeddings.d.ts +19 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +54 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/experiments.d.ts +4 -3
- package/dist/experiments.d.ts.map +1 -1
- package/dist/experiments.js +5 -10
- package/dist/experiments.js.map +1 -1
- package/dist/federated-analytics.d.ts +65 -0
- package/dist/federated-analytics.d.ts.map +1 -0
- package/dist/federated-analytics.js +128 -0
- package/dist/federated-analytics.js.map +1 -0
- package/dist/federated.d.ts +10 -3
- package/dist/federated.d.ts.map +1 -1
- package/dist/federated.js +68 -15
- package/dist/federated.js.map +1 -1
- package/dist/gradient-cache.d.ts +21 -0
- package/dist/gradient-cache.d.ts.map +1 -0
- package/dist/gradient-cache.js +70 -0
- package/dist/gradient-cache.js.map +1 -0
- package/dist/index.cjs +43601 -709
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +64 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -13
- package/dist/index.js.map +1 -1
- package/dist/install-id.d.ts +32 -0
- package/dist/install-id.d.ts.map +1 -0
- package/dist/install-id.js +61 -0
- package/dist/install-id.js.map +1 -0
- package/dist/{model-loader.d.ts → model-manager.d.ts} +4 -4
- package/dist/model-manager.d.ts.map +1 -0
- package/dist/{model-loader.js → model-manager.js} +18 -14
- package/dist/model-manager.js.map +1 -0
- package/dist/models.d.ts +74 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +113 -0
- package/dist/models.js.map +1 -0
- package/dist/monitoring-config.d.ts +8 -0
- package/dist/monitoring-config.d.ts.map +1 -0
- package/dist/monitoring-config.js +5 -0
- package/dist/monitoring-config.js.map +1 -0
- package/dist/monitoring.d.ts +10 -0
- package/dist/monitoring.d.ts.map +1 -0
- package/dist/monitoring.js +19 -0
- package/dist/monitoring.js.map +1 -0
- package/dist/octomil.d.ts +151 -16
- package/dist/octomil.d.ts.map +1 -1
- package/dist/octomil.js +456 -125
- package/dist/octomil.js.map +1 -1
- package/dist/octomil.min.js +47 -2844
- package/dist/octomil.min.js.map +4 -4
- package/dist/responses-runtime.d.ts +13 -0
- package/dist/responses-runtime.d.ts.map +1 -0
- package/dist/responses-runtime.js +2 -0
- package/dist/responses-runtime.js.map +1 -0
- package/dist/responses-tools.d.ts +18 -0
- package/dist/responses-tools.d.ts.map +1 -0
- package/dist/responses-tools.js +71 -0
- package/dist/responses-tools.js.map +1 -0
- package/dist/responses.d.ts +142 -0
- package/dist/responses.d.ts.map +1 -0
- package/dist/responses.js +549 -0
- package/dist/responses.js.map +1 -0
- package/dist/routing.d.ts +49 -0
- package/dist/routing.d.ts.map +1 -0
- package/dist/routing.js +221 -0
- package/dist/routing.js.map +1 -0
- package/dist/runtime/core/model-runtime.d.ts +19 -0
- package/dist/runtime/core/model-runtime.d.ts.map +1 -0
- package/dist/runtime/core/model-runtime.js +9 -0
- package/dist/runtime/core/model-runtime.js.map +1 -0
- package/dist/{inference.d.ts → runtime/engines/onnx-web/engine.d.ts} +7 -3
- package/dist/runtime/engines/onnx-web/engine.d.ts.map +1 -0
- package/dist/{inference.js → runtime/engines/onnx-web/engine.js} +21 -7
- package/dist/runtime/engines/onnx-web/engine.js.map +1 -0
- package/dist/runtime/engines/registry/engine-plugin.d.ts +11 -0
- package/dist/runtime/engines/registry/engine-plugin.d.ts.map +1 -0
- package/dist/runtime/engines/registry/engine-plugin.js +2 -0
- package/dist/runtime/engines/registry/engine-plugin.js.map +1 -0
- package/dist/runtime/engines/registry/engine-registry.d.ts +35 -0
- package/dist/runtime/engines/registry/engine-registry.d.ts.map +1 -0
- package/dist/runtime/engines/registry/engine-registry.js +74 -0
- package/dist/runtime/engines/registry/engine-registry.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/secure-aggregation.d.ts.map +1 -1
- package/dist/secure-aggregation.js +3 -2
- package/dist/secure-aggregation.js.map +1 -1
- package/dist/server-api.d.ts +17 -0
- package/dist/server-api.d.ts.map +1 -0
- package/dist/server-api.js +56 -0
- package/dist/server-api.js.map +1 -0
- package/dist/settings.d.ts +20 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +49 -0
- package/dist/settings.js.map +1 -0
- package/dist/silent-auth-config.d.ts +33 -0
- package/dist/silent-auth-config.d.ts.map +1 -0
- package/dist/silent-auth-config.js +29 -0
- package/dist/silent-auth-config.js.map +1 -0
- package/dist/streaming.d.ts +4 -3
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +15 -25
- package/dist/streaming.js.map +1 -1
- package/dist/sync-manager.d.ts +103 -0
- package/dist/sync-manager.d.ts.map +1 -0
- package/dist/sync-manager.js +314 -0
- package/dist/sync-manager.js.map +1 -0
- package/dist/telemetry.d.ts +99 -4
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +251 -13
- package/dist/telemetry.js.map +1 -1
- package/dist/text/octomil-text.d.ts +18 -0
- package/dist/text/octomil-text.d.ts.map +1 -0
- package/dist/text/octomil-text.js +20 -0
- package/dist/text/octomil-text.js.map +1 -0
- package/dist/training.d.ts +15 -0
- package/dist/training.d.ts.map +1 -0
- package/dist/training.js +35 -0
- package/dist/training.js.map +1 -0
- package/dist/transformers-local-runtime.d.ts +17 -0
- package/dist/transformers-local-runtime.d.ts.map +1 -0
- package/dist/transformers-local-runtime.js +356 -0
- package/dist/transformers-local-runtime.js.map +1 -0
- package/dist/types.d.ts +353 -25
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +146 -0
- package/dist/types.js.map +1 -1
- package/package.json +7 -6
- package/dist/inference.d.ts.map +0 -1
- package/dist/inference.js.map +0 -1
- package/dist/model-loader.d.ts.map +0 -1
- package/dist/model-loader.js.map +0 -1
- package/dist/rollouts.d.ts +0 -43
- package/dist/rollouts.d.ts.map +0 -1
- package/dist/rollouts.js +0 -114
- package/dist/rollouts.js.map +0 -1
package/dist/control.js
ADDED
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @octomil/browser — Control client
|
|
3
|
+
*
|
|
4
|
+
* Device registration and heartbeat management. Builds on top of
|
|
5
|
+
* the DeviceAuth module to provide the full control-plane namespace
|
|
6
|
+
* required by the SDK facade contract.
|
|
7
|
+
*/
|
|
8
|
+
import { OctomilError } from "./types.js";
|
|
9
|
+
import { SPAN_NAMES } from "./_generated/span_names.js";
|
|
10
|
+
import { SPAN_ATTRIBUTES } from "./_generated/span_attributes.js";
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// ControlClient
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
export class ControlClient {
|
|
15
|
+
serverUrl;
|
|
16
|
+
apiKey;
|
|
17
|
+
orgId;
|
|
18
|
+
serverDeviceId = null;
|
|
19
|
+
heartbeatTimer = null;
|
|
20
|
+
heartbeatSequence = 0;
|
|
21
|
+
deviceContext;
|
|
22
|
+
telemetry;
|
|
23
|
+
constructor(options) {
|
|
24
|
+
this.serverUrl = (options.serverUrl || "https://api.octomil.com").replace(/\/+$/, "");
|
|
25
|
+
this.apiKey = options.apiKey;
|
|
26
|
+
this.orgId = options.orgId;
|
|
27
|
+
this.deviceContext = options.deviceContext ?? null;
|
|
28
|
+
this.serverDeviceId = this.deviceContext?.serverDeviceId ?? null;
|
|
29
|
+
this.telemetry = options.telemetry ?? null;
|
|
30
|
+
}
|
|
31
|
+
// -----------------------------------------------------------------------
|
|
32
|
+
// Public
|
|
33
|
+
// -----------------------------------------------------------------------
|
|
34
|
+
/** Fetch current device assignments from the server. */
|
|
35
|
+
async refresh() {
|
|
36
|
+
if (!this.serverDeviceId) {
|
|
37
|
+
return {
|
|
38
|
+
updated: false,
|
|
39
|
+
configVersion: "",
|
|
40
|
+
assignmentsChanged: false,
|
|
41
|
+
fetchedAt: new Date().toISOString(),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const headers = {};
|
|
45
|
+
Object.assign(headers, this.resolveAuthHeaders());
|
|
46
|
+
const resp = await fetch(`${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/assignments`, { headers });
|
|
47
|
+
if (!resp.ok) {
|
|
48
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Refresh assignments failed: ${resp.status}`);
|
|
49
|
+
}
|
|
50
|
+
const data = (await resp.json());
|
|
51
|
+
return {
|
|
52
|
+
updated: data.updated ?? true,
|
|
53
|
+
configVersion: data.config_version ?? "",
|
|
54
|
+
assignmentsChanged: data.assignments_changed ?? false,
|
|
55
|
+
fetchedAt: new Date().toISOString(),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** Register a device with the Octomil server. */
|
|
59
|
+
async register(deviceId) {
|
|
60
|
+
const effectiveDeviceId = deviceId || this.deviceContext?.installationId || (await this.generateDeviceId());
|
|
61
|
+
const payload = {
|
|
62
|
+
device_identifier: effectiveDeviceId,
|
|
63
|
+
installation_id: this.deviceContext?.installationId ?? effectiveDeviceId,
|
|
64
|
+
app_id: this.deviceContext?.appId ?? undefined,
|
|
65
|
+
platform: "browser",
|
|
66
|
+
os_version: typeof navigator !== "undefined" ? navigator.userAgent : "unknown",
|
|
67
|
+
sdk_version: "1.0.0",
|
|
68
|
+
locale: typeof navigator !== "undefined" ? navigator.language : undefined,
|
|
69
|
+
timezone: typeof Intl !== "undefined"
|
|
70
|
+
? Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
71
|
+
: undefined,
|
|
72
|
+
device_info: this.collectDeviceInfo(),
|
|
73
|
+
};
|
|
74
|
+
const headers = {
|
|
75
|
+
"Content-Type": "application/json",
|
|
76
|
+
};
|
|
77
|
+
Object.assign(headers, this.resolveAuthHeaders());
|
|
78
|
+
if (this.deviceContext?.appId) {
|
|
79
|
+
headers["X-App-Id"] = this.deviceContext.appId;
|
|
80
|
+
}
|
|
81
|
+
const registerUrl = new URL(`${this.serverUrl}/api/v1/devices/register`);
|
|
82
|
+
if (this.orgId) {
|
|
83
|
+
registerUrl.searchParams.set("org_id", this.orgId);
|
|
84
|
+
}
|
|
85
|
+
let resp;
|
|
86
|
+
try {
|
|
87
|
+
resp = await fetch(registerUrl.toString(), {
|
|
88
|
+
method: "POST",
|
|
89
|
+
headers,
|
|
90
|
+
body: JSON.stringify(payload),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Registration request failed: ${String(err)}`, err);
|
|
95
|
+
}
|
|
96
|
+
if (!resp.ok) {
|
|
97
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Registration failed: ${resp.status}`);
|
|
98
|
+
}
|
|
99
|
+
const data = (await resp.json());
|
|
100
|
+
this.serverDeviceId = data.device_id ?? data.id ?? null;
|
|
101
|
+
if (this.serverDeviceId &&
|
|
102
|
+
this.deviceContext &&
|
|
103
|
+
data.access_token &&
|
|
104
|
+
data.expires_at) {
|
|
105
|
+
this.deviceContext._updateRegistered(this.serverDeviceId, data.access_token, new Date(data.expires_at));
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
id: this.serverDeviceId ?? "",
|
|
109
|
+
deviceIdentifier: effectiveDeviceId,
|
|
110
|
+
orgId: this.orgId || "",
|
|
111
|
+
status: data.status || "active",
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** Send a heartbeat to the server for the registered device. */
|
|
115
|
+
async heartbeat() {
|
|
116
|
+
if (!this.serverDeviceId) {
|
|
117
|
+
throw new OctomilError("INVALID_INPUT", "Device not registered");
|
|
118
|
+
}
|
|
119
|
+
const seq = this.heartbeatSequence++;
|
|
120
|
+
this.telemetry?.track({
|
|
121
|
+
name: SPAN_NAMES.octomilControlHeartbeat,
|
|
122
|
+
timestamp: new Date().toISOString(),
|
|
123
|
+
attributes: {
|
|
124
|
+
[SPAN_ATTRIBUTES.heartbeatSequence]: seq,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
const payload = {
|
|
128
|
+
sdk_version: "1.0.0",
|
|
129
|
+
platform: "browser",
|
|
130
|
+
os_version: typeof navigator !== "undefined" ? navigator.userAgent : "unknown",
|
|
131
|
+
};
|
|
132
|
+
const headers = {
|
|
133
|
+
"Content-Type": "application/json",
|
|
134
|
+
};
|
|
135
|
+
Object.assign(headers, this.resolveAuthHeaders());
|
|
136
|
+
let resp;
|
|
137
|
+
try {
|
|
138
|
+
resp = await fetch(`${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/heartbeat`, { method: "PUT", headers, body: JSON.stringify(payload) });
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Heartbeat request failed: ${String(err)}`, err);
|
|
142
|
+
}
|
|
143
|
+
if (!resp.ok) {
|
|
144
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Heartbeat failed: ${resp.status}`);
|
|
145
|
+
}
|
|
146
|
+
const data = (await resp.json());
|
|
147
|
+
return { status: data.status || "ok", serverTime: data.server_time };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Report observed device state to the server (GAP-05).
|
|
151
|
+
* POSTs per-model statuses and runtime metadata to
|
|
152
|
+
* `/api/v1/devices/{id}/observed-state`.
|
|
153
|
+
*
|
|
154
|
+
* Typically called by {@link SyncManager} after a reconcile cycle, but can
|
|
155
|
+
* also be invoked manually for custom reporting.
|
|
156
|
+
*/
|
|
157
|
+
async reportObservedState(models = []) {
|
|
158
|
+
if (!this.serverDeviceId) {
|
|
159
|
+
throw new OctomilError("INVALID_INPUT", "Device not registered");
|
|
160
|
+
}
|
|
161
|
+
const payload = {
|
|
162
|
+
schemaVersion: "1.4.0",
|
|
163
|
+
deviceId: this.serverDeviceId,
|
|
164
|
+
reportedAt: new Date().toISOString(),
|
|
165
|
+
models,
|
|
166
|
+
active_bindings: models
|
|
167
|
+
.filter((model) => model.status === "active")
|
|
168
|
+
.map((model) => ({
|
|
169
|
+
binding_key: model.bindingKey ?? model.useCase ?? model.modelId,
|
|
170
|
+
base_model_id: model.modelId,
|
|
171
|
+
base_version: model.version ?? "",
|
|
172
|
+
use_case: model.useCase,
|
|
173
|
+
deployment_id: model.deploymentId,
|
|
174
|
+
deployment_key: model.deploymentKey,
|
|
175
|
+
model_name: model.modelName,
|
|
176
|
+
model_ref: model.modelRef,
|
|
177
|
+
})),
|
|
178
|
+
sdkVersion: "1.0.0",
|
|
179
|
+
osVersion: typeof navigator !== "undefined" ? navigator.userAgent : "unknown",
|
|
180
|
+
};
|
|
181
|
+
const headers = {
|
|
182
|
+
"Content-Type": "application/json",
|
|
183
|
+
};
|
|
184
|
+
Object.assign(headers, this.resolveAuthHeaders());
|
|
185
|
+
let resp;
|
|
186
|
+
try {
|
|
187
|
+
resp = await fetch(`${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/observed-state`, { method: "POST", headers, body: JSON.stringify(payload) });
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Report observed state failed: ${String(err)}`, err);
|
|
191
|
+
}
|
|
192
|
+
if (!resp.ok) {
|
|
193
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Report observed state failed: ${resp.status}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Fetch server-authoritative desired state (GAP-13).
|
|
198
|
+
* GETs `/api/v1/devices/{id}/desired-state`.
|
|
199
|
+
*
|
|
200
|
+
* Typically called by {@link SyncManager} during reconciliation, but can
|
|
201
|
+
* also be invoked manually for inspection.
|
|
202
|
+
*/
|
|
203
|
+
async fetchDesiredState() {
|
|
204
|
+
if (!this.serverDeviceId) {
|
|
205
|
+
throw new OctomilError("INVALID_INPUT", "Device not registered");
|
|
206
|
+
}
|
|
207
|
+
const headers = {};
|
|
208
|
+
Object.assign(headers, this.resolveAuthHeaders());
|
|
209
|
+
let resp;
|
|
210
|
+
try {
|
|
211
|
+
resp = await fetch(`${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/desired-state`, { headers });
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Fetch desired state failed: ${String(err)}`, err);
|
|
215
|
+
}
|
|
216
|
+
if (!resp.ok) {
|
|
217
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Fetch desired state failed: ${resp.status}`);
|
|
218
|
+
}
|
|
219
|
+
return (await resp.json());
|
|
220
|
+
}
|
|
221
|
+
async sync(request = {}) {
|
|
222
|
+
if (!this.serverDeviceId) {
|
|
223
|
+
throw new OctomilError("INVALID_INPUT", "Device not registered");
|
|
224
|
+
}
|
|
225
|
+
const headers = {
|
|
226
|
+
"Content-Type": "application/json",
|
|
227
|
+
};
|
|
228
|
+
Object.assign(headers, this.resolveAuthHeaders());
|
|
229
|
+
let resp;
|
|
230
|
+
try {
|
|
231
|
+
resp = await fetch(`${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/sync`, {
|
|
232
|
+
method: "POST",
|
|
233
|
+
headers,
|
|
234
|
+
body: JSON.stringify({
|
|
235
|
+
schemaVersion: request.schemaVersion ?? "1.12.0",
|
|
236
|
+
deviceId: this.serverDeviceId,
|
|
237
|
+
requestedAt: request.requestedAt ?? new Date().toISOString(),
|
|
238
|
+
knownStateVersion: request.knownStateVersion,
|
|
239
|
+
sdkVersion: request.sdkVersion,
|
|
240
|
+
platform: request.platform ?? "browser",
|
|
241
|
+
appId: request.appId,
|
|
242
|
+
appVersion: request.appVersion,
|
|
243
|
+
modelInventory: request.modelInventory ?? [],
|
|
244
|
+
activeVersions: request.activeVersions ?? [],
|
|
245
|
+
availableStorageBytes: request.availableStorageBytes,
|
|
246
|
+
}),
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Device sync failed: ${String(err)}`, err);
|
|
251
|
+
}
|
|
252
|
+
if (!resp.ok) {
|
|
253
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Device sync failed: ${resp.status}`);
|
|
254
|
+
}
|
|
255
|
+
return (await resp.json());
|
|
256
|
+
}
|
|
257
|
+
/** Start periodic heartbeats at the given interval. */
|
|
258
|
+
startHeartbeat(intervalMs = 300_000) {
|
|
259
|
+
this.stopHeartbeat();
|
|
260
|
+
this.heartbeatTimer = setInterval(() => {
|
|
261
|
+
this.heartbeat().catch(() => { });
|
|
262
|
+
}, intervalMs);
|
|
263
|
+
}
|
|
264
|
+
/** Stop periodic heartbeats. */
|
|
265
|
+
stopHeartbeat() {
|
|
266
|
+
if (this.heartbeatTimer) {
|
|
267
|
+
clearInterval(this.heartbeatTimer);
|
|
268
|
+
this.heartbeatTimer = null;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/** The server-assigned device ID, set after registration. */
|
|
272
|
+
get registeredDeviceId() {
|
|
273
|
+
return this.serverDeviceId;
|
|
274
|
+
}
|
|
275
|
+
// -----------------------------------------------------------------------
|
|
276
|
+
// Internal helpers
|
|
277
|
+
// -----------------------------------------------------------------------
|
|
278
|
+
/** Generate a stable device ID by hashing browser fingerprint data. */
|
|
279
|
+
async generateDeviceId() {
|
|
280
|
+
const raw = [
|
|
281
|
+
typeof navigator !== "undefined" ? navigator.userAgent : "unknown",
|
|
282
|
+
typeof screen !== "undefined" ? screen.width : 0,
|
|
283
|
+
typeof screen !== "undefined" ? screen.height : 0,
|
|
284
|
+
typeof Intl !== "undefined"
|
|
285
|
+
? Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
286
|
+
: "UTC",
|
|
287
|
+
].join("|");
|
|
288
|
+
const buf = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(raw));
|
|
289
|
+
return Array.from(new Uint8Array(buf))
|
|
290
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
291
|
+
.join("");
|
|
292
|
+
}
|
|
293
|
+
/** Collect device info for registration payloads. */
|
|
294
|
+
collectDeviceInfo() {
|
|
295
|
+
return {
|
|
296
|
+
platform: "browser",
|
|
297
|
+
user_agent: typeof navigator !== "undefined" ? navigator.userAgent : "unknown",
|
|
298
|
+
screen_width: typeof screen !== "undefined" ? screen.width : 0,
|
|
299
|
+
screen_height: typeof screen !== "undefined" ? screen.height : 0,
|
|
300
|
+
device_memory_gb: typeof navigator !== "undefined"
|
|
301
|
+
? // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
302
|
+
navigator.deviceMemory || 0
|
|
303
|
+
: 0,
|
|
304
|
+
language: typeof navigator !== "undefined" ? navigator.language : "unknown",
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
resolveAuthHeaders() {
|
|
308
|
+
return this.deviceContext?.authHeaders() ?? this.resolveApiKeyHeaders();
|
|
309
|
+
}
|
|
310
|
+
resolveApiKeyHeaders() {
|
|
311
|
+
if (!this.apiKey) {
|
|
312
|
+
return {};
|
|
313
|
+
}
|
|
314
|
+
return { Authorization: `Bearer ${this.apiKey}` };
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../src/control.ts"],"names":[],"mappings":"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"}
|
package/dist/device-auth.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* authenticated model downloads and training round participation.
|
|
6
6
|
*/
|
|
7
7
|
import type { DeviceAuthConfig } from "./types.js";
|
|
8
|
-
export declare class
|
|
8
|
+
export declare class DeviceAuth {
|
|
9
9
|
private readonly serverUrl;
|
|
10
10
|
private readonly apiKey;
|
|
11
11
|
private token;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-auth.d.ts","sourceRoot":"","sources":["../src/device-auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAYpB,qBAAa,
|
|
1
|
+
{"version":3,"file":"device-auth.d.ts","sourceRoot":"","sources":["../src/device-auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAYpB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,gBAAgB;IASpC,6DAA6D;IACvD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC7C,sDAAsD;IAChD,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAiBjC,iCAAiC;IAC3B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CnC,sDAAsD;IAChD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBlC,+CAA+C;IAC/C,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,iCAAiC;IACjC,IAAI,eAAe,IAAI,MAAM,GAAG,IAAI,CAEnC;IAED,sBAAsB;IACtB,OAAO,IAAI,IAAI;YAUD,OAAO;IAYrB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,UAAU;IAKlB,uEAAuE;IACjE,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBzC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,iBAAiB;CAQ1B"}
|
package/dist/device-auth.js
CHANGED
|
@@ -10,9 +10,9 @@ import { OctomilError } from "./types.js";
|
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
11
|
const REFRESH_BUFFER_MS = 30_000; // refresh 30s before expiry
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
|
-
//
|
|
13
|
+
// DeviceAuth
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
15
|
-
export class
|
|
15
|
+
export class DeviceAuth {
|
|
16
16
|
serverUrl;
|
|
17
17
|
apiKey;
|
|
18
18
|
token = null;
|
|
@@ -41,7 +41,7 @@ export class DeviceAuthManager {
|
|
|
41
41
|
}),
|
|
42
42
|
});
|
|
43
43
|
if (!response.ok) {
|
|
44
|
-
throw new OctomilError("
|
|
44
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Device registration failed: HTTP ${response.status}`);
|
|
45
45
|
}
|
|
46
46
|
const data = (await response.json());
|
|
47
47
|
this.token = {
|
|
@@ -55,7 +55,7 @@ export class DeviceAuthManager {
|
|
|
55
55
|
async getToken() {
|
|
56
56
|
this.ensureNotDisposed();
|
|
57
57
|
if (!this.token) {
|
|
58
|
-
throw new OctomilError("
|
|
58
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", "Not authenticated. Call bootstrap() first.");
|
|
59
59
|
}
|
|
60
60
|
if (this.isTokenExpiringSoon()) {
|
|
61
61
|
await this.refreshToken();
|
|
@@ -66,7 +66,7 @@ export class DeviceAuthManager {
|
|
|
66
66
|
async refreshToken() {
|
|
67
67
|
this.ensureNotDisposed();
|
|
68
68
|
if (!this.token) {
|
|
69
|
-
throw new OctomilError("
|
|
69
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", "No token to refresh. Call bootstrap() first.");
|
|
70
70
|
}
|
|
71
71
|
const response = await this.request("/api/v1/auth/refresh", {
|
|
72
72
|
method: "POST",
|
|
@@ -78,7 +78,7 @@ export class DeviceAuthManager {
|
|
|
78
78
|
if (!response.ok) {
|
|
79
79
|
// Token expired beyond repair — clear state
|
|
80
80
|
this.token = null;
|
|
81
|
-
throw new OctomilError("
|
|
81
|
+
throw new OctomilError("NETWORK_UNAVAILABLE", `Token refresh failed: HTTP ${response.status}`);
|
|
82
82
|
}
|
|
83
83
|
const data = (await response.json());
|
|
84
84
|
this.token = {
|
|
@@ -196,7 +196,7 @@ export class DeviceAuthManager {
|
|
|
196
196
|
}
|
|
197
197
|
ensureNotDisposed() {
|
|
198
198
|
if (this.disposed) {
|
|
199
|
-
throw new OctomilError("
|
|
199
|
+
throw new OctomilError("CANCELLED", "DeviceAuth has been disposed.");
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
}
|
package/dist/device-auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-auth.js","sourceRoot":"","sources":["../src/device-auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO1C,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,4BAA4B;AAE9D,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"device-auth.js","sourceRoot":"","sources":["../src/device-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @octomil/browser — Device context for silent registration
|
|
3
|
+
*
|
|
4
|
+
* Tracks installation identity, registration state, and auth tokens
|
|
5
|
+
* for the device registration flow. Uses crypto.randomUUID() for
|
|
6
|
+
* installation IDs (NOT browser fingerprinting) and persists to
|
|
7
|
+
* localStorage where available.
|
|
8
|
+
*/
|
|
9
|
+
export type RegistrationState = "pending" | "registered" | "failed";
|
|
10
|
+
export type TokenState = {
|
|
11
|
+
type: "none";
|
|
12
|
+
} | {
|
|
13
|
+
type: "valid";
|
|
14
|
+
accessToken: string;
|
|
15
|
+
expiresAt: Date;
|
|
16
|
+
} | {
|
|
17
|
+
type: "expired";
|
|
18
|
+
};
|
|
19
|
+
export declare class DeviceContext {
|
|
20
|
+
readonly installationId: string;
|
|
21
|
+
readonly orgId: string | null;
|
|
22
|
+
readonly appId: string | null;
|
|
23
|
+
private _registrationState;
|
|
24
|
+
private _tokenState;
|
|
25
|
+
private _serverDeviceId;
|
|
26
|
+
constructor(opts: {
|
|
27
|
+
installationId: string;
|
|
28
|
+
orgId?: string | null;
|
|
29
|
+
appId?: string | null;
|
|
30
|
+
});
|
|
31
|
+
get registrationState(): RegistrationState;
|
|
32
|
+
get tokenState(): TokenState;
|
|
33
|
+
get serverDeviceId(): string | null;
|
|
34
|
+
get isRegistered(): boolean;
|
|
35
|
+
authHeaders(): Record<string, string> | null;
|
|
36
|
+
telemetryResource(): Record<string, string>;
|
|
37
|
+
/** @internal */
|
|
38
|
+
_updateRegistered(serverDeviceId: string, accessToken: string, expiresAt: Date): void;
|
|
39
|
+
/** @internal */
|
|
40
|
+
_updateToken(accessToken: string, expiresAt: Date): void;
|
|
41
|
+
/** @internal */
|
|
42
|
+
_markFailed(): void;
|
|
43
|
+
/** @internal */
|
|
44
|
+
_markTokenExpired(): void;
|
|
45
|
+
private static readonly STORAGE_KEY;
|
|
46
|
+
static getOrCreateInstallationId(): string;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=device-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-context.d.ts","sourceRoot":"","sources":["../src/device-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEpE,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAMxB,qBAAa,aAAa;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,eAAe,CAAuB;gBAElC,IAAI,EAAE;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB;IAMD,IAAI,iBAAiB,IAAI,iBAAiB,CAEzC;IACD,IAAI,UAAU,IAAI,UAAU,CAE3B;IACD,IAAI,cAAc,IAAI,MAAM,GAAG,IAAI,CAElC;IACD,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAS5C,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAU3C,gBAAgB;IAChB,iBAAiB,CACf,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,IAAI,GACd,IAAI;IAMP,gBAAgB;IAChB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI;IAIxD,gBAAgB;IAChB,WAAW,IAAI,IAAI;IAInB,gBAAgB;IAChB,iBAAiB,IAAI,IAAI;IAQzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEhE,MAAM,CAAC,yBAAyB,IAAI,MAAM;CAY3C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @octomil/browser — Device context for silent registration
|
|
3
|
+
*
|
|
4
|
+
* Tracks installation identity, registration state, and auth tokens
|
|
5
|
+
* for the device registration flow. Uses crypto.randomUUID() for
|
|
6
|
+
* installation IDs (NOT browser fingerprinting) and persists to
|
|
7
|
+
* localStorage where available.
|
|
8
|
+
*/
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// DeviceContext
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
export class DeviceContext {
|
|
13
|
+
installationId;
|
|
14
|
+
orgId;
|
|
15
|
+
appId;
|
|
16
|
+
_registrationState = "pending";
|
|
17
|
+
_tokenState = { type: "none" };
|
|
18
|
+
_serverDeviceId = null;
|
|
19
|
+
constructor(opts) {
|
|
20
|
+
this.installationId = opts.installationId;
|
|
21
|
+
this.orgId = opts.orgId ?? null;
|
|
22
|
+
this.appId = opts.appId ?? null;
|
|
23
|
+
}
|
|
24
|
+
get registrationState() {
|
|
25
|
+
return this._registrationState;
|
|
26
|
+
}
|
|
27
|
+
get tokenState() {
|
|
28
|
+
return this._tokenState;
|
|
29
|
+
}
|
|
30
|
+
get serverDeviceId() {
|
|
31
|
+
return this._serverDeviceId;
|
|
32
|
+
}
|
|
33
|
+
get isRegistered() {
|
|
34
|
+
return this._registrationState === "registered";
|
|
35
|
+
}
|
|
36
|
+
authHeaders() {
|
|
37
|
+
if (this._tokenState.type === "valid") {
|
|
38
|
+
if (this._tokenState.expiresAt > new Date()) {
|
|
39
|
+
return { Authorization: `Bearer ${this._tokenState.accessToken}` };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
telemetryResource() {
|
|
45
|
+
const resource = {
|
|
46
|
+
"device.id": this.installationId,
|
|
47
|
+
platform: "browser",
|
|
48
|
+
};
|
|
49
|
+
if (this.orgId)
|
|
50
|
+
resource["org.id"] = this.orgId;
|
|
51
|
+
if (this.appId)
|
|
52
|
+
resource["app.id"] = this.appId;
|
|
53
|
+
return resource;
|
|
54
|
+
}
|
|
55
|
+
/** @internal */
|
|
56
|
+
_updateRegistered(serverDeviceId, accessToken, expiresAt) {
|
|
57
|
+
this._serverDeviceId = serverDeviceId;
|
|
58
|
+
this._tokenState = { type: "valid", accessToken, expiresAt };
|
|
59
|
+
this._registrationState = "registered";
|
|
60
|
+
}
|
|
61
|
+
/** @internal */
|
|
62
|
+
_updateToken(accessToken, expiresAt) {
|
|
63
|
+
this._tokenState = { type: "valid", accessToken, expiresAt };
|
|
64
|
+
}
|
|
65
|
+
/** @internal */
|
|
66
|
+
_markFailed() {
|
|
67
|
+
this._registrationState = "failed";
|
|
68
|
+
}
|
|
69
|
+
/** @internal */
|
|
70
|
+
_markTokenExpired() {
|
|
71
|
+
this._tokenState = { type: "expired" };
|
|
72
|
+
}
|
|
73
|
+
// -----------------------------------------------------------------------
|
|
74
|
+
// Installation ID persistence
|
|
75
|
+
// -----------------------------------------------------------------------
|
|
76
|
+
static STORAGE_KEY = "octomil_installation_id";
|
|
77
|
+
static getOrCreateInstallationId() {
|
|
78
|
+
try {
|
|
79
|
+
const existing = localStorage.getItem(DeviceContext.STORAGE_KEY);
|
|
80
|
+
if (existing)
|
|
81
|
+
return existing;
|
|
82
|
+
const newId = crypto.randomUUID();
|
|
83
|
+
localStorage.setItem(DeviceContext.STORAGE_KEY, newId);
|
|
84
|
+
return newId;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// localStorage unavailable (private browsing, etc.)
|
|
88
|
+
return crypto.randomUUID();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=device-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-context.js","sourceRoot":"","sources":["../src/device-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ControlClient, DesiredState, DeviceSyncRequest, DeviceSyncResponse, ObservedModelStatus } from "./control.js";
|
|
2
|
+
export declare class DevicesClient {
|
|
3
|
+
private readonly control;
|
|
4
|
+
constructor(control: ControlClient);
|
|
5
|
+
desiredState(): Promise<DesiredState>;
|
|
6
|
+
observedState(models?: ObservedModelStatus[]): Promise<void>;
|
|
7
|
+
sync(request?: {
|
|
8
|
+
knownStateVersion?: string;
|
|
9
|
+
sdkVersion?: string;
|
|
10
|
+
appId?: string;
|
|
11
|
+
appVersion?: string;
|
|
12
|
+
modelInventory?: DeviceSyncRequest["modelInventory"];
|
|
13
|
+
activeVersions?: DeviceSyncRequest["activeVersions"];
|
|
14
|
+
availableStorageBytes?: number;
|
|
15
|
+
}): Promise<DeviceSyncResponse>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=devices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../src/devices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAEtB,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAE7C,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAIrC,aAAa,CAAC,MAAM,GAAE,mBAAmB,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,IAAI,CAAC,OAAO,GAAE;QAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QACrD,cAAc,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QACrD,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGrC"}
|
package/dist/devices.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class DevicesClient {
|
|
2
|
+
control;
|
|
3
|
+
constructor(control) {
|
|
4
|
+
this.control = control;
|
|
5
|
+
}
|
|
6
|
+
async desiredState() {
|
|
7
|
+
return this.control.fetchDesiredState();
|
|
8
|
+
}
|
|
9
|
+
async observedState(models = []) {
|
|
10
|
+
await this.control.reportObservedState(models);
|
|
11
|
+
}
|
|
12
|
+
async sync(request = {}) {
|
|
13
|
+
return this.control.sync(request);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../src/devices.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAgC,EAAE;QACpD,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAQP,EAAE;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF"}
|