@wix/himalaya-cli 0.1382.0 → 0.1383.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.
Files changed (92) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/camera/src/index.d.ts +18 -1
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/file-picker/src/index.d.ts +14 -4
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/files/src/index.d.ts +1 -1
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/photos/src/index.d.ts +9 -4
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/presigned-upload/src/index.d.ts +1 -1
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/sdk-types/src/capabilities.generated.d.ts +1 -1
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/sdk-types/src/index.d.ts +12 -0
  8. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/audio-record.mjs +1 -1
  9. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/calendar.mjs +1 -1
  10. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/calls.mjs +1 -1
  11. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/camera.mjs +17 -1
  12. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/contacts.mjs +1 -1
  13. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/file-picker.mjs +17 -5
  14. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/files.mjs +9 -5
  15. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/location.mjs +1 -1
  16. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/motion.mjs +1 -1
  17. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/photos.mjs +17 -5
  18. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/presigned-upload.mjs +2 -1
  19. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdk-types.mjs +1 -1
  20. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/share.mjs +3 -0
  21. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/tasks.mjs +1 -1
  22. package/dist/cli.mjs +25 -24
  23. package/dist/preview-assets.generated.bin +0 -0
  24. package/guides/sdk-reference.json +58 -10
  25. package/guides/web-page-sdk-reference.md +3 -3
  26. package/package.json +2 -2
  27. package/templates/beauty-salon-owner/config.ts +1 -1
  28. package/templates/beauty-salon-owner/dev/index.ts +3 -0
  29. package/templates/beauty-salon-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  30. package/templates/beauty-salon-owner/tier5-src/_shared/aria-chat.ts +114 -44
  31. package/templates/beauty-salon-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  32. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  33. package/templates/community-club-owner/config.ts +1 -1
  34. package/templates/community-club-owner/dev/index.ts +3 -0
  35. package/templates/community-club-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  36. package/templates/community-club-owner/tier5-src/_shared/aria-chat.ts +114 -44
  37. package/templates/community-club-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  38. package/templates/community-club-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  39. package/templates/events-meetups-owner/config.ts +1 -1
  40. package/templates/events-meetups-owner/dev/index.ts +3 -0
  41. package/templates/events-meetups-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  42. package/templates/events-meetups-owner/tier5-src/_shared/aria-chat.ts +114 -44
  43. package/templates/events-meetups-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  44. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  45. package/templates/gym-fitness-owner/config.ts +1 -1
  46. package/templates/gym-fitness-owner/dev/index.ts +3 -0
  47. package/templates/gym-fitness-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  48. package/templates/gym-fitness-owner/tier5-src/_shared/aria-chat.ts +114 -44
  49. package/templates/gym-fitness-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  50. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  51. package/templates/nonprofit-cause-owner/config.ts +1 -1
  52. package/templates/nonprofit-cause-owner/dev/index.ts +3 -0
  53. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  54. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-chat.ts +114 -44
  55. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  56. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  57. package/templates/owner-lite/config.ts +1 -1
  58. package/templates/owner-lite/dev/index.ts +3 -0
  59. package/templates/owner-lite/tier5-src/_shared/aria-attachments.ts +35 -18
  60. package/templates/owner-lite/tier5-src/_shared/aria-chat.ts +114 -44
  61. package/templates/owner-lite/tier5-src/_shared/aria-upload-queue.ts +47 -0
  62. package/templates/owner-lite/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  63. package/templates/podcast-creator-owner/config.ts +1 -1
  64. package/templates/podcast-creator-owner/dev/index.ts +3 -0
  65. package/templates/podcast-creator-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  66. package/templates/podcast-creator-owner/tier5-src/_shared/aria-chat.ts +114 -44
  67. package/templates/podcast-creator-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  68. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  69. package/templates/portfolio-creative-owner/config.ts +1 -1
  70. package/templates/portfolio-creative-owner/dev/index.ts +3 -0
  71. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  72. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-chat.ts +114 -44
  73. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  74. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  75. package/templates/restaurant-owner/config.ts +1 -1
  76. package/templates/restaurant-owner/dev/index.ts +3 -0
  77. package/templates/restaurant-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  78. package/templates/restaurant-owner/tier5-src/_shared/aria-chat.ts +114 -44
  79. package/templates/restaurant-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  80. package/templates/restaurant-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  81. package/templates/retail-store-owner/config.ts +1 -1
  82. package/templates/retail-store-owner/dev/index.ts +3 -0
  83. package/templates/retail-store-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  84. package/templates/retail-store-owner/tier5-src/_shared/aria-chat.ts +114 -44
  85. package/templates/retail-store-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  86. package/templates/retail-store-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
  87. package/templates/yoga-studio-owner/config.ts +1 -1
  88. package/templates/yoga-studio-owner/dev/index.ts +3 -0
  89. package/templates/yoga-studio-owner/tier5-src/_shared/aria-attachments.ts +35 -18
  90. package/templates/yoga-studio-owner/tier5-src/_shared/aria-chat.ts +114 -44
  91. package/templates/yoga-studio-owner/tier5-src/_shared/aria-upload-queue.ts +47 -0
  92. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-aria/index.ts +64 -13
@@ -1,3 +1,4 @@
1
+ import type { FileHandle } from "@wix/himalaya/sdk-types";
1
2
  export type CaptureSource = "camera" | "library";
2
3
  export interface CaptureOptions {
3
4
  source: CaptureSource;
@@ -34,4 +35,20 @@ export declare function pickDocument(): Promise<PickedDocument | null>;
34
35
  * the decoded string, or `null` if the user cancelled / no code was found.
35
36
  */
36
37
  export declare function scanQR(): Promise<string | null>;
37
- export declare const version = 1;
38
+ export interface PreparedImage {
39
+ file: FileHandle;
40
+ /** Small JPEG preview; full upload bytes stay in the file substrate. */
41
+ previewUri: string;
42
+ width: number;
43
+ height: number;
44
+ }
45
+ /** Normalize a picked substrate image for uploading without moving its full
46
+ * bytes through the worker. Native hosts decode HEIC/HEIF, apply orientation,
47
+ * and bound the dimensions/encoded size. Unsupported browser codecs fail
48
+ * explicitly instead of returning an unpreviewable original. Requires camera
49
+ * capability version 2; does not present a picker or request camera access. */
50
+ export declare function prepareImage(file: FileHandle, options?: {
51
+ maxEdgePixels?: number;
52
+ maxBytes?: number;
53
+ }): Promise<PreparedImage>;
54
+ export declare const version = 2;
@@ -1,17 +1,27 @@
1
- import type { FileHandle } from "@wix/himalaya/sdk-types";
1
+ import type { FileHandle, FileSelectionRejection, FileSelectionResult } from "@wix/himalaya/sdk-types";
2
2
  export type { FileHandle } from "@wix/himalaya/sdk-types";
3
3
  export interface FilePickOptions {
4
4
  /** Allowed types — UTType identifiers (iOS) or MIME types (Android/web). */
5
5
  types?: string[];
6
6
  /** Allow selecting multiple documents. */
7
7
  multiple?: boolean;
8
+ /** Rejected before materializing bytes; an unknown provider length is bounded while reading. */
9
+ maxBytes?: number;
10
+ /** Optional source-image limit, before host preparation. Defaults to maxBytes. */
11
+ maxImageBytes?: number;
12
+ maxItems?: number;
13
+ maxTotalBytes?: number;
8
14
  }
9
- /** Present the OS document picker. Resolves the picked documents as FileHandles
10
- * copied into the substrate, or [] on cancel. */
15
+ export type FilePickRejection = FileSelectionRejection;
16
+ export type FilePickResult = FileSelectionResult;
17
+ /** Detailed bounded selection: valid files survive alongside explicit refusals. */
18
+ export declare function pickDetailed(options?: FilePickOptions): Promise<FilePickResult>;
19
+ /** Present the document picker and return accepted substrate FileHandles, or []
20
+ * on cancellation. Use pickDetailed to inspect explicit import refusals. */
11
21
  export declare function pick(options?: FilePickOptions): Promise<FileHandle[]>;
12
22
  /** Export a substrate file out to a user-chosen location (save/export picker). */
13
23
  export declare function pickDirectoryForExport(file: FileHandle | string): Promise<{
14
24
  exported: boolean;
15
25
  }>;
16
26
  /** Capability version, for bundles that gate on min binary version. */
17
- export declare const version = 1;
27
+ export declare const version = 2;
@@ -37,4 +37,4 @@ export declare function remove(ref: FileHandle | string): Promise<void>;
37
37
  /** Stat a path, or `null` if it doesn't exist (the existence check for handles). */
38
38
  export declare function stat(path: string): Promise<FileStat | null>;
39
39
  /** Capability version, for bundles that gate on min binary version. */
40
- export declare const version = 1;
40
+ export declare const version = 2;
@@ -1,13 +1,18 @@
1
- import type { FileHandle, PermissionStatus } from "@wix/himalaya/sdk-types";
1
+ import type { FileHandle, PermissionStatus, FileSelectionResult } from "@wix/himalaya/sdk-types";
2
2
  export type { FileHandle, PermissionStatus } from "@wix/himalaya/sdk-types";
3
3
  export interface PickOptions {
4
4
  /** Max items to pick (default: platform default, usually 1). */
5
5
  limit?: number;
6
6
  /** Media kinds to offer. */
7
7
  type?: "images" | "videos" | "any";
8
+ maxBytes?: number;
9
+ maxTotalBytes?: number;
8
10
  }
9
- /** Present the OS photo picker (no permission). Resolves the picked items as
10
- * FileHandles copied into the substrate, or [] on cancel. */
11
+ /** Present the OS photo picker without a permission prompt. Returns substrate
12
+ * FileHandles and explicit count/size/total refusals; cancellation returns empty arrays. */
13
+ export declare function pickDetailed(options?: PickOptions): Promise<FileSelectionResult>;
14
+ /** Present the photo picker and return accepted substrate FileHandles, or [] on
15
+ * cancellation. Use pickDetailed to inspect explicit import refusals. */
11
16
  export declare function pick(options?: PickOptions): Promise<FileHandle[]>;
12
17
  /** Save a file (from files/camera/etc.) into the user's photo library. The only
13
18
  * permission-gated method in v1. */
@@ -17,4 +22,4 @@ export declare function saveToLibrary(file: FileHandle | string): Promise<{
17
22
  /** Add-to-library permission status (no prompt). `limited` = iOS limited access. */
18
23
  export declare function getSavePermissionStatus(): Promise<PermissionStatus>;
19
24
  /** Capability version, for bundles that gate on min binary version. */
20
- export declare const version = 1;
25
+ export declare const version = 2;
@@ -62,4 +62,4 @@ export declare function put(url: string, bytes: {
62
62
  */
63
63
  export declare function putFile(url: string, ref: FileHandle | string, opts?: UploadOptions): Promise<UploadResult>;
64
64
  /** Capability version, for bundles that gate on min binary version. */
65
- export declare const version = 1;
65
+ export declare const version = 2;
@@ -7,7 +7,7 @@ export declare const CAPABILITY_REGISTRY: {
7
7
  readonly browser_auth: readonly ["start"];
8
8
  readonly calendar: readonly ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"];
9
9
  readonly calls: readonly ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"];
10
- readonly camera: readonly ["capture", "pickDocument", "scanQR"];
10
+ readonly camera: readonly ["capture", "pickDocument", "prepareImage", "scanQR"];
11
11
  readonly clipboard: readonly ["hasText", "readText", "writeText"];
12
12
  readonly contacts: readonly ["getPermissionStatus", "pick", "requestPermission", "search"];
13
13
  readonly file_picker: readonly ["pick", "pickDirectoryForExport"];
@@ -15,6 +15,18 @@ export interface FileHandle {
15
15
  mimeType: string;
16
16
  /** Byte length of the file the handle points at. */
17
17
  sizeBytes: number;
18
+ /** Opaque owner-partition stamp; hosts reject use after an account switch. */
19
+ ownerScope?: string;
20
+ }
21
+ /** A bounded OS selection can retain valid files while explaining rejected ones. */
22
+ export interface FileSelectionRejection {
23
+ name: string;
24
+ mimeType: string;
25
+ reason: "size" | "count" | "total";
26
+ }
27
+ export interface FileSelectionResult {
28
+ items: FileHandle[];
29
+ rejected: FileSelectionRejection[];
18
30
  }
19
31
  /** OS permission state for a gated capability (the R1 permission triad).
20
32
  * `undetermined` ⇒ not yet asked; `limited` ⇒ a partial grant (iOS limited
@@ -22,7 +22,7 @@ var CAPABILITY_REGISTRY = {
22
22
  "browser_auth": ["start"],
23
23
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
24
24
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
25
- "camera": ["capture", "pickDocument", "scanQR"],
25
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
26
26
  "clipboard": ["hasText", "readText", "writeText"],
27
27
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
28
28
  "file_picker": ["pick", "pickDirectoryForExport"],
@@ -22,7 +22,7 @@ var CAPABILITY_REGISTRY = {
22
22
  "browser_auth": ["start"],
23
23
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
24
24
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
25
- "camera": ["capture", "pickDocument", "scanQR"],
25
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
26
26
  "clipboard": ["hasText", "readText", "writeText"],
27
27
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
28
28
  "file_picker": ["pick", "pickDirectoryForExport"],
@@ -22,7 +22,7 @@ var CAPABILITY_REGISTRY = {
22
22
  "browser_auth": ["start"],
23
23
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
24
24
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
25
- "camera": ["capture", "pickDocument", "scanQR"],
25
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
26
26
  "clipboard": ["hasText", "readText", "writeText"],
27
27
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
28
28
  "file_picker": ["pick", "pickDirectoryForExport"],
@@ -48,10 +48,26 @@ async function scanQR() {
48
48
  if (!result || result.cancelled) return null;
49
49
  return result.code ?? null;
50
50
  }
51
- var version = 1;
51
+ async function prepareImage(file, options) {
52
+ const result = await dispatch("capability.camera.prepareImage", {
53
+ uri: file.uri,
54
+ name: file.name,
55
+ mimeType: file.mimeType,
56
+ ...file.ownerScope ? { ownerScope: file.ownerScope } : {},
57
+ maxEdgePixels: options?.maxEdgePixels ?? 2048,
58
+ maxBytes: options?.maxBytes ?? 4 * 1024 * 1024
59
+ });
60
+ if (result?.error) throw new Error(`camera.prepareImage: ${result.error}`);
61
+ if (!result?.file?.uri || typeof result.width !== "number" || typeof result.height !== "number") {
62
+ throw new Error("camera.prepareImage: native handler returned no prepared image");
63
+ }
64
+ return { file: result.file, previewUri: result.previewUri ?? "", width: result.width, height: result.height };
65
+ }
66
+ var version = 2;
52
67
  export {
53
68
  capturePhoto,
54
69
  pickDocument,
70
+ prepareImage,
55
71
  scanQR,
56
72
  version
57
73
  };
@@ -22,7 +22,7 @@ var CAPABILITY_REGISTRY = {
22
22
  "browser_auth": ["start"],
23
23
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
24
24
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
25
- "camera": ["capture", "pickDocument", "scanQR"],
25
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
26
26
  "clipboard": ["hasText", "readText", "writeText"],
27
27
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
28
28
  "file_picker": ["pick", "pickDirectoryForExport"],
@@ -14,21 +14,33 @@ function dispatch(handlerId, params, _options) {
14
14
  }
15
15
 
16
16
  // ../../core/sdk/file-picker/src/index.ts
17
- async function pick(options) {
17
+ async function pickDetailed(options) {
18
18
  const params = {};
19
- if (options?.types && options.types.length > 0) params.types = options.types.join(",");
19
+ if (options?.types?.length) params.types = options.types.join(",");
20
20
  if (options?.multiple) params.multiple = "true";
21
+ for (const key of ["maxBytes", "maxImageBytes", "maxItems", "maxTotalBytes"]) {
22
+ const n = options?.[key];
23
+ if (n !== void 0) {
24
+ if (!Number.isSafeInteger(n) || n <= 0) throw new Error(`file-picker: ${key} must be a positive safe integer`);
25
+ params[key] = String(n);
26
+ }
27
+ }
21
28
  const r = await dispatch("capability.file_picker.pick", params);
22
- return Array.isArray(r?.items) ? r.items : [];
29
+ return { items: Array.isArray(r?.items) ? r.items : [], rejected: Array.isArray(r?.rejected) ? r.rejected : [] };
30
+ }
31
+ async function pick(options) {
32
+ return (await pickDetailed(options)).items;
23
33
  }
24
34
  async function pickDirectoryForExport(file) {
25
35
  const uri = typeof file === "string" ? file : file.uri;
26
- const r = await dispatch("capability.file_picker.pickDirectoryForExport", { uri });
36
+ const ownerScope = typeof file === "string" ? void 0 : file.ownerScope;
37
+ const r = await dispatch("capability.file_picker.pickDirectoryForExport", { uri, ...ownerScope ? { ownerScope } : {} });
27
38
  return { exported: r?.exported === true };
28
39
  }
29
- var version = 1;
40
+ var version = 2;
30
41
  export {
31
42
  pick,
43
+ pickDetailed,
32
44
  pickDirectoryForExport,
33
45
  version
34
46
  };
@@ -26,7 +26,8 @@ function toHandle(r, fallbackPath) {
26
26
  uri: r?.uri ?? fallbackPath,
27
27
  name: r?.name ?? basename(fallbackPath),
28
28
  mimeType: r?.mimeType ?? "application/octet-stream",
29
- sizeBytes: typeof r?.sizeBytes === "number" ? r.sizeBytes : 0
29
+ sizeBytes: typeof r?.sizeBytes === "number" ? r.sizeBytes : 0,
30
+ ...r?.ownerScope ? { ownerScope: r.ownerScope } : {}
30
31
  };
31
32
  }
32
33
  async function write(path, content, opts) {
@@ -38,11 +39,11 @@ async function write(path, content, opts) {
38
39
  return toHandle(r, path);
39
40
  }
40
41
  async function readText(ref) {
41
- const r = await dispatch("capability.files.readText", { uri: refToPath(ref) });
42
+ const r = await dispatch("capability.files.readText", { uri: refToPath(ref), ...typeof ref !== "string" && ref.ownerScope ? { ownerScope: ref.ownerScope } : {} });
42
43
  return r?.text ?? "";
43
44
  }
44
45
  async function readBase64(ref) {
45
- const r = await dispatch("capability.files.readBase64", { uri: refToPath(ref) });
46
+ const r = await dispatch("capability.files.readBase64", { uri: refToPath(ref), ...typeof ref !== "string" && ref.ownerScope ? { ownerScope: ref.ownerScope } : {} });
46
47
  if (r?.error) throw new Error(`files.readBase64: ${r.error}`);
47
48
  return r?.base64 ?? "";
48
49
  }
@@ -51,13 +52,16 @@ async function list(dirPath) {
51
52
  return Array.isArray(r?.items) ? r.items : [];
52
53
  }
53
54
  async function remove(ref) {
54
- await dispatch("capability.files.remove", { uri: refToPath(ref) });
55
+ await dispatch("capability.files.remove", {
56
+ uri: refToPath(ref),
57
+ ...typeof ref !== "string" && ref.ownerScope ? { ownerScope: ref.ownerScope } : {}
58
+ });
55
59
  }
56
60
  async function stat(path) {
57
61
  const r = await dispatch("capability.files.stat", { path });
58
62
  return r?.stat ?? null;
59
63
  }
60
- var version = 1;
64
+ var version = 2;
61
65
  export {
62
66
  list,
63
67
  readBase64,
@@ -22,7 +22,7 @@ var CAPABILITY_REGISTRY = {
22
22
  "browser_auth": ["start"],
23
23
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
24
24
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
25
- "camera": ["capture", "pickDocument", "scanQR"],
25
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
26
26
  "clipboard": ["hasText", "readText", "writeText"],
27
27
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
28
28
  "file_picker": ["pick", "pickDirectoryForExport"],
@@ -22,7 +22,7 @@ var CAPABILITY_REGISTRY = {
22
22
  "browser_auth": ["start"],
23
23
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
24
24
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
25
- "camera": ["capture", "pickDocument", "scanQR"],
25
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
26
26
  "clipboard": ["hasText", "readText", "writeText"],
27
27
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
28
28
  "file_picker": ["pick", "pickDirectoryForExport"],
@@ -22,7 +22,7 @@ var CAPABILITY_REGISTRY = {
22
22
  "browser_auth": ["start"],
23
23
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
24
24
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
25
- "camera": ["capture", "pickDocument", "scanQR"],
25
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
26
26
  "clipboard": ["hasText", "readText", "writeText"],
27
27
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
28
28
  "file_picker": ["pick", "pickDirectoryForExport"],
@@ -68,25 +68,37 @@ function normalizePermissionStatus(s) {
68
68
  function toHandles(items) {
69
69
  return Array.isArray(items) ? items : [];
70
70
  }
71
- async function pick(options) {
71
+ async function pickDetailed(options) {
72
72
  const params = { type: options?.type ?? "images" };
73
73
  if (typeof options?.limit === "number") params.limit = options.limit;
74
+ for (const key of ["maxBytes", "maxTotalBytes"]) {
75
+ const n = options?.[key];
76
+ if (n !== void 0) {
77
+ if (!Number.isSafeInteger(n) || n <= 0) throw new Error(`photos: ${key} must be a positive safe integer`);
78
+ params[key] = n;
79
+ }
80
+ }
74
81
  const r = await dispatch("capability.photos.pick", params);
75
- return toHandles(r?.items);
82
+ return { items: toHandles(r?.items), rejected: Array.isArray(r?.rejected) ? r.rejected : [] };
83
+ }
84
+ async function pick(options) {
85
+ return (await pickDetailed(options)).items;
76
86
  }
77
87
  async function saveToLibrary(file) {
78
88
  const uri = typeof file === "string" ? file : file.uri;
79
- const r = await dispatch("capability.photos.saveToLibrary", { uri });
89
+ const ownerScope = typeof file === "string" ? void 0 : file.ownerScope;
90
+ const r = await dispatch("capability.photos.saveToLibrary", { uri, ...ownerScope ? { ownerScope } : {} });
80
91
  return { saved: r?.saved === true };
81
92
  }
82
93
  async function getSavePermissionStatus() {
83
94
  const r = await dispatch("capability.photos.getSavePermissionStatus");
84
95
  return normalizePermissionStatus(r?.status);
85
96
  }
86
- var version = 1;
97
+ var version = 2;
87
98
  export {
88
99
  getSavePermissionStatus,
89
100
  pick,
101
+ pickDetailed,
90
102
  saveToLibrary,
91
103
  version
92
104
  };
@@ -41,12 +41,13 @@ async function putFile(url, ref, opts) {
41
41
  await dispatch("capability.presigned_upload.putFile", {
42
42
  url: url ?? "",
43
43
  uri: typeof ref === "string" ? ref : ref?.uri ?? "",
44
+ ...typeof ref !== "string" && ref?.ownerScope ? { ownerScope: ref.ownerScope } : {},
44
45
  contentType: opts?.contentType ?? "",
45
46
  method: opts?.method ?? "PUT"
46
47
  })
47
48
  );
48
49
  }
49
- var version = 1;
50
+ var version = 2;
50
51
  export {
51
52
  MAX_INLINE_BASE64_BYTES,
52
53
  MAX_UPLOAD_BYTES,
@@ -7,7 +7,7 @@ var CAPABILITY_REGISTRY = {
7
7
  "browser_auth": ["start"],
8
8
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
9
9
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
10
- "camera": ["capture", "pickDocument", "scanQR"],
10
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
11
11
  "clipboard": ["hasText", "readText", "writeText"],
12
12
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
13
13
  "file_picker": ["pick", "pickDirectoryForExport"],
@@ -21,6 +21,9 @@ async function share(options) {
21
21
  if (options.subject) params.subject = options.subject;
22
22
  if (options.files && options.files.length > 0) {
23
23
  params.files = JSON.stringify(options.files.map((f) => f.uri));
24
+ if (options.files.some((f) => f.ownerScope)) {
25
+ params.fileOwners = JSON.stringify(options.files.map((f) => f.ownerScope ?? ""));
26
+ }
24
27
  }
25
28
  const r = await dispatch("capability.share.share", params);
26
29
  return { completed: r?.completed === true };
@@ -22,7 +22,7 @@ var CAPABILITY_REGISTRY = {
22
22
  "browser_auth": ["start"],
23
23
  "calendar": ["createEvent", "deleteEvent", "getPermissionStatus", "listEvents", "requestPermission", "updateEvent"],
24
24
  "calls": ["answer", "availability", "getPermissionStatus", "getState", "hangup", "listCalls", "offer", "receiveSignal", "reject", "requestPermission", "setMuted", "setRingback", "setSpeaker", "signalNext", "signalStart", "signalStop", "start", "subscribeEvents"],
25
- "camera": ["capture", "pickDocument", "scanQR"],
25
+ "camera": ["capture", "pickDocument", "prepareImage", "scanQR"],
26
26
  "clipboard": ["hasText", "readText", "writeText"],
27
27
  "contacts": ["getPermissionStatus", "pick", "requestPermission", "search"],
28
28
  "file_picker": ["pick", "pickDirectoryForExport"],