@camstack/addon-remote-storage 1.1.0 → 1.1.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/dist/s3.addon.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-C_Ep1mdF.js");
5
+ const require_shared = require("./shared-DB-bSHfI.js");
6
6
  let node_stream = require("node:stream");
7
7
  let _aws_sdk_client_s3 = require("@aws-sdk/client-s3");
8
8
  let _aws_sdk_lib_storage = require("@aws-sdk/lib-storage");
package/dist/s3.addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-Dx4AECvI.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-Df-ffKz9.mjs";
2
2
  import { PassThrough } from "node:stream";
3
3
  import { DeleteObjectCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
4
4
  import { Upload } from "@aws-sdk/lib-storage";
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-C_Ep1mdF.js");
5
+ const require_shared = require("./shared-DB-bSHfI.js");
6
6
  let ssh2 = require("ssh2");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_shared.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-Dx4AECvI.mjs";
1
+ import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-Df-ffKz9.mjs";
2
2
  import { Client } from "ssh2";
3
3
  import * as path from "node:path";
4
4
  //#region src/providers/sftp/sftp-config-schema.ts
@@ -4652,7 +4652,7 @@ function _instanceof(cls, params = {}) {
4652
4652
  return inst;
4653
4653
  }
4654
4654
  //#endregion
4655
- //#region ../types/dist/sleep-B1dKJAMJ.mjs
4655
+ //#region ../types/dist/sleep-BV7rLc6Y.mjs
4656
4656
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4657
4657
  EventCategory["SystemBoot"] = "system.boot";
4658
4658
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -5131,6 +5131,12 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5131
5131
  * Payload: `{ deviceId, childDeviceIds, hiddenChildIds }`.
5132
5132
  */
5133
5133
  EventCategory["AccessoriesChanged"] = "accessories.onAccessoriesChanged";
5134
+ /**
5135
+ * Progress update from a running model conversion job.
5136
+ * Payload: `{ kind: 'model-convert', phase, sessionId?, pct?, detail? }`.
5137
+ * Emitted by `addon-model-studio` on the converting node.
5138
+ */
5139
+ EventCategory["ModelConvertProgress"] = "model-convert.progress";
5134
5140
  return EventCategory;
5135
5141
  }({});
5136
5142
  Object.fromEntries([
@@ -6652,6 +6658,13 @@ object({
6652
6658
  unreachable: number()
6653
6659
  })
6654
6660
  });
6661
+ var LabelDefinitionSchema = object({
6662
+ id: string(),
6663
+ name: string(),
6664
+ category: string().optional(),
6665
+ description: string().optional(),
6666
+ icon: string().optional()
6667
+ });
6655
6668
  var MODEL_FORMATS = [
6656
6669
  "onnx",
6657
6670
  "coreml",
@@ -6660,6 +6673,120 @@ var MODEL_FORMATS = [
6660
6673
  "pt"
6661
6674
  ];
6662
6675
  /**
6676
+ * Multi-file format payload.
6677
+ *
6678
+ * - Directory formats (`isDirectory: true`, e.g. `.mlpackage`): files
6679
+ * relative to the directory root — the downloader fetches each from
6680
+ * `{url}/{file}` into `{modelDir}/{file}`. If omitted, it probes the
6681
+ * HuggingFace API (slower).
6682
+ * - Single-file formats (no `isDirectory`, e.g. OpenVINO IR): sibling
6683
+ * files fetched from the SAME remote directory as `url` and stored flat
6684
+ * alongside the main file — e.g. `['camstack-yolov9t.bin']` for the IR
6685
+ * weights next to `camstack-yolov9t.xml`.
6686
+ */
6687
+ var ModelFormatEntrySchema = object({
6688
+ url: string(),
6689
+ sizeMB: number(),
6690
+ /** Whether this format is a directory bundle (e.g., .mlpackage) rather than a single file */
6691
+ isDirectory: boolean().optional(),
6692
+ /** Multi-file payload (directory members or sibling files). */
6693
+ files: array(string()).readonly().optional(),
6694
+ /** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
6695
+ runtimes: array(_enum(["node", "python"])).readonly().optional()
6696
+ });
6697
+ /**
6698
+ * Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
6699
+ * The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
6700
+ */
6701
+ var ModelExtraFileSchema = object({
6702
+ url: string(),
6703
+ filename: string(),
6704
+ sizeMB: number()
6705
+ });
6706
+ /**
6707
+ * Per-format payload map. Modelled as an explicit object (one optional key
6708
+ * per `ModelFormat`) rather than `z.record(enum, …)` — zod v4's enum-keyed
6709
+ * record requires every key, but a catalog entry only ships a subset of
6710
+ * formats.
6711
+ */
6712
+ var ModelFormatsSchema = object({
6713
+ onnx: ModelFormatEntrySchema.optional(),
6714
+ coreml: ModelFormatEntrySchema.optional(),
6715
+ openvino: ModelFormatEntrySchema.optional(),
6716
+ tflite: ModelFormatEntrySchema.optional(),
6717
+ pt: ModelFormatEntrySchema.optional()
6718
+ });
6719
+ var ModelCatalogEntrySchema = object({
6720
+ id: string(),
6721
+ name: string(),
6722
+ description: string(),
6723
+ formats: ModelFormatsSchema,
6724
+ inputSize: object({
6725
+ width: number(),
6726
+ height: number()
6727
+ }),
6728
+ labels: array(LabelDefinitionSchema).readonly(),
6729
+ inputLayout: _enum(["nchw", "nhwc"]).optional(),
6730
+ inputNormalization: _enum([
6731
+ "zero-one",
6732
+ "imagenet",
6733
+ "none"
6734
+ ]).optional(),
6735
+ preprocessMode: _enum(["letterbox", "resize"]).optional(),
6736
+ /**
6737
+ * When true, the executor produces a landmark-aligned crop (similarity warp
6738
+ * onto the canonical template) before this step runs, instead of a plain
6739
+ * axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
6740
+ * their embeddings are only discriminative on an aligned input. The face
6741
+ * detector that produced the parent detail must emit 5 landmarks.
6742
+ */
6743
+ faceAlignment: boolean().optional(),
6744
+ /**
6745
+ * Auxiliary files required at runtime (labels JSON, charset dict, etc.).
6746
+ * Downloaded into the same modelsDir alongside the model file.
6747
+ */
6748
+ extraFiles: array(ModelExtraFileSchema).readonly().optional()
6749
+ });
6750
+ var ConvertTargetSchema = discriminatedUnion("format", [object({
6751
+ format: literal("openvino"),
6752
+ precisions: array(_enum(["fp16", "int8"])).min(1).readonly()
6753
+ }), object({ format: literal("coreml") })]);
6754
+ var ModelConvertMetadataSchema = object({
6755
+ id: string().regex(/^[a-zA-Z0-9._-]+$/),
6756
+ name: string(),
6757
+ labels: array(LabelDefinitionSchema).readonly(),
6758
+ inputSize: object({
6759
+ width: number(),
6760
+ height: number()
6761
+ }),
6762
+ inputLayout: _enum(["nchw", "nhwc"]).optional(),
6763
+ inputNormalization: _enum([
6764
+ "zero-one",
6765
+ "imagenet",
6766
+ "none"
6767
+ ]).optional(),
6768
+ preprocessMode: _enum(["letterbox", "resize"]).optional(),
6769
+ outputFormat: _enum([
6770
+ "yolo",
6771
+ "ssd",
6772
+ "embedding",
6773
+ "classification",
6774
+ "ocr",
6775
+ "segmentation"
6776
+ ]),
6777
+ faceAlignment: boolean().optional()
6778
+ });
6779
+ var ConvertResultSchema = object({
6780
+ entry: ModelCatalogEntrySchema,
6781
+ artifacts: array(object({
6782
+ format: _enum(MODEL_FORMATS),
6783
+ precision: _enum(["fp16", "int8"]).optional(),
6784
+ sizeMB: number(),
6785
+ validated: boolean(),
6786
+ files: array(string()).readonly()
6787
+ })).readonly()
6788
+ });
6789
+ /**
6663
6790
  * Numeric day-of-week: 0 = Sunday … 6 = Saturday (matches `Date.getDay`).
6664
6791
  * Named `RecordingWeekday` to avoid collision with the string-union
6665
6792
  * `Weekday` exported from `interfaces/timezones.ts`.
@@ -12543,6 +12670,54 @@ var EnrichedWidgetMetadataSchema = WidgetMetadataSchema.extend({
12543
12670
  bundleUrl: string()
12544
12671
  });
12545
12672
  method(_void(), array(EnrichedWidgetMetadataSchema).readonly());
12673
+ /**
12674
+ * `custom-model-registry` — collection cap exposing operator-registered
12675
+ * custom detection models. Each provider (today: `addon-model-studio`)
12676
+ * contributes a list of `CustomModelDescriptor`s; the hub auto-concatenates
12677
+ * them across providers (`concatCollection`).
12678
+ *
12679
+ * The detection-pipeline is *aware* of this cap: when at least one provider
12680
+ * exists it unions these descriptors into the per-step model picker and the
12681
+ * runtime model-resolution path, alongside the static catalog. When no
12682
+ * provider exists the consumer no-ops entirely (identical to the catalog-only
12683
+ * behaviour).
12684
+ *
12685
+ * A descriptor carries a full `ModelCatalogEntry` directly — the same shape
12686
+ * the static catalog uses — so the existing download/resolution code consumes
12687
+ * it unchanged. `stepId` is the detection step the model targets
12688
+ * (e.g. `'object-detection'`).
12689
+ */
12690
+ var CustomModelDescriptorSchema = object({
12691
+ stepId: string(),
12692
+ entry: ModelCatalogEntrySchema
12693
+ });
12694
+ method(_void(), array(CustomModelDescriptorSchema).readonly());
12695
+ method(object({
12696
+ nodeId: string(),
12697
+ modelId: string(),
12698
+ format: _enum(MODEL_FORMATS),
12699
+ entry: ModelCatalogEntrySchema
12700
+ }), object({
12701
+ ok: boolean(),
12702
+ /** sha256 of the staged tarball (empty for a hub-local no-op). */
12703
+ sha256: string(),
12704
+ bytes: number(),
12705
+ /** The target node's modelsDir the artifact landed in. */
12706
+ path: string()
12707
+ }), {
12708
+ kind: "mutation",
12709
+ auth: "admin"
12710
+ });
12711
+ method(object({
12712
+ sourceUrl: string(),
12713
+ metadata: ModelConvertMetadataSchema,
12714
+ targets: array(ConvertTargetSchema).min(1).readonly(),
12715
+ calibrationRef: string().optional(),
12716
+ sessionId: string().optional()
12717
+ }), ConvertResultSchema, {
12718
+ kind: "mutation",
12719
+ auth: "admin"
12720
+ });
12546
12721
  var AddonHttpRouteSchema = object({
12547
12722
  method: _enum([
12548
12723
  "GET",
@@ -17437,6 +17612,12 @@ Object.freeze({
17437
17612
  addonId: null,
17438
17613
  access: "create"
17439
17614
  },
17615
+ "customModelRegistry.listModels": {
17616
+ capName: "custom-model-registry",
17617
+ capScope: "system",
17618
+ addonId: null,
17619
+ access: "view"
17620
+ },
17440
17621
  "decoder.createSession": {
17441
17622
  capName: "decoder",
17442
17623
  capScope: "system",
@@ -18661,6 +18842,18 @@ Object.freeze({
18661
18842
  addonId: null,
18662
18843
  access: "view"
18663
18844
  },
18845
+ "modelConvert.convert": {
18846
+ capName: "model-convert",
18847
+ capScope: "system",
18848
+ addonId: null,
18849
+ access: "create"
18850
+ },
18851
+ "modelDistributor.distributeModel": {
18852
+ capName: "model-distributor",
18853
+ capScope: "system",
18854
+ addonId: null,
18855
+ access: "create"
18856
+ },
18664
18857
  "motion.isDetected": {
18665
18858
  capName: "motion",
18666
18859
  capScope: "device",
@@ -4629,7 +4629,7 @@ function _instanceof(cls, params = {}) {
4629
4629
  return inst;
4630
4630
  }
4631
4631
  //#endregion
4632
- //#region ../types/dist/sleep-B1dKJAMJ.mjs
4632
+ //#region ../types/dist/sleep-BV7rLc6Y.mjs
4633
4633
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4634
4634
  EventCategory["SystemBoot"] = "system.boot";
4635
4635
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -5108,6 +5108,12 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5108
5108
  * Payload: `{ deviceId, childDeviceIds, hiddenChildIds }`.
5109
5109
  */
5110
5110
  EventCategory["AccessoriesChanged"] = "accessories.onAccessoriesChanged";
5111
+ /**
5112
+ * Progress update from a running model conversion job.
5113
+ * Payload: `{ kind: 'model-convert', phase, sessionId?, pct?, detail? }`.
5114
+ * Emitted by `addon-model-studio` on the converting node.
5115
+ */
5116
+ EventCategory["ModelConvertProgress"] = "model-convert.progress";
5111
5117
  return EventCategory;
5112
5118
  }({});
5113
5119
  Object.fromEntries([
@@ -6629,6 +6635,13 @@ object({
6629
6635
  unreachable: number()
6630
6636
  })
6631
6637
  });
6638
+ var LabelDefinitionSchema = object({
6639
+ id: string(),
6640
+ name: string(),
6641
+ category: string().optional(),
6642
+ description: string().optional(),
6643
+ icon: string().optional()
6644
+ });
6632
6645
  var MODEL_FORMATS = [
6633
6646
  "onnx",
6634
6647
  "coreml",
@@ -6637,6 +6650,120 @@ var MODEL_FORMATS = [
6637
6650
  "pt"
6638
6651
  ];
6639
6652
  /**
6653
+ * Multi-file format payload.
6654
+ *
6655
+ * - Directory formats (`isDirectory: true`, e.g. `.mlpackage`): files
6656
+ * relative to the directory root — the downloader fetches each from
6657
+ * `{url}/{file}` into `{modelDir}/{file}`. If omitted, it probes the
6658
+ * HuggingFace API (slower).
6659
+ * - Single-file formats (no `isDirectory`, e.g. OpenVINO IR): sibling
6660
+ * files fetched from the SAME remote directory as `url` and stored flat
6661
+ * alongside the main file — e.g. `['camstack-yolov9t.bin']` for the IR
6662
+ * weights next to `camstack-yolov9t.xml`.
6663
+ */
6664
+ var ModelFormatEntrySchema = object({
6665
+ url: string(),
6666
+ sizeMB: number(),
6667
+ /** Whether this format is a directory bundle (e.g., .mlpackage) rather than a single file */
6668
+ isDirectory: boolean().optional(),
6669
+ /** Multi-file payload (directory members or sibling files). */
6670
+ files: array(string()).readonly().optional(),
6671
+ /** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
6672
+ runtimes: array(_enum(["node", "python"])).readonly().optional()
6673
+ });
6674
+ /**
6675
+ * Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
6676
+ * The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
6677
+ */
6678
+ var ModelExtraFileSchema = object({
6679
+ url: string(),
6680
+ filename: string(),
6681
+ sizeMB: number()
6682
+ });
6683
+ /**
6684
+ * Per-format payload map. Modelled as an explicit object (one optional key
6685
+ * per `ModelFormat`) rather than `z.record(enum, …)` — zod v4's enum-keyed
6686
+ * record requires every key, but a catalog entry only ships a subset of
6687
+ * formats.
6688
+ */
6689
+ var ModelFormatsSchema = object({
6690
+ onnx: ModelFormatEntrySchema.optional(),
6691
+ coreml: ModelFormatEntrySchema.optional(),
6692
+ openvino: ModelFormatEntrySchema.optional(),
6693
+ tflite: ModelFormatEntrySchema.optional(),
6694
+ pt: ModelFormatEntrySchema.optional()
6695
+ });
6696
+ var ModelCatalogEntrySchema = object({
6697
+ id: string(),
6698
+ name: string(),
6699
+ description: string(),
6700
+ formats: ModelFormatsSchema,
6701
+ inputSize: object({
6702
+ width: number(),
6703
+ height: number()
6704
+ }),
6705
+ labels: array(LabelDefinitionSchema).readonly(),
6706
+ inputLayout: _enum(["nchw", "nhwc"]).optional(),
6707
+ inputNormalization: _enum([
6708
+ "zero-one",
6709
+ "imagenet",
6710
+ "none"
6711
+ ]).optional(),
6712
+ preprocessMode: _enum(["letterbox", "resize"]).optional(),
6713
+ /**
6714
+ * When true, the executor produces a landmark-aligned crop (similarity warp
6715
+ * onto the canonical template) before this step runs, instead of a plain
6716
+ * axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
6717
+ * their embeddings are only discriminative on an aligned input. The face
6718
+ * detector that produced the parent detail must emit 5 landmarks.
6719
+ */
6720
+ faceAlignment: boolean().optional(),
6721
+ /**
6722
+ * Auxiliary files required at runtime (labels JSON, charset dict, etc.).
6723
+ * Downloaded into the same modelsDir alongside the model file.
6724
+ */
6725
+ extraFiles: array(ModelExtraFileSchema).readonly().optional()
6726
+ });
6727
+ var ConvertTargetSchema = discriminatedUnion("format", [object({
6728
+ format: literal("openvino"),
6729
+ precisions: array(_enum(["fp16", "int8"])).min(1).readonly()
6730
+ }), object({ format: literal("coreml") })]);
6731
+ var ModelConvertMetadataSchema = object({
6732
+ id: string().regex(/^[a-zA-Z0-9._-]+$/),
6733
+ name: string(),
6734
+ labels: array(LabelDefinitionSchema).readonly(),
6735
+ inputSize: object({
6736
+ width: number(),
6737
+ height: number()
6738
+ }),
6739
+ inputLayout: _enum(["nchw", "nhwc"]).optional(),
6740
+ inputNormalization: _enum([
6741
+ "zero-one",
6742
+ "imagenet",
6743
+ "none"
6744
+ ]).optional(),
6745
+ preprocessMode: _enum(["letterbox", "resize"]).optional(),
6746
+ outputFormat: _enum([
6747
+ "yolo",
6748
+ "ssd",
6749
+ "embedding",
6750
+ "classification",
6751
+ "ocr",
6752
+ "segmentation"
6753
+ ]),
6754
+ faceAlignment: boolean().optional()
6755
+ });
6756
+ var ConvertResultSchema = object({
6757
+ entry: ModelCatalogEntrySchema,
6758
+ artifacts: array(object({
6759
+ format: _enum(MODEL_FORMATS),
6760
+ precision: _enum(["fp16", "int8"]).optional(),
6761
+ sizeMB: number(),
6762
+ validated: boolean(),
6763
+ files: array(string()).readonly()
6764
+ })).readonly()
6765
+ });
6766
+ /**
6640
6767
  * Numeric day-of-week: 0 = Sunday … 6 = Saturday (matches `Date.getDay`).
6641
6768
  * Named `RecordingWeekday` to avoid collision with the string-union
6642
6769
  * `Weekday` exported from `interfaces/timezones.ts`.
@@ -12520,6 +12647,54 @@ var EnrichedWidgetMetadataSchema = WidgetMetadataSchema.extend({
12520
12647
  bundleUrl: string()
12521
12648
  });
12522
12649
  method(_void(), array(EnrichedWidgetMetadataSchema).readonly());
12650
+ /**
12651
+ * `custom-model-registry` — collection cap exposing operator-registered
12652
+ * custom detection models. Each provider (today: `addon-model-studio`)
12653
+ * contributes a list of `CustomModelDescriptor`s; the hub auto-concatenates
12654
+ * them across providers (`concatCollection`).
12655
+ *
12656
+ * The detection-pipeline is *aware* of this cap: when at least one provider
12657
+ * exists it unions these descriptors into the per-step model picker and the
12658
+ * runtime model-resolution path, alongside the static catalog. When no
12659
+ * provider exists the consumer no-ops entirely (identical to the catalog-only
12660
+ * behaviour).
12661
+ *
12662
+ * A descriptor carries a full `ModelCatalogEntry` directly — the same shape
12663
+ * the static catalog uses — so the existing download/resolution code consumes
12664
+ * it unchanged. `stepId` is the detection step the model targets
12665
+ * (e.g. `'object-detection'`).
12666
+ */
12667
+ var CustomModelDescriptorSchema = object({
12668
+ stepId: string(),
12669
+ entry: ModelCatalogEntrySchema
12670
+ });
12671
+ method(_void(), array(CustomModelDescriptorSchema).readonly());
12672
+ method(object({
12673
+ nodeId: string(),
12674
+ modelId: string(),
12675
+ format: _enum(MODEL_FORMATS),
12676
+ entry: ModelCatalogEntrySchema
12677
+ }), object({
12678
+ ok: boolean(),
12679
+ /** sha256 of the staged tarball (empty for a hub-local no-op). */
12680
+ sha256: string(),
12681
+ bytes: number(),
12682
+ /** The target node's modelsDir the artifact landed in. */
12683
+ path: string()
12684
+ }), {
12685
+ kind: "mutation",
12686
+ auth: "admin"
12687
+ });
12688
+ method(object({
12689
+ sourceUrl: string(),
12690
+ metadata: ModelConvertMetadataSchema,
12691
+ targets: array(ConvertTargetSchema).min(1).readonly(),
12692
+ calibrationRef: string().optional(),
12693
+ sessionId: string().optional()
12694
+ }), ConvertResultSchema, {
12695
+ kind: "mutation",
12696
+ auth: "admin"
12697
+ });
12523
12698
  var AddonHttpRouteSchema = object({
12524
12699
  method: _enum([
12525
12700
  "GET",
@@ -17414,6 +17589,12 @@ Object.freeze({
17414
17589
  addonId: null,
17415
17590
  access: "create"
17416
17591
  },
17592
+ "customModelRegistry.listModels": {
17593
+ capName: "custom-model-registry",
17594
+ capScope: "system",
17595
+ addonId: null,
17596
+ access: "view"
17597
+ },
17417
17598
  "decoder.createSession": {
17418
17599
  capName: "decoder",
17419
17600
  capScope: "system",
@@ -18638,6 +18819,18 @@ Object.freeze({
18638
18819
  addonId: null,
18639
18820
  access: "view"
18640
18821
  },
18822
+ "modelConvert.convert": {
18823
+ capName: "model-convert",
18824
+ capScope: "system",
18825
+ addonId: null,
18826
+ access: "create"
18827
+ },
18828
+ "modelDistributor.distributeModel": {
18829
+ capName: "model-distributor",
18830
+ capScope: "system",
18831
+ addonId: null,
18832
+ access: "create"
18833
+ },
18641
18834
  "motion.isDetected": {
18642
18835
  capName: "motion",
18643
18836
  capScope: "device",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-C_Ep1mdF.js");
5
+ const require_shared = require("./shared-DB-bSHfI.js");
6
6
  let node_stream = require("node:stream");
7
7
  let webdav = require("webdav");
8
8
  //#region src/providers/webdav/webdav-config-schema.ts
@@ -1,4 +1,4 @@
1
- import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-Dx4AECvI.mjs";
1
+ import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-Df-ffKz9.mjs";
2
2
  import { PassThrough } from "node:stream";
3
3
  import { AuthType, createClient } from "webdav";
4
4
  //#region src/providers/webdav/webdav-config-schema.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-remote-storage",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",