rmapi-js 11.0.0 → 11.1.1
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/devices.d.ts +22 -0
- package/dist/devices.js +20 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +8 -1
- package/dist/raw.d.ts +27 -19
- package/dist/rmapi-js.esm.min.js +6 -6
- package/package.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** a reMarkable device display */
|
|
2
|
+
export interface DeviceScreen {
|
|
3
|
+
/** the marketing name */
|
|
4
|
+
name: string;
|
|
5
|
+
/** native portrait width in pixels */
|
|
6
|
+
width: number;
|
|
7
|
+
/** native portrait height in pixels */
|
|
8
|
+
height: number;
|
|
9
|
+
/** display density in dots per inch */
|
|
10
|
+
dpi: number;
|
|
11
|
+
}
|
|
12
|
+
/** the model number of a known reMarkable device */
|
|
13
|
+
export type DeviceModel = "RM100" | "RM110" | "RM02A" | "RM03A" | "RM102";
|
|
14
|
+
/**
|
|
15
|
+
* display specs for known reMarkable devices, keyed by model number
|
|
16
|
+
*
|
|
17
|
+
* These feed the `customFit` zoom math: `customZoomPageWidth`/`customZoomPageHeight`
|
|
18
|
+
* are the source page in device pixels (`pagePt * dpi / 72`), and `width`/`height`
|
|
19
|
+
* give the screen aspect. Every model is 3:4 (0.75) except the Paper Pro Move,
|
|
20
|
+
* which is 9:16.
|
|
21
|
+
*/
|
|
22
|
+
export declare const deviceScreens: Record<DeviceModel, DeviceScreen>;
|
package/dist/devices.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* display specs for known reMarkable devices, keyed by model number
|
|
3
|
+
*
|
|
4
|
+
* These feed the `customFit` zoom math: `customZoomPageWidth`/`customZoomPageHeight`
|
|
5
|
+
* are the source page in device pixels (`pagePt * dpi / 72`), and `width`/`height`
|
|
6
|
+
* give the screen aspect. Every model is 3:4 (0.75) except the Paper Pro Move,
|
|
7
|
+
* which is 9:16.
|
|
8
|
+
*/
|
|
9
|
+
export const deviceScreens = {
|
|
10
|
+
RM100: { name: "reMarkable 1", width: 1404, height: 1872, dpi: 226 },
|
|
11
|
+
RM110: { name: "reMarkable 2", width: 1404, height: 1872, dpi: 226 },
|
|
12
|
+
RM02A: { name: "reMarkable Paper Pro", width: 1620, height: 2160, dpi: 229 },
|
|
13
|
+
RM03A: {
|
|
14
|
+
name: "reMarkable Paper Pro Move",
|
|
15
|
+
width: 954,
|
|
16
|
+
height: 1696,
|
|
17
|
+
dpi: 264,
|
|
18
|
+
},
|
|
19
|
+
RM102: { name: "reMarkable Paper Pure", width: 1404, height: 1872, dpi: 226 },
|
|
20
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type BackgroundFilter, type CollectionContent, type Content, type DocumentContent, type Metadata, type Orientation, type RawRemarkableApi, type SimpleEntry, type Tag, type TemplateContent, type TextAlignment, type ZoomMode } from "./raw.js";
|
|
2
|
+
export { type DeviceModel, type DeviceScreen, deviceScreens, } from "./devices.js";
|
|
2
3
|
export { HashNotFoundError, ValidationError } from "./error.js";
|
|
3
4
|
export type { BackgroundFilter, CollectionContent, Content, CPageNumberValue, CPagePage, CPageStringValue, CPages, CPageUUID, DocumentContent, DocumentMetadata, Entries, FileType, KeyboardMetadata, LegacyCollectionContent, LegacyDocumentContent, Metadata, Orientation, PageTag, RawEntry, RawRemarkableApi, SchemaVersion, SimpleEntry, Tag, TemplateContent, TextAlignment, UploadMimeType, ZoomMode, } from "./raw.js";
|
|
4
5
|
/** common properties shared by collections and documents */
|
|
@@ -162,6 +163,18 @@ export interface PutOptions {
|
|
|
162
163
|
zoomMode?: ZoomMode;
|
|
163
164
|
/** the contrast filter setting */
|
|
164
165
|
viewBackgroundFilter?: BackgroundFilter;
|
|
166
|
+
/** the custom zoom scale, applied when zoomMode is "customFit" */
|
|
167
|
+
customZoomScale?: number;
|
|
168
|
+
/** the horizontal center offset for customFit zoom */
|
|
169
|
+
customZoomCenterX?: number;
|
|
170
|
+
/** the vertical center offset for customFit zoom */
|
|
171
|
+
customZoomCenterY?: number;
|
|
172
|
+
/** the rendered page width in pixels, the unit customFit centers use */
|
|
173
|
+
customZoomPageWidth?: number;
|
|
174
|
+
/** the rendered page height in pixels, the unit customFit centers use */
|
|
175
|
+
customZoomPageHeight?: number;
|
|
176
|
+
/** the orientation the customFit zoom was set in */
|
|
177
|
+
customZoomOrientation?: Orientation;
|
|
165
178
|
/**
|
|
166
179
|
* whether to refresh current file structure before putting
|
|
167
180
|
*
|
|
@@ -296,6 +309,32 @@ export interface RemarkableApi {
|
|
|
296
309
|
* doesn't match the current server generation, requiring you to retry until
|
|
297
310
|
* it works.
|
|
298
311
|
*
|
|
312
|
+
* @remarks
|
|
313
|
+
* When `zoomMode` is `"customFit"` the `customZoom*` fields describe the view,
|
|
314
|
+
* all in the source page's device pixels: `customZoomPageWidth` and
|
|
315
|
+
* `customZoomPageHeight` are the page dimensions scaled by the device dpi
|
|
316
|
+
* (`pagePt * dpi / 72`, see {@link deviceScreens | `deviceScreens`}), and the
|
|
317
|
+
* centers are in those pixels.
|
|
318
|
+
*
|
|
319
|
+
* The view always has the device's aspect ratio — you control its height and
|
|
320
|
+
* position, not its shape. `customZoomScale` sets a fit-to-height zoom whose
|
|
321
|
+
* linear magnification is proportional to it: the visible page-height
|
|
322
|
+
* fraction is `sqrt(deviceAspect) / customZoomScale`, where `deviceAspect` is
|
|
323
|
+
* `screenWidth / screenHeight` (`0.75` for 3:4 models, `0.5625` for the Paper
|
|
324
|
+
* Pro Move). The page height fills the screen at
|
|
325
|
+
* `customZoomScale = sqrt(deviceAspect)` (≈`0.87` for 3:4 devices), not at
|
|
326
|
+
* `1`. `customZoomCenterX` offsets the center of the
|
|
327
|
+
* view horizontally from the page center, and `customZoomCenterY` is the
|
|
328
|
+
* absolute distance of the center down from the top of the page; the view's
|
|
329
|
+
* width follows from its height and the device aspect ratio.
|
|
330
|
+
*
|
|
331
|
+
* The fields are a single document-wide setting, but `customZoomCenterY` is
|
|
332
|
+
* applied against each page's own rendered height. On a page rendered taller
|
|
333
|
+
* than `customZoomPageHeight` that distance is a smaller fraction of the page,
|
|
334
|
+
* so the view sits higher and cuts off the bottom; on a shorter page it sits
|
|
335
|
+
* lower and cuts off the top. `customZoomScale` (a ratio) and
|
|
336
|
+
* `customZoomCenterX` (an offset from center) do not shift with page size.
|
|
337
|
+
*
|
|
299
338
|
* @param visibleName - the name to display on the reMarkable
|
|
300
339
|
* @param buffer - the raw pdf
|
|
301
340
|
* @param opts - put options
|
package/dist/index.js
CHANGED
|
@@ -57,6 +57,7 @@ import { z } from "zod";
|
|
|
57
57
|
import { HashNotFoundError, ValidationError } from "./error.js";
|
|
58
58
|
import { LruCache } from "./lru.js";
|
|
59
59
|
import { RawRemarkable, } from "./raw.js";
|
|
60
|
+
export { deviceScreens, } from "./devices.js";
|
|
60
61
|
export { HashNotFoundError, ValidationError } from "./error.js";
|
|
61
62
|
const AUTH_HOST = "https://webapp-prod.cloud.remarkable.engineering";
|
|
62
63
|
const RAW_HOST = "https://eu.tectonic.remarkable.com";
|
|
@@ -292,7 +293,7 @@ class Remarkable {
|
|
|
292
293
|
}
|
|
293
294
|
return zip.generateAsync({ type: "uint8array" });
|
|
294
295
|
}
|
|
295
|
-
async #putFile(visibleName, fileType, buffer, { refresh, parent = "", pinned = false, zoomMode = "bestFit", viewBackgroundFilter, textScale = 1, textAlignment = "justify", fontName = "", coverPageNumber = -1, authors, title, publicationDate, publisher, extraMetadata = {}, lineHeight = -1, margins = 125, orientation = "portrait", tags, }) {
|
|
296
|
+
async #putFile(visibleName, fileType, buffer, { refresh, parent = "", pinned = false, zoomMode = "bestFit", viewBackgroundFilter, textScale = 1, textAlignment = "justify", fontName = "", coverPageNumber = -1, authors, title, publicationDate, publisher, extraMetadata = {}, lineHeight = -1, margins = 125, orientation = "portrait", tags, customZoomScale, customZoomCenterX, customZoomCenterY, customZoomPageWidth, customZoomPageHeight, customZoomOrientation, }) {
|
|
296
297
|
if (parent && !idReg.test(parent)) {
|
|
297
298
|
throw new ValidationError(parent, idReg, "parent must be a valid document id");
|
|
298
299
|
}
|
|
@@ -322,6 +323,12 @@ class Remarkable {
|
|
|
322
323
|
textAlignment,
|
|
323
324
|
textScale,
|
|
324
325
|
zoomMode,
|
|
326
|
+
customZoomScale,
|
|
327
|
+
customZoomCenterX,
|
|
328
|
+
customZoomCenterY,
|
|
329
|
+
customZoomPageWidth,
|
|
330
|
+
customZoomPageHeight,
|
|
331
|
+
customZoomOrientation,
|
|
325
332
|
viewBackgroundFilter,
|
|
326
333
|
// NOTE for some reason we need to "fake" the number of pages at 1, and
|
|
327
334
|
// create "valid" output for that
|
package/dist/raw.d.ts
CHANGED
|
@@ -226,38 +226,46 @@ export interface CommonDocumentContent {
|
|
|
226
226
|
*/
|
|
227
227
|
textScale: number;
|
|
228
228
|
/**
|
|
229
|
-
* the center of
|
|
229
|
+
* the horizontal center of a customFit zoom
|
|
230
230
|
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
231
|
+
* An offset in device pixels from the horizontal center of the page (0 =
|
|
232
|
+
* centered, negative = left, positive = right). This and
|
|
233
|
+
* {@link customZoomCenterY} are in the page's own frame, so device
|
|
234
|
+
* orientation does not affect them.
|
|
235
235
|
*/
|
|
236
236
|
customZoomCenterX?: number;
|
|
237
237
|
/**
|
|
238
|
-
* the center of
|
|
238
|
+
* the vertical center of a customFit zoom
|
|
239
239
|
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
* The units are relative to the document pixels, but it's not sure how the
|
|
243
|
-
* document size is calculated.
|
|
240
|
+
* An absolute distance in device pixels from the top of the page (negative =
|
|
241
|
+
* up, positive = down); centering is half the page's rendered height.
|
|
244
242
|
*/
|
|
245
243
|
customZoomCenterY?: number;
|
|
246
|
-
/**
|
|
244
|
+
/** the orientation the customFit zoom was set in */
|
|
247
245
|
customZoomOrientation?: Orientation;
|
|
248
|
-
/**
|
|
246
|
+
/**
|
|
247
|
+
* the rendered height of the pdf page, in device pixels
|
|
248
|
+
*
|
|
249
|
+
* Computed from the pdf page height in points and the device dpi as
|
|
250
|
+
* `heightPt * dpi / 72`; the dpi depends on the model (see
|
|
251
|
+
* {@link deviceScreens | `deviceScreens`}).
|
|
252
|
+
*/
|
|
249
253
|
customZoomPageHeight?: number;
|
|
250
|
-
/**
|
|
254
|
+
/** the rendered width of the pdf page, in device pixels */
|
|
251
255
|
customZoomPageWidth?: number;
|
|
252
256
|
/**
|
|
253
|
-
* the scale for customFit
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
257
|
+
* the scale for a customFit zoom
|
|
258
|
+
*
|
|
259
|
+
* The linear magnification is proportional to customZoomScale: the visible
|
|
260
|
+
* page-height fraction is `sqrt(deviceAspect) / customZoomScale`, where
|
|
261
|
+
* `deviceAspect` is `screenWidth / screenHeight` (0.75 for 3:4 models, 0.5625
|
|
262
|
+
* for the Paper Pro Move). The rendered page height fills the screen at
|
|
263
|
+
* `customZoomScale = sqrt(deviceAspect)` (≈0.87 for 3:4 devices), not at 1.
|
|
264
|
+
* reMarkable generally allows 0.5 to 5, but values outside that bound are
|
|
265
|
+
* still supported.
|
|
258
266
|
*/
|
|
259
267
|
customZoomScale?: number;
|
|
260
|
-
/**
|
|
268
|
+
/** the zoom mode; customFit applies the customZoom* fields, the rest auto-fit */
|
|
261
269
|
zoomMode?: ZoomMode;
|
|
262
270
|
/** [speculative] a transform matrix, a. la. css matrix transform */
|
|
263
271
|
transform?: Partial<Record<`m${"1" | "2" | "3"}${"1" | "2" | "3"}`, number>>;
|