@fkn/lib/fs
Classes
Section titled “Classes”StorageAccountChangedError
Section titled “StorageAccountChangedError”The signed-in account is not the one this call belongs to, so the call was refused and nothing was
read, written or removed. Test err.code === STORAGE_ACCOUNT_CHANGED, or isAccountChanged(err).
Every storage call (list, read, write, remove) carries a pin of the account this page was on when the call was made, captured synchronously in the call itself. So a call made before this page learned of an account switch never lands in the new account: FKN refuses it, or the library refuses it before sending. The library never retries it under the new account by itself.
What stays the app’s to check is work it started before the notification and resumes after it (an
await between reading state and writing it back). Keep a counter that an account.onChange handler
bumps and compare it synchronously right before the storage call: the pin is captured in that same
synchronous step, so the check and the call are atomic.
The notification also fires when the connection is renewed without a switch, so this can be thrown for a call that would have landed in the same account. Either way the answer is the same: re-read what the app is acting on, then call again.
Extends
Section titled “Extends”Error
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new StorageAccountChangedError(message?): StorageAccountChangedError;Parameters
Section titled “Parameters”message?
Section titled “message?”string = 'storage: the signed-in account changed, so this call was not made'
Returns
Section titled “Returns”Overrides
Section titled “Overrides”Error.constructorProperties
Section titled “Properties”code: string = STORAGE_ACCOUNT_CHANGED;StorageAccountPinUnsupportedError
Section titled “StorageAccountPinUnsupportedError”The FKN broker this page reached is older than the account pin, so no storage call was sent: an unpinned call could land in an account the app did not mean. It goes away once fkn.app updates.
Extends
Section titled “Extends”Error
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new StorageAccountPinUnsupportedError(message?): StorageAccountPinUnsupportedError;Parameters
Section titled “Parameters”message?
Section titled “message?”string = 'storage: the FKN broker cannot pin calls to an account yet, so nothing was sent'
Returns
Section titled “Returns”StorageAccountPinUnsupportedError
Overrides
Section titled “Overrides”Error.constructorProperties
Section titled “Properties”code: string = STORAGE_ACCOUNT_PIN_UNSUPPORTED;Type Aliases
Section titled “Type Aliases”AdoptSummary
Section titled “AdoptSummary”type AdoptSummary = object;Properties
Section titled “Properties”deleted
Section titled “deleted”deleted: string[];failed
Section titled “failed”failed: object[];error: string;path: string;kept: string[];resolved
Section titled “resolved”resolved: object[];choice
Section titled “choice”choice: "local" | "cloud" | "merged";path: string;unresolved
Section titled “unresolved”unresolved: string[];uploaded
Section titled “uploaded”uploaded: string[];ConflictResolution
Section titled “ConflictResolution”type ConflictResolution = WriteData | null;What should be at that path. Return one side’s bytes, or anything else as a merge; null leaves the file alone and the summary reports it unresolved.
Whatever comes back is what wins. Returning the very Blob that readLocal() or readCloud()
handed you is recognised by identity, so picking a side costs one write rather than two. An answer
that crossed a realm (osra) arrives as a different object, so it reads as a merge: one redundant
write, never a wrong file.
ConflictResolver
Section titled “ConflictResolver”type ConflictResolver = (conflict) => | Promise<ConflictResolution> | ConflictResolution;Parameters
Section titled “Parameters”conflict
Section titled “conflict”Returns
Section titled “Returns”| Promise<ConflictResolution>
| ConflictResolution
ConflictSide
Section titled “ConflictSide”type ConflictSide = object;Properties
Section titled “Properties”size: number;updatedAt
Section titled “updatedAt”updatedAt: string | null;FileConflict
Section titled “FileConflict”type FileConflict = object;Properties
Section titled “Properties”cloud: ConflictSide;local: ConflictSide;path: string;readCloud
Section titled “readCloud”readCloud: () => Promise<Blob>;Returns
Section titled “Returns”Promise<Blob>
readLocal
Section titled “readLocal”readLocal: () => Promise<Blob>;Returns
Section titled “Returns”Promise<Blob>
SealedRead
Section titled “SealedRead”type SealedRead = object;The bytes of a cloud object and the seal time they carry, as an ISO string or null.
Properties
Section titled “Properties”data: Uint8Array;sealedAt
Section titled “sealedAt”sealedAt: string | null;type Stats = object;Properties
Section titled “Properties”atimeMs
Section titled “atimeMs”atimeMs: number;ctimeMs
Section titled “ctimeMs”ctimeMs: number;isDirectory
Section titled “isDirectory”isDirectory: () => boolean;Returns
Section titled “Returns”boolean
isFile
Section titled “isFile”isFile: () => boolean;Returns
Section titled “Returns”boolean
isSymbolicLink
Section titled “isSymbolicLink”isSymbolicLink: () => boolean;Returns
Section titled “Returns”boolean
mode: number;mtime: Date;mtimeMs
Section titled “mtimeMs”mtimeMs: number;size: number;Variables
Section titled “Variables”const adopt: () => Promise<AdoptSummary> = hybrid.adopt;Pushes the local files the account lacks, after what replication owes. It acts for the account
this page is on when it is called: an entry queued for another account is skipped and stays queued
for it, and a switch while it runs refuses the rest with StorageAccountChangedError.
Returns
Section titled “Returns”adoptable
Section titled “adoptable”const adoptable: () => Promise<{ bytes: number; paths: string[];}> = hybrid.adoptable;Returns
Section titled “Returns”Promise<{
bytes: number;
paths: string[];
}>
appendFile
Section titled “appendFile”appendFile: (path, data, a, b?) => void;Parameters
Section titled “Parameters”PathLike
WriteOptions | Callback<void>
Callback<void>
Returns
Section titled “Returns”void
appendFileSync
Section titled “appendFileSync”appendFileSync: (path, data, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”WriteOptions
Returns
Section titled “Returns”void
available
Section titled “available”available: () => Promise<boolean>;Returns
Section titled “Returns”Promise<boolean>
default
Section titled “default”default: object;Type Declaration
Section titled “Type Declaration”adopt: () => Promise<AdoptSummary>;Pushes the local files the account lacks, after what replication owes. It acts for the account
this page is on when it is called: an entry queued for another account is skipped and stays queued
for it, and a switch while it runs refuses the rest with StorageAccountChangedError.
Returns
Section titled “Returns”adoptable
Section titled “adoptable”adoptable: () => Promise<{ bytes: number; paths: string[];}>;Returns
Section titled “Returns”Promise<{
bytes: number;
paths: string[];
}>
appendFile
Section titled “appendFile”appendFile: (path, data, a, b?) => void;Parameters
Section titled “Parameters”PathLike
WriteOptions | Callback<void>
Callback<void>
Returns
Section titled “Returns”void
appendFileSync
Section titled “appendFileSync”appendFileSync: (path, data, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”WriteOptions
Returns
Section titled “Returns”void
available
Section titled “available”available: () => Promise<boolean> = backing.available;Returns
Section titled “Returns”Promise<boolean>
exists
Section titled “exists”exists: (path, callback) => void;Parameters
Section titled “Parameters”PathLike
callback
Section titled “callback”(exists) => void
Returns
Section titled “Returns”void
existsSync
Section titled “existsSync”existsSync: (path) => boolean;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”boolean
flush: () => Promise<void> = store.flush;Returns
Section titled “Returns”Promise<void>
lstatSync
Section titled “lstatSync”lstatSync: (path) => Stats = statSync;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”mkdir: (path, a, b?) => void;Parameters
Section titled “Parameters”PathLike
MakeOptions | Callback<void>
Callback<void>
Returns
Section titled “Returns”void
mkdirSync
Section titled “mkdirSync”mkdirSync: (path, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”MakeOptions
Returns
Section titled “Returns”void
mount: () => Promise<void> = store.mount;Returns
Section titled “Returns”Promise<void>
onConflict
Section titled “onConflict”onConflict: (next) => () => void;Parameters
Section titled “Parameters”Returns
Section titled “Returns”() => void
pending
Section titled “pending”pending: () => string[];Returns
Section titled “Returns”string[]
pendingDeletes
Section titled “pendingDeletes”pendingDeletes: () => string[];Returns
Section titled “Returns”string[]
promises
Section titled “promises”promises: object;promises.access
Section titled “promises.access”access: (path) => Promise<void>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”Promise<void>
promises.appendFile
Section titled “promises.appendFile”appendFile: (path, data, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”WriteOptions
Returns
Section titled “Returns”Promise<void>
promises.lstat
Section titled “promises.lstat”lstat: (path) => Promise<Stats>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”promises.mkdir
Section titled “promises.mkdir”mkdir: (path, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”MakeOptions
Returns
Section titled “Returns”Promise<void>
promises.readdir
Section titled “promises.readdir”readdir: (path) => Promise<string[]>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”Promise<string[]>
promises.readFile
Section titled “promises.readFile”readFile: (path, options?) => Promise<string | Buffer<ArrayBufferLike>>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”ReadOptions
Returns
Section titled “Returns”Promise<string | Buffer<ArrayBufferLike>>
promises.rename
Section titled “promises.rename”rename: (from, to) => Promise<void>;Parameters
Section titled “Parameters”PathLike
PathLike
Returns
Section titled “Returns”Promise<void>
promises.rm
Section titled “promises.rm”rm: (path, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”force?
Section titled “force?”boolean
recursive?
Section titled “recursive?”boolean
Returns
Section titled “Returns”Promise<void>
promises.rmdir
Section titled “promises.rmdir”rmdir: (path, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”recursive?
Section titled “recursive?”boolean
Returns
Section titled “Returns”Promise<void>
promises.stat
Section titled “promises.stat”stat: (path) => Promise<Stats>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”promises.unlink
Section titled “promises.unlink”unlink: (path) => Promise<void>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”Promise<void>
promises.writeFile
Section titled “promises.writeFile”writeFile: (path, data, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”WriteOptions
Returns
Section titled “Returns”Promise<void>
pull: (path) => Promise<Blob>;Parameters
Section titled “Parameters”string
Returns
Section titled “Returns”Promise<Blob>
readdir
Section titled “readdir”readdir: (path, a, b?) => void;Parameters
Section titled “Parameters”PathLike
unknown
Callback<string[]>
Returns
Section titled “Returns”void
readdirSync
Section titled “readdirSync”readdirSync: (path) => string[];Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”string[]
readFile
Section titled “readFile”readFile: (path, a, b?) => void;Parameters
Section titled “Parameters”PathLike
ReadOptions | Callback<string | Buffer<ArrayBufferLike>>
Callback<string | Buffer<ArrayBufferLike>>
Returns
Section titled “Returns”void
readFileSealed
Section titled “readFileSealed”readFileSealed: (path, opts?) => Promise<SealedRead>;Parameters
Section titled “Parameters”string
PinOptions
Returns
Section titled “Returns”readFileSync
Section titled “readFileSync”readFileSync: (path, options?) => string | Buffer<ArrayBufferLike>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”ReadOptions
Returns
Section titled “Returns”string | Buffer<ArrayBufferLike>
remount
Section titled “remount”remount: () => Promise<void> = store.remount;Returns
Section titled “Returns”Promise<void>
rename
Section titled “rename”rename: (from, to, callback) => void;Parameters
Section titled “Parameters”PathLike
PathLike
callback
Section titled “callback”Callback<void>
Returns
Section titled “Returns”void
renameSync
Section titled “renameSync”renameSync: (from, to) => void;Parameters
Section titled “Parameters”PathLike
PathLike
Returns
Section titled “Returns”void
replicating
Section titled “replicating”replicating: () => boolean;Returns
Section titled “Returns”boolean
rm: (path, a, b?) => void;Parameters
Section titled “Parameters”PathLike
| Callback<void>
| {
force?: boolean;
recursive?: boolean;
}
Callback<void>
Returns
Section titled “Returns”void
rmdirSync
Section titled “rmdirSync”rmdirSync: (path, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”recursive?
Section titled “recursive?”boolean
Returns
Section titled “Returns”void
rmSync
Section titled “rmSync”rmSync: (path, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”force?
Section titled “force?”boolean
recursive?
Section titled “recursive?”boolean
Returns
Section titled “Returns”void
stat: (path, callback) => void;Parameters
Section titled “Parameters”PathLike
callback
Section titled “callback”Callback<Stats>
Returns
Section titled “Returns”void
statSync
Section titled “statSync”statSync: (path) => Stats;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”unlink
Section titled “unlink”unlink: (path, callback) => void;Parameters
Section titled “Parameters”PathLike
callback
Section titled “callback”Callback<void>
Returns
Section titled “Returns”void
unlinkSync
Section titled “unlinkSync”unlinkSync: (path) => void;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”void
writeFile
Section titled “writeFile”writeFile: (path, data, a, b?) => void;Parameters
Section titled “Parameters”PathLike
WriteOptions | Callback<void>
Callback<void>
Returns
Section titled “Returns”void
writeFileSync
Section titled “writeFileSync”writeFileSync: (path, data, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”WriteOptions
Returns
Section titled “Returns”void
exists
Section titled “exists”exists: (path, callback) => void;Parameters
Section titled “Parameters”PathLike
callback
Section titled “callback”(exists) => void
Returns
Section titled “Returns”void
existsSync
Section titled “existsSync”existsSync: (path) => boolean;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”boolean
flush: () => Promise<void>;Returns
Section titled “Returns”Promise<void>
lstatSync
Section titled “lstatSync”lstatSync: (path) => Stats;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”mkdir: (path, a, b?) => void;Parameters
Section titled “Parameters”PathLike
MakeOptions | Callback<void>
Callback<void>
Returns
Section titled “Returns”void
mkdirSync
Section titled “mkdirSync”mkdirSync: (path, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”MakeOptions
Returns
Section titled “Returns”void
mount: () => Promise<void>;Returns
Section titled “Returns”Promise<void>
onConflict
Section titled “onConflict”const onConflict: (next) => () => void = hybrid.onConflict;Parameters
Section titled “Parameters”Returns
Section titled “Returns”() => void
pending
Section titled “pending”const pending: () => string[] = hybrid.pending;Returns
Section titled “Returns”string[]
pendingDeletes
Section titled “pendingDeletes”const pendingDeletes: () => string[] = hybrid.pendingDeletes;Returns
Section titled “Returns”string[]
promises
Section titled “promises”promises: object;Type Declaration
Section titled “Type Declaration”access
Section titled “access”access: (path) => Promise<void>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”Promise<void>
appendFile
Section titled “appendFile”appendFile: (path, data, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”WriteOptions
Returns
Section titled “Returns”Promise<void>
lstat: (path) => Promise<Stats>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”mkdir: (path, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”MakeOptions
Returns
Section titled “Returns”Promise<void>
readdir
Section titled “readdir”readdir: (path) => Promise<string[]>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”Promise<string[]>
readFile
Section titled “readFile”readFile: (path, options?) => Promise<string | Buffer<ArrayBufferLike>>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”ReadOptions
Returns
Section titled “Returns”Promise<string | Buffer<ArrayBufferLike>>
rename
Section titled “rename”rename: (from, to) => Promise<void>;Parameters
Section titled “Parameters”PathLike
PathLike
Returns
Section titled “Returns”Promise<void>
rm: (path, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”force?
Section titled “force?”boolean
recursive?
Section titled “recursive?”boolean
Returns
Section titled “Returns”Promise<void>
rmdir: (path, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”recursive?
Section titled “recursive?”boolean
Returns
Section titled “Returns”Promise<void>
stat: (path) => Promise<Stats>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”unlink
Section titled “unlink”unlink: (path) => Promise<void>;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”Promise<void>
writeFile
Section titled “writeFile”writeFile: (path, data, options?) => Promise<void>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”WriteOptions
Returns
Section titled “Returns”Promise<void>
const pull: (path) => Promise<Blob> = hybrid.pull;Parameters
Section titled “Parameters”string
Returns
Section titled “Returns”Promise<Blob>
readdir
Section titled “readdir”readdir: (path, a, b?) => void;Parameters
Section titled “Parameters”PathLike
unknown
Callback<string[]>
Returns
Section titled “Returns”void
readdirSync
Section titled “readdirSync”readdirSync: (path) => string[];Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”string[]
readFile
Section titled “readFile”readFile: (path, a, b?) => void;Parameters
Section titled “Parameters”PathLike
ReadOptions | Callback<string | Buffer<ArrayBufferLike>>
Callback<string | Buffer<ArrayBufferLike>>
Returns
Section titled “Returns”void
readFileSealed
Section titled “readFileSealed”const readFileSealed: (path, opts?) => Promise<SealedRead> = hybrid.readFileSealed;Parameters
Section titled “Parameters”string
PinOptions
Returns
Section titled “Returns”readFileSync
Section titled “readFileSync”readFileSync: (path, options?) => string | Buffer<ArrayBufferLike>;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”ReadOptions
Returns
Section titled “Returns”string | Buffer<ArrayBufferLike>
remount
Section titled “remount”remount: () => Promise<void>;Returns
Section titled “Returns”Promise<void>
rename
Section titled “rename”rename: (from, to, callback) => void;Parameters
Section titled “Parameters”PathLike
PathLike
callback
Section titled “callback”Callback<void>
Returns
Section titled “Returns”void
renameSync
Section titled “renameSync”renameSync: (from, to) => void;Parameters
Section titled “Parameters”PathLike
PathLike
Returns
Section titled “Returns”void
replicating
Section titled “replicating”const replicating: () => boolean = hybrid.replicating;Returns
Section titled “Returns”boolean
rm: (path, a, b?) => void;Parameters
Section titled “Parameters”PathLike
| Callback<void>
| {
force?: boolean;
recursive?: boolean;
}
Callback<void>
Returns
Section titled “Returns”void
rmdirSync
Section titled “rmdirSync”rmdirSync: (path, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”recursive?
Section titled “recursive?”boolean
Returns
Section titled “Returns”void
rmSync
Section titled “rmSync”rmSync: (path, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”force?
Section titled “force?”boolean
recursive?
Section titled “recursive?”boolean
Returns
Section titled “Returns”void
stat: (path, callback) => void;Parameters
Section titled “Parameters”PathLike
callback
Section titled “callback”Callback<Stats>
Returns
Section titled “Returns”void
statSync
Section titled “statSync”statSync: (path) => Stats;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”unlink
Section titled “unlink”unlink: (path, callback) => void;Parameters
Section titled “Parameters”PathLike
callback
Section titled “callback”Callback<void>
Returns
Section titled “Returns”void
unlinkSync
Section titled “unlinkSync”unlinkSync: (path) => void;Parameters
Section titled “Parameters”PathLike
Returns
Section titled “Returns”void
writeFile
Section titled “writeFile”writeFile: (path, data, a, b?) => void;Parameters
Section titled “Parameters”PathLike
WriteOptions | Callback<void>
Callback<void>
Returns
Section titled “Returns”void
writeFileSync
Section titled “writeFileSync”writeFileSync: (path, data, options?) => void;Parameters
Section titled “Parameters”PathLike
options?
Section titled “options?”WriteOptions
Returns
Section titled “Returns”void
Functions
Section titled “Functions”isAccountChanged()
Section titled “isAccountChanged()”function isAccountChanged(error): boolean;Whether an error from this module means the account changed under the call, which was not made.
Parameters
Section titled “Parameters”unknown
Returns
Section titled “Returns”boolean
References
Section titled “References”STORAGE_ACCOUNT_CHANGED
Section titled “STORAGE_ACCOUNT_CHANGED”Re-exports STORAGE_ACCOUNT_CHANGED
STORAGE_ACCOUNT_PIN_UNSUPPORTED
Section titled “STORAGE_ACCOUNT_PIN_UNSUPPORTED”Re-exports STORAGE_ACCOUNT_PIN_UNSUPPORTED