@camstack/addon-remote-storage 1.2.96 → 1.2.98

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-B99wFlH6.js");
5
+ const require_shared = require("./shared-DOPOfpNg.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-BOK9gl06.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-DW9PrJ9O.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-B99wFlH6.js");
5
+ const require_shared = require("./shared-DOPOfpNg.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-BOK9gl06.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-DW9PrJ9O.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
@@ -7311,6 +7311,23 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
7311
7311
  action: string().min(1),
7312
7312
  input: unknown()
7313
7313
  }), unknown(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
7314
+ new Set([
7315
+ "track",
7316
+ "summary",
7317
+ "face",
7318
+ "identity",
7319
+ "plate",
7320
+ "vehicle",
7321
+ "scene",
7322
+ "motion",
7323
+ "object",
7324
+ "audio"
7325
+ ]);
7326
+ new Set([
7327
+ "motion",
7328
+ "object",
7329
+ "audio"
7330
+ ]);
7314
7331
  var EncodeProfileSchema = object({
7315
7332
  video: object({
7316
7333
  codec: _enum([
@@ -12409,8 +12426,17 @@ method(object({
12409
12426
  }), array(SettingsRecordSchema).readonly()), method(object({
12410
12427
  namespace: string().optional(),
12411
12428
  collection: string(),
12412
- record: SettingsRecordSchema
12413
- }), _void(), { kind: "mutation" }), method(object({
12429
+ record: object({
12430
+ id: string().optional(),
12431
+ data: record(string(), unknown())
12432
+ })
12433
+ }), object({
12434
+ /**
12435
+ * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
12436
+ * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
12437
+ * primary key — which is the only place an auto key is knowable.
12438
+ */
12439
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
12414
12440
  namespace: string().optional(),
12415
12441
  collection: string(),
12416
12442
  records: array(BulkRecordSchema).readonly()
@@ -12519,8 +12545,17 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
12519
12545
  }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
12520
12546
  namespace: string().optional(),
12521
12547
  collection: string(),
12522
- record: SettingsRecordSchema
12523
- }), _void(), {
12548
+ record: object({
12549
+ id: string().optional(),
12550
+ data: record(string(), unknown())
12551
+ })
12552
+ }), object({
12553
+ /**
12554
+ * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
12555
+ * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
12556
+ * primary key — which is the only place an auto key is knowable.
12557
+ */
12558
+ id: union([string(), number()]) }), {
12524
12559
  kind: "mutation",
12525
12560
  auth: "admin"
12526
12561
  }), method(object({
@@ -19162,7 +19197,20 @@ var TrackSchema = object({
19162
19197
  ...TrackRetrainFields
19163
19198
  });
19164
19199
  var BaseEventFields = {
19165
- id: string(),
19200
+ /**
19201
+ * A SQLite ROWID, assigned by the database (D474).
19202
+ *
19203
+ * Was a 36-character UUID and cost 263 MB of a 1 117 MB database — paid
19204
+ * TWICE per row, in the row and in the primary-key index, across 2.1 million
19205
+ * motion, audio and object events. An `INTEGER PRIMARY KEY` in SQLite **is**
19206
+ * the rowid: the table itself is that B-tree, so the index stops existing
19207
+ * rather than getting smaller. No shorter string does that.
19208
+ *
19209
+ * Defined once here for all three event kinds, which is why they move
19210
+ * together: a per-table migration would have forked this and
19211
+ * `COMMON_BASE_COLUMNS` and reunited them two stages later.
19212
+ */
19213
+ id: number().int(),
19166
19214
  deviceId: number(),
19167
19215
  timestamp: number()
19168
19216
  };
@@ -19181,7 +19229,34 @@ var MotionEventSchema = object({
19181
19229
  /** Omitted in slim projection. */
19182
19230
  frameHeight: number().optional(),
19183
19231
  /** Populated by B5 (recording playback URL for this event). */
19184
- mediaUrl: string().optional()
19232
+ mediaUrl: string().optional(),
19233
+ /**
19234
+ * One row per motion EPISODE, not one per push (D475). `null` while the
19235
+ * episode is still open — a further rising edge extends it in place rather
19236
+ * than inserting a new row. Set once, at close, to `lastOnAt - startedAt`
19237
+ * (the span from the first rising edge to the LAST one, deliberately NOT
19238
+ * `closedAt - startedAt` — the close delay is a quiet CONFIRMATION, not
19239
+ * movement, and folding it in would report `MOTION_CLOSE_AFTER_MS` of
19240
+ * motion for an instantaneous trigger).
19241
+ *
19242
+ * **Absent** (not merely `null`) on a row written before D475 — that means
19243
+ * "closed the old way, before this column existed", never "still open".
19244
+ * Nothing in this codebase may read an absent `durationMs` as an open
19245
+ * episode; only `null` means open.
19246
+ */
19247
+ durationMs: number().nullable().optional(),
19248
+ /**
19249
+ * Ms offsets from `timestamp` (the episode's own first rising edge, so the
19250
+ * first entry is always `0`) of every genuine off→on transition the
19251
+ * episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
19252
+ * push: a firmware source that keepalives at ~1 Hz for the whole burst
19253
+ * (Reolink, Hikvision) produces exactly one edge; a source that reports an
19254
+ * explicit `false` mid-episode and then resumes before the quiet window
19255
+ * elapses produces another. Stored compactly — see `motion-edge-codec.ts`
19256
+ * — and decoded back to this shape on read. Absent/empty on a legacy row,
19257
+ * which must never be read as "no episode happened here".
19258
+ */
19259
+ edges: array(number()).readonly().optional()
19185
19260
  });
19186
19261
  /**
19187
19262
  * Which detection SOURCE produced an object event. `pipeline` = the ML
@@ -19236,6 +19311,23 @@ var ObjectEventSchema = object({
19236
19311
  * includes it (it is light). Absent on rows written before this field.
19237
19312
  */
19238
19313
  frameId: string().optional(),
19314
+ /**
19315
+ * A PRODUCER-chosen key that makes a synthetic event's emission idempotent
19316
+ * (D474).
19317
+ *
19318
+ * Only the package detector writes it, and it exists because the event id
19319
+ * stopped being choosable: the delivery and pick-up rows used to BE their
19320
+ * dedupe key (`pa-pkg-<entryId>-delivered`), which is how "never emit a
19321
+ * second delivery for this entry" survived a restart. An `INTEGER` rowid is
19322
+ * assigned by SQLite, so that key had to move off the primary key rather
19323
+ * than be dropped — a detector that cannot recognise its own row re-delivers
19324
+ * every parcel on every boot.
19325
+ *
19326
+ * Absent on every other object event, and on every row written before this
19327
+ * field. Never a substitute for `id`: it is unique per (producer, occasion),
19328
+ * not per row, and nothing addresses a row by it.
19329
+ */
19330
+ idempotencyKey: string().optional(),
19239
19331
  /** Omitted in slim projection. */
19240
19332
  trackId: string().optional(),
19241
19333
  className: string(),
@@ -26362,9 +26454,54 @@ object({
26362
26454
  /** Ms epoch of the last detected-true observation. Null if never detected. */
26363
26455
  lastDetectedAt: number().nullable(),
26364
26456
  /**
26365
- * Ms after which `detected` auto-reverts to false if no fresh push
26366
- * arrives. Null means the provider leaves detected state until a
26367
- * native "clear" event.
26457
+ * `MOTION_CLOSE_AFTER_MS` while `detected: true` on a `Camera` device,
26458
+ * `null` while false and on every `Sensor` device (D475) — see that
26459
+ * constant's doc for the one-authority rule.
26460
+ *
26461
+ * ## Reading this field still arms nothing
26462
+ *
26463
+ * It reads like an instruction to the consumer ("revert after N ms if
26464
+ * no fresh push arrives") and it is not one: nothing in this repo reads
26465
+ * the LIVE cap value to drive a timer. `pipeline-analytics`'s motion-episode
26466
+ * close DOES now use the same number — `MOTION_CLOSE_AFTER_MS` — but as an
26467
+ * imported constant, not as a read of `device.state.motion.value`, so this
26468
+ * field stays what it always was: DESCRIPTIVE output, mirroring an answer
26469
+ * computed elsewhere. Building a self-clear timer out of a READ of this
26470
+ * field would add a second falling-edge authority beside whichever one
26471
+ * already owns the device, and two that can disagree are worse than one.
26472
+ * Consumers that need a falling edge SHAPED differently — held open across
26473
+ * a flapping source — debounce on their own side and say so, as
26474
+ * `addon-export-alexa/src/motion-clear-hold.ts` and
26475
+ * `addon-export-hap`'s `RESET_DEBOUNCE_MS` both do.
26476
+ *
26477
+ * ## Who writes it
26478
+ *
26479
+ * - **Cameras** — the runner's phase machine, `active → watching` on
26480
+ * `cooldown_expired`, which then writes this slice with
26481
+ * `detected: false` (`handlePhaseChanged` in
26482
+ * `pipeline-runner/index.ts`). It produces the FALLING edge, which
26483
+ * matters most for the sources that only ever push a rising one:
26484
+ * Reolink emits `MotionOnMotionChanged { detected: true }` and never
26485
+ * a false.
26486
+ * - **Sensors** (Home Assistant binary sensors, Homematic) — the
26487
+ * provider pushes the false itself, from the upstream system's own
26488
+ * state change. No phase machine is involved.
26489
+ *
26490
+ * ### The phase machine is CANONICAL, not sole — and that is a defect
26491
+ *
26492
+ * An earlier revision of this docblock (mine, 2026-09-12) claimed the
26493
+ * phase machine is the sole writer for a camera. It is not.
26494
+ * `hikvision-camera.ts:3464` and `amcrest-camera.ts:445` both call
26495
+ * `setCapSlice(motionCapability, …)` on their own rising edge, and
26496
+ * Hikvision's comment says why: it read THIS docblock, agreed the
26497
+ * runner is canonical, and wrote anyway to avoid per-tick churn. So
26498
+ * two authorities can disagree about one slice, which this repo
26499
+ * forbids, and the doc said otherwise — which is worse than saying
26500
+ * nothing, because it reads as verification.
26501
+ *
26502
+ * This predates D475 and is not fixed there: the fix touches every
26503
+ * camera provider. Recorded in D475's Consequences. Do not restore the
26504
+ * "sole writer" wording without also removing the other writers.
26368
26505
  */
26369
26506
  autoClearAfterMs: number().nullable()
26370
26507
  });
@@ -7288,6 +7288,23 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
7288
7288
  action: string().min(1),
7289
7289
  input: unknown()
7290
7290
  }), unknown(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
7291
+ new Set([
7292
+ "track",
7293
+ "summary",
7294
+ "face",
7295
+ "identity",
7296
+ "plate",
7297
+ "vehicle",
7298
+ "scene",
7299
+ "motion",
7300
+ "object",
7301
+ "audio"
7302
+ ]);
7303
+ new Set([
7304
+ "motion",
7305
+ "object",
7306
+ "audio"
7307
+ ]);
7291
7308
  var EncodeProfileSchema = object({
7292
7309
  video: object({
7293
7310
  codec: _enum([
@@ -12386,8 +12403,17 @@ method(object({
12386
12403
  }), array(SettingsRecordSchema).readonly()), method(object({
12387
12404
  namespace: string().optional(),
12388
12405
  collection: string(),
12389
- record: SettingsRecordSchema
12390
- }), _void(), { kind: "mutation" }), method(object({
12406
+ record: object({
12407
+ id: string().optional(),
12408
+ data: record(string(), unknown())
12409
+ })
12410
+ }), object({
12411
+ /**
12412
+ * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
12413
+ * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
12414
+ * primary key — which is the only place an auto key is knowable.
12415
+ */
12416
+ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
12391
12417
  namespace: string().optional(),
12392
12418
  collection: string(),
12393
12419
  records: array(BulkRecordSchema).readonly()
@@ -12496,8 +12522,17 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
12496
12522
  }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
12497
12523
  namespace: string().optional(),
12498
12524
  collection: string(),
12499
- record: SettingsRecordSchema
12500
- }), _void(), {
12525
+ record: object({
12526
+ id: string().optional(),
12527
+ data: record(string(), unknown())
12528
+ })
12529
+ }), object({
12530
+ /**
12531
+ * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
12532
+ * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
12533
+ * primary key — which is the only place an auto key is knowable.
12534
+ */
12535
+ id: union([string(), number()]) }), {
12501
12536
  kind: "mutation",
12502
12537
  auth: "admin"
12503
12538
  }), method(object({
@@ -19139,7 +19174,20 @@ var TrackSchema = object({
19139
19174
  ...TrackRetrainFields
19140
19175
  });
19141
19176
  var BaseEventFields = {
19142
- id: string(),
19177
+ /**
19178
+ * A SQLite ROWID, assigned by the database (D474).
19179
+ *
19180
+ * Was a 36-character UUID and cost 263 MB of a 1 117 MB database — paid
19181
+ * TWICE per row, in the row and in the primary-key index, across 2.1 million
19182
+ * motion, audio and object events. An `INTEGER PRIMARY KEY` in SQLite **is**
19183
+ * the rowid: the table itself is that B-tree, so the index stops existing
19184
+ * rather than getting smaller. No shorter string does that.
19185
+ *
19186
+ * Defined once here for all three event kinds, which is why they move
19187
+ * together: a per-table migration would have forked this and
19188
+ * `COMMON_BASE_COLUMNS` and reunited them two stages later.
19189
+ */
19190
+ id: number().int(),
19143
19191
  deviceId: number(),
19144
19192
  timestamp: number()
19145
19193
  };
@@ -19158,7 +19206,34 @@ var MotionEventSchema = object({
19158
19206
  /** Omitted in slim projection. */
19159
19207
  frameHeight: number().optional(),
19160
19208
  /** Populated by B5 (recording playback URL for this event). */
19161
- mediaUrl: string().optional()
19209
+ mediaUrl: string().optional(),
19210
+ /**
19211
+ * One row per motion EPISODE, not one per push (D475). `null` while the
19212
+ * episode is still open — a further rising edge extends it in place rather
19213
+ * than inserting a new row. Set once, at close, to `lastOnAt - startedAt`
19214
+ * (the span from the first rising edge to the LAST one, deliberately NOT
19215
+ * `closedAt - startedAt` — the close delay is a quiet CONFIRMATION, not
19216
+ * movement, and folding it in would report `MOTION_CLOSE_AFTER_MS` of
19217
+ * motion for an instantaneous trigger).
19218
+ *
19219
+ * **Absent** (not merely `null`) on a row written before D475 — that means
19220
+ * "closed the old way, before this column existed", never "still open".
19221
+ * Nothing in this codebase may read an absent `durationMs` as an open
19222
+ * episode; only `null` means open.
19223
+ */
19224
+ durationMs: number().nullable().optional(),
19225
+ /**
19226
+ * Ms offsets from `timestamp` (the episode's own first rising edge, so the
19227
+ * first entry is always `0`) of every genuine off→on transition the
19228
+ * episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
19229
+ * push: a firmware source that keepalives at ~1 Hz for the whole burst
19230
+ * (Reolink, Hikvision) produces exactly one edge; a source that reports an
19231
+ * explicit `false` mid-episode and then resumes before the quiet window
19232
+ * elapses produces another. Stored compactly — see `motion-edge-codec.ts`
19233
+ * — and decoded back to this shape on read. Absent/empty on a legacy row,
19234
+ * which must never be read as "no episode happened here".
19235
+ */
19236
+ edges: array(number()).readonly().optional()
19162
19237
  });
19163
19238
  /**
19164
19239
  * Which detection SOURCE produced an object event. `pipeline` = the ML
@@ -19213,6 +19288,23 @@ var ObjectEventSchema = object({
19213
19288
  * includes it (it is light). Absent on rows written before this field.
19214
19289
  */
19215
19290
  frameId: string().optional(),
19291
+ /**
19292
+ * A PRODUCER-chosen key that makes a synthetic event's emission idempotent
19293
+ * (D474).
19294
+ *
19295
+ * Only the package detector writes it, and it exists because the event id
19296
+ * stopped being choosable: the delivery and pick-up rows used to BE their
19297
+ * dedupe key (`pa-pkg-<entryId>-delivered`), which is how "never emit a
19298
+ * second delivery for this entry" survived a restart. An `INTEGER` rowid is
19299
+ * assigned by SQLite, so that key had to move off the primary key rather
19300
+ * than be dropped — a detector that cannot recognise its own row re-delivers
19301
+ * every parcel on every boot.
19302
+ *
19303
+ * Absent on every other object event, and on every row written before this
19304
+ * field. Never a substitute for `id`: it is unique per (producer, occasion),
19305
+ * not per row, and nothing addresses a row by it.
19306
+ */
19307
+ idempotencyKey: string().optional(),
19216
19308
  /** Omitted in slim projection. */
19217
19309
  trackId: string().optional(),
19218
19310
  className: string(),
@@ -26339,9 +26431,54 @@ object({
26339
26431
  /** Ms epoch of the last detected-true observation. Null if never detected. */
26340
26432
  lastDetectedAt: number().nullable(),
26341
26433
  /**
26342
- * Ms after which `detected` auto-reverts to false if no fresh push
26343
- * arrives. Null means the provider leaves detected state until a
26344
- * native "clear" event.
26434
+ * `MOTION_CLOSE_AFTER_MS` while `detected: true` on a `Camera` device,
26435
+ * `null` while false and on every `Sensor` device (D475) — see that
26436
+ * constant's doc for the one-authority rule.
26437
+ *
26438
+ * ## Reading this field still arms nothing
26439
+ *
26440
+ * It reads like an instruction to the consumer ("revert after N ms if
26441
+ * no fresh push arrives") and it is not one: nothing in this repo reads
26442
+ * the LIVE cap value to drive a timer. `pipeline-analytics`'s motion-episode
26443
+ * close DOES now use the same number — `MOTION_CLOSE_AFTER_MS` — but as an
26444
+ * imported constant, not as a read of `device.state.motion.value`, so this
26445
+ * field stays what it always was: DESCRIPTIVE output, mirroring an answer
26446
+ * computed elsewhere. Building a self-clear timer out of a READ of this
26447
+ * field would add a second falling-edge authority beside whichever one
26448
+ * already owns the device, and two that can disagree are worse than one.
26449
+ * Consumers that need a falling edge SHAPED differently — held open across
26450
+ * a flapping source — debounce on their own side and say so, as
26451
+ * `addon-export-alexa/src/motion-clear-hold.ts` and
26452
+ * `addon-export-hap`'s `RESET_DEBOUNCE_MS` both do.
26453
+ *
26454
+ * ## Who writes it
26455
+ *
26456
+ * - **Cameras** — the runner's phase machine, `active → watching` on
26457
+ * `cooldown_expired`, which then writes this slice with
26458
+ * `detected: false` (`handlePhaseChanged` in
26459
+ * `pipeline-runner/index.ts`). It produces the FALLING edge, which
26460
+ * matters most for the sources that only ever push a rising one:
26461
+ * Reolink emits `MotionOnMotionChanged { detected: true }` and never
26462
+ * a false.
26463
+ * - **Sensors** (Home Assistant binary sensors, Homematic) — the
26464
+ * provider pushes the false itself, from the upstream system's own
26465
+ * state change. No phase machine is involved.
26466
+ *
26467
+ * ### The phase machine is CANONICAL, not sole — and that is a defect
26468
+ *
26469
+ * An earlier revision of this docblock (mine, 2026-09-12) claimed the
26470
+ * phase machine is the sole writer for a camera. It is not.
26471
+ * `hikvision-camera.ts:3464` and `amcrest-camera.ts:445` both call
26472
+ * `setCapSlice(motionCapability, …)` on their own rising edge, and
26473
+ * Hikvision's comment says why: it read THIS docblock, agreed the
26474
+ * runner is canonical, and wrote anyway to avoid per-tick churn. So
26475
+ * two authorities can disagree about one slice, which this repo
26476
+ * forbids, and the doc said otherwise — which is worse than saying
26477
+ * nothing, because it reads as verification.
26478
+ *
26479
+ * This predates D475 and is not fixed there: the fix touches every
26480
+ * camera provider. Recorded in D475's Consequences. Do not restore the
26481
+ * "sole writer" wording without also removing the other writers.
26345
26482
  */
26346
26483
  autoClearAfterMs: number().nullable()
26347
26484
  });
package/dist/smb.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-B99wFlH6.js");
5
+ const require_shared = require("./shared-DOPOfpNg.js");
6
6
  let node_crypto = require("node:crypto");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_shared.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-BOK9gl06.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-DW9PrJ9O.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as path from "node:path";
4
4
  import * as fsp from "node:fs/promises";
@@ -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-B99wFlH6.js");
5
+ const require_shared = require("./shared-DOPOfpNg.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-BOK9gl06.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-DW9PrJ9O.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.2.96",
3
+ "version": "1.2.98",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV, SMB) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",