@monimesl/dot-dash 0.1.0-alpha.16 → 0.1.0-alpha.18

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/index.d.ts CHANGED
@@ -402,10 +402,34 @@ interface DialogMethods {
402
402
  };
403
403
  }
404
404
  declare function alert(options: AlertOptions, callOptions?: CallOptions): DashRequest<AlertResult>;
405
+ //#endregion
406
+ //#region src/ui/pickers.d.ts
407
+ interface PickDateOptions {
408
+ title?: string | undefined;
409
+ value?: string | undefined;
410
+ min?: string | undefined;
411
+ max?: string | undefined;
412
+ }
413
+ interface PickTimeOptions {
414
+ title?: string | undefined;
415
+ value?: string | undefined;
416
+ }
417
+ interface PickerMethods {
418
+ 'dash.ui.pickDate': {
419
+ params: PickDateOptions;
420
+ result: string;
421
+ };
422
+ 'dash.ui.pickTime': {
423
+ params: PickTimeOptions;
424
+ result: string;
425
+ };
426
+ }
427
+ declare function pickDate(options?: PickDateOptions, callOptions?: CallOptions): DashRequest<string>;
428
+ declare function pickTime(options?: PickTimeOptions, callOptions?: CallOptions): DashRequest<string>;
405
429
  declare namespace index_d_exports$1 {
406
- export { AlertAction, AlertOptions, AlertResult, UIMethods, alert };
430
+ export { AlertAction, AlertOptions, AlertResult, PickDateOptions, PickTimeOptions, UIMethods, alert, pickDate, pickTime };
407
431
  }
408
- type UIMethods = DialogMethods;
432
+ type UIMethods = DialogMethods & PickerMethods;
409
433
  //#endregion
410
434
  //#region src/methods.d.ts
411
435
  type DashMethods = UIMethods & SystemMethods & NetworkMethods & StorageMethods & MediaMethods;
@@ -461,5 +485,5 @@ export declare const dash: {
461
485
  };
462
486
  export type Dash = typeof dash;
463
487
  //#endregion
464
- export { type AlertAction, type AlertOptions, type AlertResult, type CacheSetOptions, type CacheValue, type CallOptions, type CodeFormat, type DashMethod, type DashMethods, type DashRequest, type DotFile, type FileEncoding, type FileEntry, HostError, type HostErrorCode, type HttpDownloadRequest, type HttpDownloadResponse, type HttpMethod, type HttpReadOptions, type HttpRequest, type HttpRequestBody, type HttpResponse, type HttpUploadFile, type HttpUploadRequest, type MediaMethods, type NetworkMethods, type PhotoSource, type PickFileOptions, type PickPhotoOptions, type ReadOptions, type ReplaceOptions, type ScannedCode, type ShareOptions, type StorageMethods, type StorageUsage, type SystemMethods, type TorchState, type UIMethods, type VibrateOptions, type VibrationStyle, type WriteOptions };
488
+ export { type AlertAction, type AlertOptions, type AlertResult, type CacheSetOptions, type CacheValue, type CallOptions, type CodeFormat, type DashMethod, type DashMethods, type DashRequest, type DotFile, type FileEncoding, type FileEntry, HostError, type HostErrorCode, type HttpDownloadRequest, type HttpDownloadResponse, type HttpMethod, type HttpReadOptions, type HttpRequest, type HttpRequestBody, type HttpResponse, type HttpUploadFile, type HttpUploadRequest, type MediaMethods, type NetworkMethods, type PhotoSource, type PickDateOptions, type PickFileOptions, type PickPhotoOptions, type PickTimeOptions, type ReadOptions, type ReplaceOptions, type ScannedCode, type ShareOptions, type StorageMethods, type StorageUsage, type SystemMethods, type TorchState, type UIMethods, type VibrateOptions, type VibrationStyle, type WriteOptions };
465
489
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/files.ts","../src/network/http.ts","../src/network/index.ts","../src/storage/cache.ts","../src/storage/file.ts","../src/storage/secret.ts","../src/storage/index.ts","../src/system/clipboard.ts","../src/system/delay.ts","../src/system/haptics.ts","../src/system/open-url.ts","../src/system/share.ts","../src/system/torch.ts","../src/system/index.ts","../src/ui/dialogs.ts","../src/ui/index.ts","../src/methods.ts","../src/call.ts","../src/media/pick-photo.ts","../src/media/scan-code.ts","../src/media/index.ts","../src/tracked.ts","../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/files.ts","../src/network/http.ts","../src/network/index.ts","../src/storage/cache.ts","../src/storage/file.ts","../src/storage/secret.ts","../src/storage/index.ts","../src/system/clipboard.ts","../src/system/delay.ts","../src/system/haptics.ts","../src/system/open-url.ts","../src/system/share.ts","../src/system/torch.ts","../src/system/index.ts","../src/ui/dialogs.ts","../src/ui/pickers.ts","../src/ui/index.ts","../src/methods.ts","../src/call.ts","../src/media/pick-photo.ts","../src/media/scan-code.ts","../src/media/index.ts","../src/tracked.ts","../src/index.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -291,8 +291,20 @@ function alert(options, callOptions) {
291
291
  }, callOptions);
292
292
  }
293
293
  //#endregion
294
+ //#region src/ui/pickers.ts
295
+ function pickDate(options = {}, callOptions) {
296
+ return call("dash.ui.pickDate", options, callOptions);
297
+ }
298
+ function pickTime(options = {}, callOptions) {
299
+ return call("dash.ui.pickTime", options, callOptions);
300
+ }
301
+ //#endregion
294
302
  //#region src/ui/index.ts
295
- var ui_exports = /* @__PURE__ */ __exportAll({ alert: () => alert });
303
+ var ui_exports = /* @__PURE__ */ __exportAll({
304
+ alert: () => alert,
305
+ pickDate: () => pickDate,
306
+ pickTime: () => pickTime
307
+ });
296
308
  //#endregion
297
309
  //#region src/tracked.ts
298
310
  function tracked(group, track) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["HostError","get","set","remove","clear","remove"],"sources":["../src/call.ts","../src/media/pick-photo.ts","../src/media/scan-code.ts","../src/media/index.ts","../src/files.ts","../src/network/http.ts","../src/network/index.ts","../src/storage/cache.ts","../src/storage/file.ts","../src/storage/secret.ts","../src/storage/index.ts","../src/system/clipboard.ts","../src/system/delay.ts","../src/system/haptics.ts","../src/system/open-url.ts","../src/system/share.ts","../src/system/torch.ts","../src/system/index.ts","../src/ui/dialogs.ts","../src/ui/index.ts","../src/tracked.ts","../src/index.ts"],"sourcesContent":["import type { HostCallOptions, HostRequest } from '@monimesl/dot-core';\nimport { callHost } from '@monimesl/dot-core';\n\nimport type { DashMethod, DashMethods } from './methods';\n\nexport type CallOptions = HostCallOptions;\n\n// A running Dash call. Await it for the result, or cancel it.\nexport type DashRequest<Result> = HostRequest<Result>;\n\nexport function call<Method extends DashMethod>(\n method: Method,\n params: DashMethods[Method]['params'],\n options: CallOptions = {},\n): DashRequest<DashMethods[Method]['result']> {\n return callHost(method, params, options);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\nimport type { DotFile } from '../files';\n\nexport type PhotoSource = 'library' | 'camera';\n\nexport interface PickPhotoOptions {\n // `library` needs the `photoLibrary` permission, and `camera` the `camera` permission.\n source: PhotoSource;\n}\n\nexport interface PickPhotoMethods {\n 'dash.media.pickPhoto': { params: { source: PhotoSource }; result: DotFile };\n}\n\n// Lets the person choose a photo or take one. Resolves with it as a JPEG of at most 2048 pixels on its\n// longest side, without its location or other details. Rejects with `cancelled` if they close the\n// picker, and with `unsupported` on a device without a camera. Save it with `dash.storage.file.save`\n// to keep it after the dot closes.\nexport function pickPhoto(\n options: PickPhotoOptions,\n callOptions?: CallOptions,\n): DashRequest<DotFile> {\n return call('dash.media.pickPhoto', { source: options.source }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\n// Only QR codes for now. More formats can come later without changing what a dot gets.\nexport type CodeFormat = 'qr';\n\nexport interface ScannedCode {\n text: string;\n format: CodeFormat;\n}\n\nexport interface ScanCodeMethods {\n 'dash.media.scanCode': { params: Record<string, never>; result: ScannedCode };\n}\n\n// Opens Dash's scanner until it reads a QR code. Needs the `camera` permission. Rejects with\n// `cancelled` if the person closes it, and with `unsupported` where Dash has no scanner.\nexport function scanCode(callOptions?: CallOptions): DashRequest<ScannedCode> {\n return call('dash.media.scanCode', {}, callOptions);\n}\n","import type { PickPhotoMethods } from './pick-photo';\nimport type { ScanCodeMethods } from './scan-code';\n\nexport { pickPhoto } from './pick-photo';\nexport { scanCode } from './scan-code';\nexport type { PhotoSource, PickPhotoOptions } from './pick-photo';\nexport type { CodeFormat, ScannedCode } from './scan-code';\n\nexport type MediaMethods = PickPhotoMethods & ScanCodeMethods;\n","// A file the host keeps for the dot until it closes, such as a download. Show it with its `url`.\nexport interface DotFile {\n id: string;\n name: string;\n size: number;\n contentType: string;\n url: string;\n}\n\nexport function fileId(file: DotFile | string): string {\n return typeof file === 'string' ? file : file.id;\n}\n","import { HostError, createHostRequest } from '@monimesl/dot-core';\n\nimport type { CallOptions, DashRequest } from '../call';\nimport type { DotFile } from '../files';\nimport { call } from '../call';\nimport { fileId } from '../files';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';\n\nexport type HttpRequestBody = string | object;\n\nexport interface HttpRequest<Body extends HttpRequestBody = HttpRequestBody> {\n url: string;\n method?: HttpMethod;\n headers?: Record<string, string>;\n body?: Body;\n}\n\nexport interface HttpResponse<Body = string> {\n ok: boolean;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n body: Body;\n}\n\n// Any body type other than string needs `as: 'json'`.\nexport type HttpReadOptions<Body> = [Body] extends [string] ? { as?: 'text' } : { as: 'json' };\n\nexport interface HttpDownloadRequest extends HttpRequest {\n name?: string;\n}\n\nexport type HttpDownloadResponse =\n | (Omit<HttpResponse, 'ok' | 'body'> & { ok: true; file: DotFile })\n | (Omit<HttpResponse, 'ok'> & { ok: false });\n\nexport interface HttpUploadFile {\n field: string;\n file: DotFile | string;\n name?: string;\n}\n\nexport interface HttpUploadRequest {\n url: string;\n // Defaults to POST.\n method?: 'POST' | 'PUT' | 'PATCH';\n headers?: Record<string, string>;\n fields?: Record<string, string>;\n files: HttpUploadFile[];\n}\n\ntype WireRequest<Request extends HttpRequest> = Omit<Request, 'headers' | 'body'> & {\n headers?: Record<string, string> | undefined;\n body?: string | undefined;\n};\n\ntype ReadAs = 'text' | 'json';\n\nexport interface HttpMethods {\n 'dash.network.http.request': { params: WireRequest<HttpRequest>; result: HttpResponse };\n 'dash.network.http.download': {\n params: WireRequest<HttpDownloadRequest>;\n result: HttpDownloadResponse;\n };\n 'dash.network.http.upload': {\n params: Omit<HttpUploadRequest, 'files'> & {\n files: { field: string; file: string; name?: string }[];\n };\n result: HttpResponse;\n };\n}\n\n// Like fetch, resolves with any response, even a 404. An object body is sent as JSON.\nexport function request<\n ResponseBody = string,\n RequestBody extends HttpRequestBody = HttpRequestBody,\n>(\n options: HttpRequest<RequestBody> & HttpReadOptions<ResponseBody>,\n callOptions?: CallOptions,\n): DashRequest<HttpResponse<ResponseBody>> {\n const { as, ...request } = options as HttpRequest & { as?: ReadAs };\n const response = call('dash.network.http.request', wireRequest(request, as), callOptions);\n return readBody(response, as);\n}\n\n// Saves a 2xx response's body, up to 100 MB, to a temporary file.\nexport function download(\n options: HttpDownloadRequest,\n callOptions?: CallOptions,\n): DashRequest<HttpDownloadResponse> {\n return call('dash.network.http.download', wireRequest(options), callOptions);\n}\n\n// Sends the dot's files as a multipart form.\nexport function upload<ResponseBody = string>(\n options: HttpUploadRequest & HttpReadOptions<ResponseBody>,\n callOptions?: CallOptions,\n): DashRequest<HttpResponse<ResponseBody>> {\n const { as, ...request } = options as HttpUploadRequest & { as?: ReadAs };\n const files = request.files.map(({ file, ...rest }) => ({ ...rest, file: fileId(file) }));\n const params = { ...request, files };\n if (as === 'json') {\n params.headers = withDefaultHeader(request.headers, 'Accept', 'application/json');\n }\n const response = call('dash.network.http.upload', params, callOptions);\n return readBody(response, as);\n}\n\nfunction wireRequest<Request extends HttpRequest>(\n request: Request,\n as?: ReadAs,\n): WireRequest<Request> {\n let headers = request.headers;\n let body: string | undefined;\n if (as === 'json') {\n headers = withDefaultHeader(headers, 'Accept', 'application/json');\n }\n if (typeof request.body === 'string') {\n body = request.body;\n } else if (request.body !== undefined) {\n headers = withDefaultHeader(headers, 'Content-Type', 'application/json');\n body = JSON.stringify(request.body);\n }\n return { ...request, headers, body };\n}\n\nfunction withDefaultHeader(\n headers: Record<string, string> | undefined,\n name: string,\n value: string,\n): Record<string, string> {\n const lowerName = name.toLowerCase();\n if (headers && Object.keys(headers).some((existing) => existing.toLowerCase() === lowerName)) {\n return headers;\n }\n return { ...headers, [name]: value };\n}\n\nfunction readBody<Body>(\n response: DashRequest<HttpResponse>,\n as: ReadAs | undefined,\n): DashRequest<HttpResponse<Body>> {\n if (as !== 'json') {\n return response as DashRequest<HttpResponse<Body>>;\n }\n const parsed = response.then((result) => ({ ...result, body: parseJson<Body>(result) }));\n return createHostRequest(parsed, () => response.cancel());\n}\n\nfunction parseJson<Body>({ status, statusText, body }: HttpResponse): Body {\n try {\n return JSON.parse(body) as Body;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new HostError('failed', `The response (${status} ${statusText}) isn't JSON: ${message}`);\n }\n}\n","import type { HttpMethods } from './http';\nimport * as http from './http';\n\nexport { http };\nexport type {\n HttpDownloadRequest,\n HttpDownloadResponse,\n HttpMethod,\n HttpReadOptions,\n HttpRequest,\n HttpRequestBody,\n HttpResponse,\n HttpUploadFile,\n HttpUploadRequest,\n} from './http';\n\nexport type NetworkMethods = HttpMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\n// A dot's own key-value cache, apart from its files. It holds up to 64 MB of JSON values, each kept\n// until removed or until its `ttl` runs out.\n\nexport type CacheValue = string | number | boolean | CacheValue[] | { [key: string]: CacheValue };\n\nexport interface CacheMethods {\n 'dash.storage.cache.get': { params: { key: string }; result: CacheValue | null };\n 'dash.storage.cache.set': {\n params: { key: string; value: CacheValue; ttl?: number | undefined };\n result: void;\n };\n 'dash.storage.cache.remove': { params: { key: string }; result: void };\n 'dash.storage.cache.exists': { params: { key: string }; result: boolean };\n 'dash.storage.cache.keys': { params: Record<string, never>; result: string[] };\n 'dash.storage.cache.clear': { params: Record<string, never>; result: void };\n}\n\nexport interface CacheSetOptions {\n // How many seconds the entry lasts. Without it, or with 0 or less, it lasts until removed.\n ttl?: number | undefined;\n}\n\n// Resolves with null for a missing or expired key.\nexport function get<Value extends CacheValue = CacheValue>(\n key: string,\n callOptions?: CallOptions,\n): DashRequest<Value | null> {\n return call('dash.storage.cache.get', { key }, callOptions) as DashRequest<Value | null>;\n}\n\nexport function set(\n key: string,\n value: CacheValue,\n options: CacheSetOptions = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.storage.cache.set', { key, value, ...options }, callOptions);\n}\n\nexport function remove(key: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.cache.remove', { key }, callOptions);\n}\n\nexport function exists(key: string, callOptions?: CallOptions): DashRequest<boolean> {\n return call('dash.storage.cache.exists', { key }, callOptions);\n}\n\n// The keys, sorted.\nexport function keys(callOptions?: CallOptions): DashRequest<string[]> {\n return call('dash.storage.cache.keys', {}, callOptions);\n}\n\nexport function clear(callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.cache.clear', {}, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\nimport type { DotFile } from '../files';\nimport { fileId } from '../files';\n\n// A dot's own files, in a folder no other dot sees. Paths are relative to it, such as\n// \"receipts/42.pdf\", and '' is the folder itself.\n\nexport interface FileEntry {\n name: string;\n path: string;\n size: number;\n kind: 'file' | 'folder';\n modifiedAt: number;\n contentType?: string;\n}\n\nexport type FileEncoding = 'text' | 'base64';\n\nexport interface StorageUsage {\n used: number;\n quota: number;\n}\n\nexport interface FileMethods {\n 'dash.storage.file.read': { params: { path: string; as?: FileEncoding }; result: string };\n 'dash.storage.file.write': {\n params: { path: string; data: string; as?: FileEncoding; append?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.stat': { params: { path: string }; result: FileEntry | null };\n 'dash.storage.file.list': { params: { path: string; recursive?: boolean }; result: FileEntry[] };\n 'dash.storage.file.createFolder': { params: { path: string }; result: FileEntry };\n 'dash.storage.file.move': {\n params: { from: string; to: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.copy': {\n params: { from: string; to: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.remove': { params: { path: string; recursive?: boolean }; result: void };\n 'dash.storage.file.save': {\n params: { file: string; path: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.open': { params: { path: string }; result: DotFile };\n 'dash.storage.file.usage': { params: Record<string, never>; result: StorageUsage };\n 'dash.storage.file.pick': { params: { types?: string[] }; result: DotFile };\n}\n\nexport interface PickFileOptions {\n // Content types the person may choose, such as 'application/pdf' or 'image/*'. Any file without them.\n types?: string[];\n}\n\nexport interface ReadOptions {\n as?: FileEncoding;\n}\n\nexport interface WriteOptions {\n as?: FileEncoding;\n append?: boolean;\n}\n\nexport interface ReplaceOptions {\n overwrite?: boolean;\n}\n\n// Reads a file of up to 5 MB.\nexport function read(\n path: string,\n options: ReadOptions = {},\n callOptions?: CallOptions,\n): DashRequest<string> {\n return call('dash.storage.file.read', { path, ...options }, callOptions);\n}\n\n// Creates any missing folders above the file.\nexport function write(\n path: string,\n data: string,\n options: WriteOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.write', { path, data, ...options }, callOptions);\n}\n\nexport function stat(path: string, callOptions?: CallOptions): DashRequest<FileEntry | null> {\n return call('dash.storage.file.stat', { path }, callOptions);\n}\n\n// Sorted by path.\nexport function list(\n path = '',\n options: { recursive?: boolean } = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry[]> {\n return call('dash.storage.file.list', { path, ...options }, callOptions);\n}\n\nexport function createFolder(path: string, callOptions?: CallOptions): DashRequest<FileEntry> {\n return call('dash.storage.file.createFolder', { path }, callOptions);\n}\n\nexport function move(\n from: string,\n to: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.move', { from, to, ...options }, callOptions);\n}\n\nexport function copy(\n from: string,\n to: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.copy', { from, to, ...options }, callOptions);\n}\n\n// Removing a folder that isn't empty needs `recursive`.\nexport function remove(\n path: string,\n options: { recursive?: boolean } = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.storage.file.remove', { path, ...options }, callOptions);\n}\n\n// Keeps a temporary file, such as a download, at `path`.\nexport function save(\n file: DotFile | string,\n path: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.save', { file: fileId(file), path, ...options }, callOptions);\n}\n\n// A stored file as a DotFile, to show with its `url` or send with `http.upload`.\nexport function open(path: string, callOptions?: CallOptions): DashRequest<DotFile> {\n return call('dash.storage.file.open', { path }, callOptions);\n}\n\nexport function usage(callOptions?: CallOptions): DashRequest<StorageUsage> {\n return call('dash.storage.file.usage', {}, callOptions);\n}\n\n// Lets the person choose a file from their phone, of at most 25 MB. Needs the `files` permission.\n// Rejects with `cancelled` if they close the picker, and with `invalid` for a larger file. Like a\n// download, it lasts until the dot closes, so `save` it to keep it.\nexport function pick(\n options: PickFileOptions = {},\n callOptions?: CallOptions,\n): DashRequest<DotFile> {\n return call('dash.storage.file.pick', options.types ? { types: options.types } : {}, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\n// A dot's secrets, such as tokens its own API gives the person. Holds up to 8 strings of up to 4 KB\n// each, encrypted with a key that never leaves the device. Don't keep the dot's own API keys here:\n// they would ship in its bundle, which anyone can read.\n\nexport interface SecretMethods {\n 'dash.storage.secret.get': { params: { key: string }; result: string | null };\n 'dash.storage.secret.set': { params: { key: string; value: string }; result: void };\n 'dash.storage.secret.remove': { params: { key: string }; result: void };\n 'dash.storage.secret.clear': { params: Record<string, never>; result: void };\n}\n\nexport function get(key: string, callOptions?: CallOptions): DashRequest<string | null> {\n return call('dash.storage.secret.get', { key }, callOptions);\n}\n\nexport function set(key: string, value: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.set', { key, value }, callOptions);\n}\n\nexport function remove(key: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.remove', { key }, callOptions);\n}\n\nexport function clear(callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.clear', {}, callOptions);\n}\n","// A dot's own data, kept on this device for the signed-in Dash user only. It's never backed up or\n// moved to a new phone, and another user who signs in sees none of it. Keep what matters on the\n// dot's server, and treat this as a copy you can fetch again.\n\nimport type { CacheMethods } from './cache';\nimport * as cache from './cache';\nimport type { FileMethods } from './file';\nimport * as file from './file';\nimport type { SecretMethods } from './secret';\nimport * as secret from './secret';\n\nexport { cache, file, secret };\nexport type { CacheSetOptions, CacheValue } from './cache';\nexport type {\n FileEncoding,\n FileEntry,\n PickFileOptions,\n ReadOptions,\n ReplaceOptions,\n StorageUsage,\n WriteOptions,\n} from './file';\n\nexport type StorageMethods = FileMethods & CacheMethods & SecretMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface ClipboardMethods {\n 'dash.system.copyText': { params: { text: string }; result: void };\n}\n\nexport function copyText(text: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.copyText', { text }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface DelayMethods {\n 'dash.system.delay': { params: { milliseconds: number }; result: void };\n}\n\n// Resolves after `milliseconds`. The host keeps the time, since a dot's logic has no timers.\nexport function delay(milliseconds: number, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.delay', { milliseconds }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport type VibrationStyle = 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error';\n\nexport interface VibrateOptions {\n // Defaults to `medium`.\n style?: VibrationStyle | undefined;\n}\n\nexport interface HapticsMethods {\n 'dash.system.vibrate': { params: VibrateOptions; result: void };\n}\n\n// Plays a short vibration. Resolves once it's done.\nexport function vibrate(\n options: VibrateOptions = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.system.vibrate', { style: options.style ?? 'medium' }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface OpenUrlMethods {\n 'dash.system.openUrl': { params: { url: string }; result: void };\n}\n\n// Opens an https address in the device's browser. Any other address rejects with `invalid`.\nexport function openUrl(url: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.openUrl', { url }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\nimport type { DotFile } from '../files';\nimport { fileId } from '../files';\n\n// Give at least one of `text`, `url` and `file`.\nexport interface ShareOptions {\n // A subject, for apps that use one, such as email.\n title?: string;\n text?: string;\n url?: string;\n file?: DotFile | string;\n}\n\nexport interface ShareMethods {\n 'dash.system.share': {\n params: { title?: string; text?: string; url?: string; file?: string };\n result: void;\n };\n}\n\n// Opens the device's share sheet. Resolves once it shows.\nexport function share(options: ShareOptions, callOptions?: CallOptions): DashRequest<void> {\n const { file, ...rest } = options;\n if (file === undefined) {\n return call('dash.system.share', rest, callOptions);\n }\n return call('dash.system.share', { ...rest, file: fileId(file) }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport type TorchState = 'on' | 'off';\n\nexport interface TorchMethods {\n 'dash.system.torch': { params: { state: TorchState }; result: void };\n}\n\n// Turns the torch on or off. Rejects with `unsupported` on a device without one.\nexport function torch(state: TorchState, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.torch', { state }, callOptions);\n}\n","import type { ClipboardMethods } from './clipboard';\nimport type { DelayMethods } from './delay';\nimport type { HapticsMethods } from './haptics';\nimport type { OpenUrlMethods } from './open-url';\nimport type { ShareMethods } from './share';\nimport type { TorchMethods } from './torch';\n\nexport { copyText } from './clipboard';\nexport { delay } from './delay';\nexport { vibrate } from './haptics';\nexport { openUrl } from './open-url';\nexport { share } from './share';\nexport { torch } from './torch';\nexport type { VibrateOptions, VibrationStyle } from './haptics';\nexport type { ShareOptions } from './share';\nexport type { TorchState } from './torch';\n\nexport type SystemMethods = ClipboardMethods &\n DelayMethods &\n HapticsMethods &\n OpenUrlMethods &\n ShareMethods &\n TorchMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface AlertAction {\n id: string;\n label: string;\n // `cancel` dismisses the alert. `destructive` marks something that can't be undone.\n role?: 'default' | 'cancel' | 'destructive' | undefined;\n}\n\nexport interface AlertOptions {\n title: string;\n message?: string | undefined;\n // Defaults to one OK button.\n actions?: AlertAction[] | undefined;\n}\n\nexport interface AlertResult {\n // The `id` of the action the person chose.\n action: string;\n}\n\nexport interface DialogMethods {\n 'dash.ui.alert': { params: AlertOptions; result: AlertResult };\n}\n\n// Shows a native alert. Resolves with the action the person chose.\nexport function alert(options: AlertOptions, callOptions?: CallOptions): DashRequest<AlertResult> {\n const actions = options.actions ?? [{ id: 'ok', label: 'OK' }];\n return call('dash.ui.alert', { ...options, actions }, callOptions);\n}\n","import type { DialogMethods } from './dialogs';\n\nexport { alert } from './dialogs';\nexport type { AlertAction, AlertOptions, AlertResult } from './dialogs';\n\nexport type UIMethods = DialogMethods;\n","import type { DashRequest } from './call';\n\n// A copy of `group`, such as `dash`, that passes each request it starts to `track`.\nexport function tracked<Group extends object>(\n group: Group,\n track: (request: DashRequest<unknown>) => void,\n): Group {\n const copy: Record<string, unknown> = {};\n for (const [name, member] of Object.entries(group)) {\n if (typeof member === 'function') {\n const start = member as (...args: unknown[]) => DashRequest<unknown>;\n copy[name] = (...args: unknown[]) => {\n const request = start(...args);\n track(request);\n return request;\n };\n } else {\n copy[name] = tracked(member as object, track);\n }\n }\n return copy as Group;\n}\n","import * as media from './media';\nimport * as network from './network';\nimport * as storage from './storage';\nimport * as system from './system';\nimport * as ui from './ui';\n\n// Dash's features for a dot's logic, in groups: `dash.ui.alert(...)`, `dash.system.torch(...)`,\n// `dash.network.http.request(...)`.\nexport const dash = { ui, system, network, storage, media };\n\nexport type Dash = typeof dash;\n\nexport { tracked } from './tracked';\n\nexport { HostError } from '@monimesl/dot-core';\nexport type { HostErrorCode } from '@monimesl/dot-core';\nexport type { CallOptions, DashRequest } from './call';\nexport type { DashMethod, DashMethods } from './methods';\nexport type {\n CacheSetOptions,\n CacheValue,\n FileEncoding,\n FileEntry,\n PickFileOptions,\n ReadOptions,\n ReplaceOptions,\n StorageMethods,\n StorageUsage,\n WriteOptions,\n} from './storage';\nexport type { DotFile } from './files';\nexport type { CodeFormat, MediaMethods, PhotoSource, PickPhotoOptions, ScannedCode } from './media';\nexport type {\n HttpDownloadRequest,\n HttpDownloadResponse,\n HttpMethod,\n HttpReadOptions,\n HttpRequest,\n HttpRequestBody,\n HttpResponse,\n HttpUploadFile,\n HttpUploadRequest,\n NetworkMethods,\n} from './network';\nexport type {\n ShareOptions,\n SystemMethods,\n TorchState,\n VibrateOptions,\n VibrationStyle,\n} from './system';\nexport type { AlertAction, AlertOptions, AlertResult, UIMethods } from './ui';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["HostError","get","set","remove","clear","remove"],"sources":["../src/call.ts","../src/media/pick-photo.ts","../src/media/scan-code.ts","../src/media/index.ts","../src/files.ts","../src/network/http.ts","../src/network/index.ts","../src/storage/cache.ts","../src/storage/file.ts","../src/storage/secret.ts","../src/storage/index.ts","../src/system/clipboard.ts","../src/system/delay.ts","../src/system/haptics.ts","../src/system/open-url.ts","../src/system/share.ts","../src/system/torch.ts","../src/system/index.ts","../src/ui/dialogs.ts","../src/ui/pickers.ts","../src/ui/index.ts","../src/tracked.ts","../src/index.ts"],"sourcesContent":["import type { HostCallOptions, HostRequest } from '@monimesl/dot-core';\nimport { callHost } from '@monimesl/dot-core';\n\nimport type { DashMethod, DashMethods } from './methods';\n\nexport type CallOptions = HostCallOptions;\n\n// A running Dash call. Await it for the result, or cancel it.\nexport type DashRequest<Result> = HostRequest<Result>;\n\nexport function call<Method extends DashMethod>(\n method: Method,\n params: DashMethods[Method]['params'],\n options: CallOptions = {},\n): DashRequest<DashMethods[Method]['result']> {\n return callHost(method, params, options);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\nimport type { DotFile } from '../files';\n\nexport type PhotoSource = 'library' | 'camera';\n\nexport interface PickPhotoOptions {\n // `library` needs the `photoLibrary` permission, and `camera` the `camera` permission.\n source: PhotoSource;\n}\n\nexport interface PickPhotoMethods {\n 'dash.media.pickPhoto': { params: { source: PhotoSource }; result: DotFile };\n}\n\n// Lets the person choose a photo or take one. Resolves with it as a JPEG of at most 2048 pixels on its\n// longest side, without its location or other details. Rejects with `cancelled` if they close the\n// picker, and with `unsupported` on a device without a camera. Save it with `dash.storage.file.save`\n// to keep it after the dot closes.\nexport function pickPhoto(\n options: PickPhotoOptions,\n callOptions?: CallOptions,\n): DashRequest<DotFile> {\n return call('dash.media.pickPhoto', { source: options.source }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\n// Only QR codes for now. More formats can come later without changing what a dot gets.\nexport type CodeFormat = 'qr';\n\nexport interface ScannedCode {\n text: string;\n format: CodeFormat;\n}\n\nexport interface ScanCodeMethods {\n 'dash.media.scanCode': { params: Record<string, never>; result: ScannedCode };\n}\n\n// Opens Dash's scanner until it reads a QR code. Needs the `camera` permission. Rejects with\n// `cancelled` if the person closes it, and with `unsupported` where Dash has no scanner.\nexport function scanCode(callOptions?: CallOptions): DashRequest<ScannedCode> {\n return call('dash.media.scanCode', {}, callOptions);\n}\n","import type { PickPhotoMethods } from './pick-photo';\nimport type { ScanCodeMethods } from './scan-code';\n\nexport { pickPhoto } from './pick-photo';\nexport { scanCode } from './scan-code';\nexport type { PhotoSource, PickPhotoOptions } from './pick-photo';\nexport type { CodeFormat, ScannedCode } from './scan-code';\n\nexport type MediaMethods = PickPhotoMethods & ScanCodeMethods;\n","// A file the host keeps for the dot until it closes, such as a download. Show it with its `url`.\nexport interface DotFile {\n id: string;\n name: string;\n size: number;\n contentType: string;\n url: string;\n}\n\nexport function fileId(file: DotFile | string): string {\n return typeof file === 'string' ? file : file.id;\n}\n","import { HostError, createHostRequest } from '@monimesl/dot-core';\n\nimport type { CallOptions, DashRequest } from '../call';\nimport type { DotFile } from '../files';\nimport { call } from '../call';\nimport { fileId } from '../files';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';\n\nexport type HttpRequestBody = string | object;\n\nexport interface HttpRequest<Body extends HttpRequestBody = HttpRequestBody> {\n url: string;\n method?: HttpMethod;\n headers?: Record<string, string>;\n body?: Body;\n}\n\nexport interface HttpResponse<Body = string> {\n ok: boolean;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n body: Body;\n}\n\n// Any body type other than string needs `as: 'json'`.\nexport type HttpReadOptions<Body> = [Body] extends [string] ? { as?: 'text' } : { as: 'json' };\n\nexport interface HttpDownloadRequest extends HttpRequest {\n name?: string;\n}\n\nexport type HttpDownloadResponse =\n | (Omit<HttpResponse, 'ok' | 'body'> & { ok: true; file: DotFile })\n | (Omit<HttpResponse, 'ok'> & { ok: false });\n\nexport interface HttpUploadFile {\n field: string;\n file: DotFile | string;\n name?: string;\n}\n\nexport interface HttpUploadRequest {\n url: string;\n // Defaults to POST.\n method?: 'POST' | 'PUT' | 'PATCH';\n headers?: Record<string, string>;\n fields?: Record<string, string>;\n files: HttpUploadFile[];\n}\n\ntype WireRequest<Request extends HttpRequest> = Omit<Request, 'headers' | 'body'> & {\n headers?: Record<string, string> | undefined;\n body?: string | undefined;\n};\n\ntype ReadAs = 'text' | 'json';\n\nexport interface HttpMethods {\n 'dash.network.http.request': { params: WireRequest<HttpRequest>; result: HttpResponse };\n 'dash.network.http.download': {\n params: WireRequest<HttpDownloadRequest>;\n result: HttpDownloadResponse;\n };\n 'dash.network.http.upload': {\n params: Omit<HttpUploadRequest, 'files'> & {\n files: { field: string; file: string; name?: string }[];\n };\n result: HttpResponse;\n };\n}\n\n// Like fetch, resolves with any response, even a 404. An object body is sent as JSON.\nexport function request<\n ResponseBody = string,\n RequestBody extends HttpRequestBody = HttpRequestBody,\n>(\n options: HttpRequest<RequestBody> & HttpReadOptions<ResponseBody>,\n callOptions?: CallOptions,\n): DashRequest<HttpResponse<ResponseBody>> {\n const { as, ...request } = options as HttpRequest & { as?: ReadAs };\n const response = call('dash.network.http.request', wireRequest(request, as), callOptions);\n return readBody(response, as);\n}\n\n// Saves a 2xx response's body, up to 100 MB, to a temporary file.\nexport function download(\n options: HttpDownloadRequest,\n callOptions?: CallOptions,\n): DashRequest<HttpDownloadResponse> {\n return call('dash.network.http.download', wireRequest(options), callOptions);\n}\n\n// Sends the dot's files as a multipart form.\nexport function upload<ResponseBody = string>(\n options: HttpUploadRequest & HttpReadOptions<ResponseBody>,\n callOptions?: CallOptions,\n): DashRequest<HttpResponse<ResponseBody>> {\n const { as, ...request } = options as HttpUploadRequest & { as?: ReadAs };\n const files = request.files.map(({ file, ...rest }) => ({ ...rest, file: fileId(file) }));\n const params = { ...request, files };\n if (as === 'json') {\n params.headers = withDefaultHeader(request.headers, 'Accept', 'application/json');\n }\n const response = call('dash.network.http.upload', params, callOptions);\n return readBody(response, as);\n}\n\nfunction wireRequest<Request extends HttpRequest>(\n request: Request,\n as?: ReadAs,\n): WireRequest<Request> {\n let headers = request.headers;\n let body: string | undefined;\n if (as === 'json') {\n headers = withDefaultHeader(headers, 'Accept', 'application/json');\n }\n if (typeof request.body === 'string') {\n body = request.body;\n } else if (request.body !== undefined) {\n headers = withDefaultHeader(headers, 'Content-Type', 'application/json');\n body = JSON.stringify(request.body);\n }\n return { ...request, headers, body };\n}\n\nfunction withDefaultHeader(\n headers: Record<string, string> | undefined,\n name: string,\n value: string,\n): Record<string, string> {\n const lowerName = name.toLowerCase();\n if (headers && Object.keys(headers).some((existing) => existing.toLowerCase() === lowerName)) {\n return headers;\n }\n return { ...headers, [name]: value };\n}\n\nfunction readBody<Body>(\n response: DashRequest<HttpResponse>,\n as: ReadAs | undefined,\n): DashRequest<HttpResponse<Body>> {\n if (as !== 'json') {\n return response as DashRequest<HttpResponse<Body>>;\n }\n const parsed = response.then((result) => ({ ...result, body: parseJson<Body>(result) }));\n return createHostRequest(parsed, () => response.cancel());\n}\n\nfunction parseJson<Body>({ status, statusText, body }: HttpResponse): Body {\n try {\n return JSON.parse(body) as Body;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new HostError('failed', `The response (${status} ${statusText}) isn't JSON: ${message}`);\n }\n}\n","import type { HttpMethods } from './http';\nimport * as http from './http';\n\nexport { http };\nexport type {\n HttpDownloadRequest,\n HttpDownloadResponse,\n HttpMethod,\n HttpReadOptions,\n HttpRequest,\n HttpRequestBody,\n HttpResponse,\n HttpUploadFile,\n HttpUploadRequest,\n} from './http';\n\nexport type NetworkMethods = HttpMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\n// A dot's own key-value cache, apart from its files. It holds up to 64 MB of JSON values, each kept\n// until removed or until its `ttl` runs out.\n\nexport type CacheValue = string | number | boolean | CacheValue[] | { [key: string]: CacheValue };\n\nexport interface CacheMethods {\n 'dash.storage.cache.get': { params: { key: string }; result: CacheValue | null };\n 'dash.storage.cache.set': {\n params: { key: string; value: CacheValue; ttl?: number | undefined };\n result: void;\n };\n 'dash.storage.cache.remove': { params: { key: string }; result: void };\n 'dash.storage.cache.exists': { params: { key: string }; result: boolean };\n 'dash.storage.cache.keys': { params: Record<string, never>; result: string[] };\n 'dash.storage.cache.clear': { params: Record<string, never>; result: void };\n}\n\nexport interface CacheSetOptions {\n // How many seconds the entry lasts. Without it, or with 0 or less, it lasts until removed.\n ttl?: number | undefined;\n}\n\n// Resolves with null for a missing or expired key.\nexport function get<Value extends CacheValue = CacheValue>(\n key: string,\n callOptions?: CallOptions,\n): DashRequest<Value | null> {\n return call('dash.storage.cache.get', { key }, callOptions) as DashRequest<Value | null>;\n}\n\nexport function set(\n key: string,\n value: CacheValue,\n options: CacheSetOptions = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.storage.cache.set', { key, value, ...options }, callOptions);\n}\n\nexport function remove(key: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.cache.remove', { key }, callOptions);\n}\n\nexport function exists(key: string, callOptions?: CallOptions): DashRequest<boolean> {\n return call('dash.storage.cache.exists', { key }, callOptions);\n}\n\n// The keys, sorted.\nexport function keys(callOptions?: CallOptions): DashRequest<string[]> {\n return call('dash.storage.cache.keys', {}, callOptions);\n}\n\nexport function clear(callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.cache.clear', {}, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\nimport type { DotFile } from '../files';\nimport { fileId } from '../files';\n\n// A dot's own files, in a folder no other dot sees. Paths are relative to it, such as\n// \"receipts/42.pdf\", and '' is the folder itself.\n\nexport interface FileEntry {\n name: string;\n path: string;\n size: number;\n kind: 'file' | 'folder';\n modifiedAt: number;\n contentType?: string;\n}\n\nexport type FileEncoding = 'text' | 'base64';\n\nexport interface StorageUsage {\n used: number;\n quota: number;\n}\n\nexport interface FileMethods {\n 'dash.storage.file.read': { params: { path: string; as?: FileEncoding }; result: string };\n 'dash.storage.file.write': {\n params: { path: string; data: string; as?: FileEncoding; append?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.stat': { params: { path: string }; result: FileEntry | null };\n 'dash.storage.file.list': { params: { path: string; recursive?: boolean }; result: FileEntry[] };\n 'dash.storage.file.createFolder': { params: { path: string }; result: FileEntry };\n 'dash.storage.file.move': {\n params: { from: string; to: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.copy': {\n params: { from: string; to: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.remove': { params: { path: string; recursive?: boolean }; result: void };\n 'dash.storage.file.save': {\n params: { file: string; path: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.open': { params: { path: string }; result: DotFile };\n 'dash.storage.file.usage': { params: Record<string, never>; result: StorageUsage };\n 'dash.storage.file.pick': { params: { types?: string[] }; result: DotFile };\n}\n\nexport interface PickFileOptions {\n // Content types the person may choose, such as 'application/pdf' or 'image/*'. Any file without them.\n types?: string[];\n}\n\nexport interface ReadOptions {\n as?: FileEncoding;\n}\n\nexport interface WriteOptions {\n as?: FileEncoding;\n append?: boolean;\n}\n\nexport interface ReplaceOptions {\n overwrite?: boolean;\n}\n\n// Reads a file of up to 5 MB.\nexport function read(\n path: string,\n options: ReadOptions = {},\n callOptions?: CallOptions,\n): DashRequest<string> {\n return call('dash.storage.file.read', { path, ...options }, callOptions);\n}\n\n// Creates any missing folders above the file.\nexport function write(\n path: string,\n data: string,\n options: WriteOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.write', { path, data, ...options }, callOptions);\n}\n\nexport function stat(path: string, callOptions?: CallOptions): DashRequest<FileEntry | null> {\n return call('dash.storage.file.stat', { path }, callOptions);\n}\n\n// Sorted by path.\nexport function list(\n path = '',\n options: { recursive?: boolean } = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry[]> {\n return call('dash.storage.file.list', { path, ...options }, callOptions);\n}\n\nexport function createFolder(path: string, callOptions?: CallOptions): DashRequest<FileEntry> {\n return call('dash.storage.file.createFolder', { path }, callOptions);\n}\n\nexport function move(\n from: string,\n to: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.move', { from, to, ...options }, callOptions);\n}\n\nexport function copy(\n from: string,\n to: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.copy', { from, to, ...options }, callOptions);\n}\n\n// Removing a folder that isn't empty needs `recursive`.\nexport function remove(\n path: string,\n options: { recursive?: boolean } = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.storage.file.remove', { path, ...options }, callOptions);\n}\n\n// Keeps a temporary file, such as a download, at `path`.\nexport function save(\n file: DotFile | string,\n path: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.save', { file: fileId(file), path, ...options }, callOptions);\n}\n\n// A stored file as a DotFile, to show with its `url` or send with `http.upload`.\nexport function open(path: string, callOptions?: CallOptions): DashRequest<DotFile> {\n return call('dash.storage.file.open', { path }, callOptions);\n}\n\nexport function usage(callOptions?: CallOptions): DashRequest<StorageUsage> {\n return call('dash.storage.file.usage', {}, callOptions);\n}\n\n// Lets the person choose a file from their phone, of at most 25 MB. Needs the `files` permission.\n// Rejects with `cancelled` if they close the picker, and with `invalid` for a larger file. Like a\n// download, it lasts until the dot closes, so `save` it to keep it.\nexport function pick(\n options: PickFileOptions = {},\n callOptions?: CallOptions,\n): DashRequest<DotFile> {\n return call('dash.storage.file.pick', options.types ? { types: options.types } : {}, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\n// A dot's secrets, such as tokens its own API gives the person. Holds up to 8 strings of up to 4 KB\n// each, encrypted with a key that never leaves the device. Don't keep the dot's own API keys here:\n// they would ship in its bundle, which anyone can read.\n\nexport interface SecretMethods {\n 'dash.storage.secret.get': { params: { key: string }; result: string | null };\n 'dash.storage.secret.set': { params: { key: string; value: string }; result: void };\n 'dash.storage.secret.remove': { params: { key: string }; result: void };\n 'dash.storage.secret.clear': { params: Record<string, never>; result: void };\n}\n\nexport function get(key: string, callOptions?: CallOptions): DashRequest<string | null> {\n return call('dash.storage.secret.get', { key }, callOptions);\n}\n\nexport function set(key: string, value: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.set', { key, value }, callOptions);\n}\n\nexport function remove(key: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.remove', { key }, callOptions);\n}\n\nexport function clear(callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.clear', {}, callOptions);\n}\n","// A dot's own data, kept on this device for the signed-in Dash user only. It's never backed up or\n// moved to a new phone, and another user who signs in sees none of it. Keep what matters on the\n// dot's server, and treat this as a copy you can fetch again.\n\nimport type { CacheMethods } from './cache';\nimport * as cache from './cache';\nimport type { FileMethods } from './file';\nimport * as file from './file';\nimport type { SecretMethods } from './secret';\nimport * as secret from './secret';\n\nexport { cache, file, secret };\nexport type { CacheSetOptions, CacheValue } from './cache';\nexport type {\n FileEncoding,\n FileEntry,\n PickFileOptions,\n ReadOptions,\n ReplaceOptions,\n StorageUsage,\n WriteOptions,\n} from './file';\n\nexport type StorageMethods = FileMethods & CacheMethods & SecretMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface ClipboardMethods {\n 'dash.system.copyText': { params: { text: string }; result: void };\n}\n\nexport function copyText(text: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.copyText', { text }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface DelayMethods {\n 'dash.system.delay': { params: { milliseconds: number }; result: void };\n}\n\n// Resolves after `milliseconds`. The host keeps the time, since a dot's logic has no timers.\nexport function delay(milliseconds: number, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.delay', { milliseconds }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport type VibrationStyle = 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error';\n\nexport interface VibrateOptions {\n // Defaults to `medium`.\n style?: VibrationStyle | undefined;\n}\n\nexport interface HapticsMethods {\n 'dash.system.vibrate': { params: VibrateOptions; result: void };\n}\n\n// Plays a short vibration. Resolves once it's done.\nexport function vibrate(\n options: VibrateOptions = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.system.vibrate', { style: options.style ?? 'medium' }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface OpenUrlMethods {\n 'dash.system.openUrl': { params: { url: string }; result: void };\n}\n\n// Opens an https address in the device's browser. Any other address rejects with `invalid`.\nexport function openUrl(url: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.openUrl', { url }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\nimport type { DotFile } from '../files';\nimport { fileId } from '../files';\n\n// Give at least one of `text`, `url` and `file`.\nexport interface ShareOptions {\n // A subject, for apps that use one, such as email.\n title?: string;\n text?: string;\n url?: string;\n file?: DotFile | string;\n}\n\nexport interface ShareMethods {\n 'dash.system.share': {\n params: { title?: string; text?: string; url?: string; file?: string };\n result: void;\n };\n}\n\n// Opens the device's share sheet. Resolves once it shows.\nexport function share(options: ShareOptions, callOptions?: CallOptions): DashRequest<void> {\n const { file, ...rest } = options;\n if (file === undefined) {\n return call('dash.system.share', rest, callOptions);\n }\n return call('dash.system.share', { ...rest, file: fileId(file) }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport type TorchState = 'on' | 'off';\n\nexport interface TorchMethods {\n 'dash.system.torch': { params: { state: TorchState }; result: void };\n}\n\n// Turns the torch on or off. Rejects with `unsupported` on a device without one.\nexport function torch(state: TorchState, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.torch', { state }, callOptions);\n}\n","import type { ClipboardMethods } from './clipboard';\nimport type { DelayMethods } from './delay';\nimport type { HapticsMethods } from './haptics';\nimport type { OpenUrlMethods } from './open-url';\nimport type { ShareMethods } from './share';\nimport type { TorchMethods } from './torch';\n\nexport { copyText } from './clipboard';\nexport { delay } from './delay';\nexport { vibrate } from './haptics';\nexport { openUrl } from './open-url';\nexport { share } from './share';\nexport { torch } from './torch';\nexport type { VibrateOptions, VibrationStyle } from './haptics';\nexport type { ShareOptions } from './share';\nexport type { TorchState } from './torch';\n\nexport type SystemMethods = ClipboardMethods &\n DelayMethods &\n HapticsMethods &\n OpenUrlMethods &\n ShareMethods &\n TorchMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface AlertAction {\n id: string;\n label: string;\n // `cancel` dismisses the alert. `destructive` marks something that can't be undone.\n role?: 'default' | 'cancel' | 'destructive' | undefined;\n}\n\nexport interface AlertOptions {\n title: string;\n message?: string | undefined;\n // Defaults to one OK button.\n actions?: AlertAction[] | undefined;\n}\n\nexport interface AlertResult {\n // The `id` of the action the person chose.\n action: string;\n}\n\nexport interface DialogMethods {\n 'dash.ui.alert': { params: AlertOptions; result: AlertResult };\n}\n\n// Shows a native alert. Resolves with the action the person chose.\nexport function alert(options: AlertOptions, callOptions?: CallOptions): DashRequest<AlertResult> {\n const actions = options.actions ?? [{ id: 'ok', label: 'OK' }];\n return call('dash.ui.alert', { ...options, actions }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface PickDateOptions {\n title?: string | undefined;\n // Dates such as \"2026-10-24\". `value` is the one chosen when the picker opens.\n value?: string | undefined;\n min?: string | undefined;\n max?: string | undefined;\n}\n\nexport interface PickTimeOptions {\n title?: string | undefined;\n // A time of day in 24 hours, such as \"19:30\", chosen when the picker opens.\n value?: string | undefined;\n}\n\nexport interface PickerMethods {\n 'dash.ui.pickDate': { params: PickDateOptions; result: string };\n 'dash.ui.pickTime': { params: PickTimeOptions; result: string };\n}\n\n// Opens the phone's own calendar. Resolves with the chosen date, such as \"2026-10-24\", or rejects\n// with `cancelled` if the person closes it.\nexport function pickDate(\n options: PickDateOptions = {},\n callOptions?: CallOptions,\n): DashRequest<string> {\n return call('dash.ui.pickDate', options, callOptions);\n}\n\n// Opens the phone's own clock. Resolves with the chosen time in 24 hours, such as \"19:30\", or\n// rejects with `cancelled` if the person closes it.\nexport function pickTime(\n options: PickTimeOptions = {},\n callOptions?: CallOptions,\n): DashRequest<string> {\n return call('dash.ui.pickTime', options, callOptions);\n}\n","import type { DialogMethods } from './dialogs';\nimport type { PickerMethods } from './pickers';\n\nexport { alert } from './dialogs';\nexport { pickDate, pickTime } from './pickers';\nexport type { AlertAction, AlertOptions, AlertResult } from './dialogs';\nexport type { PickDateOptions, PickTimeOptions } from './pickers';\n\nexport type UIMethods = DialogMethods & PickerMethods;\n","import type { DashRequest } from './call';\n\n// A copy of `group`, such as `dash`, that passes each request it starts to `track`.\nexport function tracked<Group extends object>(\n group: Group,\n track: (request: DashRequest<unknown>) => void,\n): Group {\n const copy: Record<string, unknown> = {};\n for (const [name, member] of Object.entries(group)) {\n if (typeof member === 'function') {\n const start = member as (...args: unknown[]) => DashRequest<unknown>;\n copy[name] = (...args: unknown[]) => {\n const request = start(...args);\n track(request);\n return request;\n };\n } else {\n copy[name] = tracked(member as object, track);\n }\n }\n return copy as Group;\n}\n","import * as media from './media';\nimport * as network from './network';\nimport * as storage from './storage';\nimport * as system from './system';\nimport * as ui from './ui';\n\n// Dash's features for a dot's logic, in groups: `dash.ui.alert(...)`, `dash.system.torch(...)`,\n// `dash.network.http.request(...)`.\nexport const dash = { ui, system, network, storage, media };\n\nexport type Dash = typeof dash;\n\nexport { tracked } from './tracked';\n\nexport { HostError } from '@monimesl/dot-core';\nexport type { HostErrorCode } from '@monimesl/dot-core';\nexport type { CallOptions, DashRequest } from './call';\nexport type { DashMethod, DashMethods } from './methods';\nexport type {\n CacheSetOptions,\n CacheValue,\n FileEncoding,\n FileEntry,\n PickFileOptions,\n ReadOptions,\n ReplaceOptions,\n StorageMethods,\n StorageUsage,\n WriteOptions,\n} from './storage';\nexport type { DotFile } from './files';\nexport type { CodeFormat, MediaMethods, PhotoSource, PickPhotoOptions, ScannedCode } from './media';\nexport type {\n HttpDownloadRequest,\n HttpDownloadResponse,\n HttpMethod,\n HttpReadOptions,\n HttpRequest,\n HttpRequestBody,\n HttpResponse,\n HttpUploadFile,\n HttpUploadRequest,\n NetworkMethods,\n} from './network';\nexport type {\n ShareOptions,\n SystemMethods,\n TorchState,\n VibrateOptions,\n VibrationStyle,\n} from './system';\nexport type {\n AlertAction,\n AlertOptions,\n AlertResult,\n PickDateOptions,\n PickTimeOptions,\n UIMethods,\n} from './ui';\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monimesl/dot-dash",
3
- "version": "0.1.0-alpha.16",
3
+ "version": "0.1.0-alpha.18",
4
4
  "description": "Dash features for dots: native UI, system and more, called from the service",
5
5
  "type": "module",
6
6
  "repository": {
@@ -24,7 +24,7 @@
24
24
  "main": "./dist/index.js",
25
25
  "types": "./dist/index.d.ts",
26
26
  "dependencies": {
27
- "@monimesl/dot-core": "0.1.0-alpha.16"
27
+ "@monimesl/dot-core": "0.1.0-alpha.18"
28
28
  },
29
29
  "devDependencies": {
30
30
  "publint": "^0.3.24",