@book.dev/sdk 3.10.0 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backup.d.ts +106 -10
- package/dist/backup.js +7 -6
- package/dist/backup.js.map +1 -1
- package/dist/blockCatalogue.d.ts +24 -0
- package/dist/blockCatalogue.js +2 -0
- package/dist/blockCatalogue.js.map +1 -1
- package/dist/client.d.ts +48 -23
- package/dist/client.js +227 -13
- package/dist/client.js.map +1 -1
- package/dist/database.d.ts +152 -7
- package/dist/database.js +479 -5
- package/dist/database.js.map +1 -1
- package/dist/formSchema.d.ts +131 -0
- package/dist/formSchema.js +493 -0
- package/dist/formSchema.js.map +1 -0
- package/dist/forms.d.ts +117 -0
- package/dist/forms.js +65 -0
- package/dist/forms.js.map +1 -0
- package/dist/forwarding/forwardingClient.d.ts +9 -1
- package/dist/forwarding/forwardingClient.js +34 -23
- package/dist/forwarding/forwardingClient.js.map +1 -1
- package/dist/forwarding/tunnelClient.d.ts +7 -1
- package/dist/forwarding/tunnelClient.js +41 -16
- package/dist/forwarding/tunnelClient.js.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/pageProperties.d.ts +7 -0
- package/dist/pageProperties.js +2 -0
- package/dist/pageProperties.js.map +1 -1
- package/dist/routes.d.ts +12 -0
- package/dist/routes.js +12 -0
- package/dist/routes.js.map +1 -1
- package/dist/types.d.ts +19 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
package/dist/forms.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Public form-upload limits, shared by the browser runtime and server. */
|
|
2
|
+
export const FORM_UPLOAD_MAX_FILE_BYTES = 5 * 1024 * 1024;
|
|
3
|
+
export const FORM_UPLOAD_MAX_FILES = 5;
|
|
4
|
+
export const FORM_UPLOAD_MAX_FORM_STAGED_BYTES = 10 * 1024 * 1024;
|
|
5
|
+
export const FORM_UPLOAD_MAX_FORM_BYTES = 50 * 1024 * 1024;
|
|
6
|
+
export const FORM_UPLOAD_ORPHAN_TTL_MS = 30 * 60 * 1000;
|
|
7
|
+
/** Typed non-success response from the public staged-upload endpoint. */
|
|
8
|
+
export class FormUploadError extends Error {
|
|
9
|
+
constructor(status) {
|
|
10
|
+
super(`Form upload failed (${status})`);
|
|
11
|
+
this.status = status;
|
|
12
|
+
this.name = 'FormUploadError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Typed public database-form failure, including stable server validation codes. */
|
|
16
|
+
export class DatabaseFormRequestError extends Error {
|
|
17
|
+
constructor(status, code, errors = []) {
|
|
18
|
+
super(`Database form request failed (${status})${code ? `: ${code}` : ''}`);
|
|
19
|
+
this.status = status;
|
|
20
|
+
this.code = code;
|
|
21
|
+
this.errors = errors;
|
|
22
|
+
this.name = 'DatabaseFormRequestError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Typed non-success response from the public form-submission endpoint. */
|
|
26
|
+
export class FormSubmissionError extends Error {
|
|
27
|
+
constructor(status, errors = []) {
|
|
28
|
+
super(`Form submission failed (${status})`);
|
|
29
|
+
this.status = status;
|
|
30
|
+
this.errors = errors;
|
|
31
|
+
this.name = 'FormSubmissionError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Mint a 256-bit, unpadded base64url form-submission capability.
|
|
36
|
+
*
|
|
37
|
+
* `crypto.getRandomValues` keeps this helper isomorphic across browsers and
|
|
38
|
+
* current Node runtimes. The 32-byte key deliberately exceeds the contract's
|
|
39
|
+
* 128-bit minimum.
|
|
40
|
+
*/
|
|
41
|
+
export function generateSubmissionKey() {
|
|
42
|
+
const bytes = globalThis.crypto.getRandomValues(new Uint8Array(32));
|
|
43
|
+
let binary = '';
|
|
44
|
+
for (const byte of bytes)
|
|
45
|
+
binary += String.fromCharCode(byte);
|
|
46
|
+
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
47
|
+
}
|
|
48
|
+
/** Accept only browser-safe HTTP(S) confirmation destinations, including relative URLs. */
|
|
49
|
+
export function safeFormRedirectUrl(raw) {
|
|
50
|
+
const value = raw?.trim();
|
|
51
|
+
if (!value)
|
|
52
|
+
return null;
|
|
53
|
+
try {
|
|
54
|
+
const parsed = new URL(value, 'https://openbook.local');
|
|
55
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:')
|
|
56
|
+
return null;
|
|
57
|
+
if (/^[a-z][a-z\d+.-]*:/i.test(value) || value.startsWith('//'))
|
|
58
|
+
return parsed.href;
|
|
59
|
+
return `${parsed.pathname}${parsed.search}${parsed.hash}`;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../src/forms.ts"],"names":[],"mappings":"AAQA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAuBxD,yEAAyE;AACzE,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAA4B,MAAc;QACxC,KAAK,CAAC,uBAAuB,MAAM,GAAG,CAAC,CAAC;QADd,WAAM,GAAN,MAAM,CAAQ;QAExC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAgDD,oFAAoF;AACpF,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YACkB,MAAc,EACd,IAAa,EACb,SAAoD,EAAE;QAEtE,KAAK,CAAC,iCAAiC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAJ5D,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAS;QACb,WAAM,GAAN,MAAM,CAAgD;QAGtE,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAYD,2EAA2E;AAC3E,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YACkB,MAAc,EACd,SAAgC,EAAE;QAElD,KAAK,CAAC,2BAA2B,MAAM,GAAG,CAAC,CAAC;QAH5B,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAA4B;QAGlD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,mBAAmB,CAAC,GAAuB;IACzD,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7E,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QACpF,OAAO,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -92,6 +92,10 @@ export interface ForwardingClientOptions {
|
|
|
92
92
|
/** The cell to attach in (nearest region). Defaults to the platform home cell. */
|
|
93
93
|
region?: string;
|
|
94
94
|
onStatus?: (status: TunnelStatus) => void;
|
|
95
|
+
onDialError?: (error: unknown) => void;
|
|
96
|
+
/** Reports the canonical host returned by the first successful attach mint,
|
|
97
|
+
* and again only if a later mint reports a different host. */
|
|
98
|
+
onHost?: (host: string) => void;
|
|
95
99
|
/** `fetch` for the account API (account.book.pub). Defaults to the global fetch. */
|
|
96
100
|
fetchImpl?: FetchLike;
|
|
97
101
|
/**
|
|
@@ -102,6 +106,7 @@ export interface ForwardingClientOptions {
|
|
|
102
106
|
*/
|
|
103
107
|
localFetchImpl?: FetchLike;
|
|
104
108
|
webSocketImpl?: typeof WebSocket;
|
|
109
|
+
maxBackoffMs?: number;
|
|
105
110
|
}
|
|
106
111
|
export declare class ForwardingClient {
|
|
107
112
|
private readonly opts;
|
|
@@ -191,7 +196,10 @@ export declare class ForwardingClient {
|
|
|
191
196
|
private mintAttach;
|
|
192
197
|
/** One challenge → sign → attach-ticket pass (see {@link mintAttach} for the retry). */
|
|
193
198
|
private mintAttachOnce;
|
|
194
|
-
/**
|
|
199
|
+
/** Adopt the account's canonical host without ever overwriting another account's keychain slot. */
|
|
200
|
+
private adoptCanonicalHost;
|
|
201
|
+
/** Begin forwarding the local instance. Ticket minting happens inside the
|
|
202
|
+
* reconnecting tunnel, so a failed first mint cannot abort this start call. */
|
|
195
203
|
start(): Promise<{
|
|
196
204
|
host: string;
|
|
197
205
|
}>;
|
|
@@ -305,38 +305,49 @@ export class ForwardingClient {
|
|
|
305
305
|
host: res.host, // canonical host for this prefix; heals a stale book.pub→book.cloud
|
|
306
306
|
};
|
|
307
307
|
}
|
|
308
|
-
/**
|
|
308
|
+
/** Adopt the account's canonical host without ever overwriting another account's keychain slot. */
|
|
309
|
+
async adoptCanonicalHost(stored, host) {
|
|
310
|
+
const active = this.identity ?? stored;
|
|
311
|
+
if (!host || active.siteId !== stored.siteId || host === active.host)
|
|
312
|
+
return;
|
|
313
|
+
const healed = { ...active, host };
|
|
314
|
+
// An account switch can re-point the per-account slot while a dial is in
|
|
315
|
+
// flight. The in-memory client can still heal, but must not write its private
|
|
316
|
+
// key into a slot that is now empty or belongs to another site.
|
|
317
|
+
const current = await this.opts.keyStore.load();
|
|
318
|
+
if (current?.siteId === stored.siteId)
|
|
319
|
+
await this.opts.keyStore.save(healed);
|
|
320
|
+
this.identity = healed;
|
|
321
|
+
}
|
|
322
|
+
/** Begin forwarding the local instance. Ticket minting happens inside the
|
|
323
|
+
* reconnecting tunnel, so a failed first mint cannot abort this start call. */
|
|
309
324
|
async start() {
|
|
310
|
-
const
|
|
311
|
-
|
|
312
|
-
// book.pub→book.cloud root migration, a persisted identity can carry a stale
|
|
313
|
-
// host while the edge now mints aud=<prefix>.book.cloud — the origin would then
|
|
314
|
-
// reject every forwarded request as `wrong-audience`. The account returns the
|
|
315
|
-
// fresh host on attach; adopt + persist it so the recorded aud heals itself.
|
|
316
|
-
const { host } = await this.mintAttach(stored);
|
|
317
|
-
const id = host && host !== stored.host ? { ...stored, host } : stored;
|
|
318
|
-
if (id !== stored) {
|
|
319
|
-
// Persist the heal ONLY if the slot still holds the identity we healed:
|
|
320
|
-
// an account switch between ensureSite and here re-points the (per-
|
|
321
|
-
// account) keystore slot, and writing `id` — private key included —
|
|
322
|
-
// would overwrite the other account's identity, or resurrect one into
|
|
323
|
-
// an empty slot. The heal is an optimization, so skipping the persist
|
|
324
|
-
// is always safe; the in-memory identity still carries the fresh host
|
|
325
|
-
// for this session's tunnel.
|
|
326
|
-
const current = await this.opts.keyStore.load();
|
|
327
|
-
if (current?.siteId === stored.siteId)
|
|
328
|
-
await this.opts.keyStore.save(id);
|
|
329
|
-
this.identity = id;
|
|
330
|
-
}
|
|
325
|
+
const id = await this.ensureSite();
|
|
326
|
+
let reportedHost;
|
|
331
327
|
this.tunnel = new TunnelClient({
|
|
332
|
-
ticketProvider: () =>
|
|
328
|
+
ticketProvider: async () => {
|
|
329
|
+
const info = await this.mintAttach(id); // fresh ticket per (re)connect
|
|
330
|
+
if (info.host && info.host !== reportedHost) {
|
|
331
|
+
try {
|
|
332
|
+
await this.adoptCanonicalHost(id, info.host);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
this.identity = { ...(this.identity ?? id), host: info.host };
|
|
336
|
+
}
|
|
337
|
+
reportedHost = info.host;
|
|
338
|
+
this.opts.onHost?.(info.host);
|
|
339
|
+
}
|
|
340
|
+
return info;
|
|
341
|
+
},
|
|
333
342
|
privateKey: id.privateKey,
|
|
334
343
|
localOrigin: this.opts.localOrigin,
|
|
335
344
|
onStatus: this.opts.onStatus,
|
|
345
|
+
onDialError: this.opts.onDialError,
|
|
336
346
|
// The tunnel forwards to the LOCAL server; the desktop routes that over IPC
|
|
337
347
|
// (no port), separate from the account API's global fetch.
|
|
338
348
|
fetchImpl: this.opts.localFetchImpl ?? this.opts.fetchImpl,
|
|
339
349
|
webSocketImpl: this.opts.webSocketImpl,
|
|
350
|
+
maxBackoffMs: this.opts.maxBackoffMs,
|
|
340
351
|
});
|
|
341
352
|
this.tunnel.start();
|
|
342
353
|
return { host: id.host };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forwardingClient.js","sourceRoot":"","sources":["../../src/forwarding/forwardingClient.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mFAAmF;AACnF,+EAA+E;AAC/E,EAAE;AACF,QAAQ;AACR,oFAAoF;AACpF,8EAA8E;AAC9E,2EAA2E;AAC3E,EAAE;AACF,iFAAiF;AACjF,wCAAwC;AAExC,OAAO,EAAC,WAAW,EAAiB,MAAM,WAAW,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,aAAa,CAAC;AACrE,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AA4B/D,gFAAgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC1D,QAAQ;IACR,WAAW;IACX,eAAe;IACf,SAAS;IACT,YAAY;CACb,CAAC;AAUF,MAAM,OAAO,cAAc;IAA3B;QACU,aAAQ,GAAwB,IAAI,CAAC;IAU/C,CAAC;IATC,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,QAAsB;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YACkB,IAAY,EACZ,MAAc;IAC9B;;;sCAGkC;IAClB,MAAe;QAE/B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC;QAR1D,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QAKd,WAAM,GAAN,MAAM,CAAS;QAG/B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAgBD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAI1C,YACkB,IAA2B,EAC3C,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAuB;QAI3C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,aAAa,CAAC;IAC1C,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"forwardingClient.js","sourceRoot":"","sources":["../../src/forwarding/forwardingClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type FetchLike } from '../client';
|
|
2
|
-
export type TunnelStatus = 'connecting' | 'online' | 'reconnecting' | 'offline';
|
|
2
|
+
export type TunnelStatus = 'connecting' | 'online' | 'reconnecting' | 'stalled' | 'offline';
|
|
3
3
|
export interface TunnelClientOptions {
|
|
4
4
|
/**
|
|
5
5
|
* Mint a FRESH relay URL + attach ticket for each (re)connection. Tickets are
|
|
@@ -20,6 +20,8 @@ export interface TunnelClientOptions {
|
|
|
20
20
|
* `fetchImpl` resolves paths itself, as the desktop IPC transport does). */
|
|
21
21
|
localOrigin: string;
|
|
22
22
|
onStatus?: (status: TunnelStatus) => void;
|
|
23
|
+
/** Reports every failed mint/open/attach attempt with its original structured error. */
|
|
24
|
+
onDialError?: (error: unknown) => void;
|
|
23
25
|
fetchImpl?: FetchLike;
|
|
24
26
|
webSocketImpl?: typeof WebSocket;
|
|
25
27
|
maxBackoffMs?: number;
|
|
@@ -35,6 +37,9 @@ export declare class TunnelClient {
|
|
|
35
37
|
private readonly WS;
|
|
36
38
|
/** The ticket for the current connection, minted just before the WS opened. */
|
|
37
39
|
private ticket?;
|
|
40
|
+
private consecutiveDialFailures;
|
|
41
|
+
private ready;
|
|
42
|
+
private failureReportedForDial;
|
|
38
43
|
constructor(opts: TunnelClientOptions);
|
|
39
44
|
start(): void;
|
|
40
45
|
stop(): void;
|
|
@@ -45,6 +50,7 @@ export declare class TunnelClient {
|
|
|
45
50
|
* what keeps reconnects working — a reused ticket expires and attach fails. */
|
|
46
51
|
private dial;
|
|
47
52
|
private onClose;
|
|
53
|
+
private reportDialError;
|
|
48
54
|
private scheduleReconnect;
|
|
49
55
|
private sendControl;
|
|
50
56
|
/** Pause while the socket's send buffer is backed up, so streaming a large
|
|
@@ -19,6 +19,9 @@ export class TunnelClient {
|
|
|
19
19
|
this.backoff = 500;
|
|
20
20
|
this.stopped = false;
|
|
21
21
|
this.inflight = new Map();
|
|
22
|
+
this.consecutiveDialFailures = 0;
|
|
23
|
+
this.ready = false;
|
|
24
|
+
this.failureReportedForDial = false;
|
|
22
25
|
this.fetchImpl = opts.fetchImpl ?? globalFetch;
|
|
23
26
|
this.WS = opts.webSocketImpl ?? WebSocket;
|
|
24
27
|
}
|
|
@@ -28,6 +31,7 @@ export class TunnelClient {
|
|
|
28
31
|
}
|
|
29
32
|
stop() {
|
|
30
33
|
this.stopped = true;
|
|
34
|
+
this.consecutiveDialFailures = 0;
|
|
31
35
|
this.setStatus('offline');
|
|
32
36
|
this.ws?.close();
|
|
33
37
|
}
|
|
@@ -41,43 +45,58 @@ export class TunnelClient {
|
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
47
|
connect() {
|
|
44
|
-
|
|
48
|
+
if (this.consecutiveDialFailures < 2)
|
|
49
|
+
this.setStatus(this.backoff > 500 ? 'reconnecting' : 'connecting');
|
|
45
50
|
void this.dial();
|
|
46
51
|
}
|
|
47
52
|
/** Mint a fresh ticket, then open the relay socket with it. Minting per dial is
|
|
48
53
|
* what keeps reconnects working — a reused ticket expires and attach fails. */
|
|
49
54
|
async dial() {
|
|
50
|
-
let info;
|
|
51
55
|
try {
|
|
52
|
-
info = await this.opts.ticketProvider();
|
|
56
|
+
const info = await this.opts.ticketProvider();
|
|
57
|
+
if (this.stopped)
|
|
58
|
+
return;
|
|
59
|
+
this.ticket = info.ticket;
|
|
60
|
+
this.ready = false;
|
|
61
|
+
this.failureReportedForDial = false;
|
|
62
|
+
const ws = new this.WS(info.relayWsUrl);
|
|
63
|
+
ws.binaryType = 'arraybuffer';
|
|
64
|
+
this.ws = ws;
|
|
65
|
+
ws.onmessage = (ev) => void this.onMessage(ev.data);
|
|
66
|
+
ws.onclose = () => this.onClose();
|
|
67
|
+
ws.onerror = () => ws.close();
|
|
53
68
|
}
|
|
54
|
-
catch {
|
|
55
|
-
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (this.stopped)
|
|
71
|
+
return;
|
|
72
|
+
this.reportDialError(error);
|
|
56
73
|
this.scheduleReconnect();
|
|
57
|
-
return;
|
|
58
74
|
}
|
|
59
|
-
if (this.stopped)
|
|
60
|
-
return;
|
|
61
|
-
this.ticket = info.ticket;
|
|
62
|
-
const ws = new this.WS(info.relayWsUrl);
|
|
63
|
-
ws.binaryType = 'arraybuffer';
|
|
64
|
-
this.ws = ws;
|
|
65
|
-
ws.onmessage = (ev) => void this.onMessage(ev.data);
|
|
66
|
-
ws.onclose = () => this.onClose();
|
|
67
|
-
ws.onerror = () => ws.close();
|
|
68
75
|
}
|
|
69
76
|
onClose() {
|
|
70
77
|
for (const f of this.inflight.values())
|
|
71
78
|
f.controller.abort();
|
|
72
79
|
this.inflight.clear();
|
|
80
|
+
if (!this.stopped && !this.ready && !this.failureReportedForDial) {
|
|
81
|
+
this.reportDialError(new Error('relay connection closed before the attach completed'));
|
|
82
|
+
}
|
|
83
|
+
this.ready = false;
|
|
73
84
|
this.scheduleReconnect();
|
|
74
85
|
}
|
|
86
|
+
reportDialError(error) {
|
|
87
|
+
this.failureReportedForDial = true;
|
|
88
|
+
this.consecutiveDialFailures += 1;
|
|
89
|
+
this.opts.onDialError?.(error);
|
|
90
|
+
if (this.consecutiveDialFailures >= 2)
|
|
91
|
+
this.setStatus('stalled');
|
|
92
|
+
}
|
|
75
93
|
scheduleReconnect() {
|
|
76
94
|
if (this.stopped) {
|
|
77
95
|
this.setStatus('offline');
|
|
78
96
|
return;
|
|
79
97
|
}
|
|
80
|
-
this.
|
|
98
|
+
if (this.consecutiveDialFailures < 2)
|
|
99
|
+
this.setStatus('reconnecting');
|
|
81
100
|
const delay = this.backoff;
|
|
82
101
|
this.backoff = Math.min(this.backoff * 2, this.opts.maxBackoffMs ?? 30000);
|
|
83
102
|
setTimeout(() => {
|
|
@@ -100,6 +119,8 @@ export class TunnelClient {
|
|
|
100
119
|
}
|
|
101
120
|
}
|
|
102
121
|
async onMessage(data) {
|
|
122
|
+
if (this.stopped)
|
|
123
|
+
return;
|
|
103
124
|
if (typeof data === 'string') {
|
|
104
125
|
const frame = decodeControl(data);
|
|
105
126
|
if (frame)
|
|
@@ -122,9 +143,13 @@ export class TunnelClient {
|
|
|
122
143
|
}
|
|
123
144
|
case 'ready':
|
|
124
145
|
this.backoff = 500;
|
|
146
|
+
this.consecutiveDialFailures = 0;
|
|
147
|
+
this.ready = true;
|
|
148
|
+
this.failureReportedForDial = false;
|
|
125
149
|
this.setStatus('online');
|
|
126
150
|
break;
|
|
127
151
|
case 'error':
|
|
152
|
+
this.reportDialError(new Error(frame.message));
|
|
128
153
|
this.ws?.close();
|
|
129
154
|
break;
|
|
130
155
|
case 'ping':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnelClient.js","sourceRoot":"","sources":["../../src/forwarding/tunnelClient.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,6EAA6E;AAC7E,iFAAiF;AACjF,+EAA+E;AAC/E,kFAAkF;AAClF,EAAE;AACF,kFAAkF;AAClF,8EAA8E;AAC9E,2CAA2C;AAE3C,OAAO,EAAC,WAAW,EAAiB,MAAM,WAAW,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAC,uBAAuB,EAAC,MAAM,aAAa,CAAC;AACpD,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAoB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnelClient.js","sourceRoot":"","sources":["../../src/forwarding/tunnelClient.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
export type { PageSnapshot, PageMeta, StoredPage, PageVersionMeta, StoredPageVersion, PageInput, ServerInfo, ServerControls, PageVisibility, Visibility, MemberRole, EffectiveRole, MemberStatus, MemberSource, AclLevel, Member, PageAcl, AgentEditsMode, AgentEditsPolicy, PageGraph, PageGraphNode, PageGraphEdge, } from './types';
|
|
1
|
+
export type { PageSnapshot, PageMeta, StoredPage, PageVersionMeta, StoredPageVersion, PageInput, ServerInfo, ServerControls, PageVisibility, PageVisibilitySettings, PageVisibilityUpdate, Visibility, MemberRole, EffectiveRole, MemberStatus, MemberSource, AclLevel, Member, PageAcl, AgentEditsMode, AgentEditsPolicy, PageGraph, PageGraphNode, PageGraphEdge, } from './types';
|
|
2
2
|
export { emptyPageSnapshot, PAGE_VISIBILITIES, AGENT_EDITS_MODES, AGENT_EDITS_POLICIES, resolveAgentEdits } from './types';
|
|
3
3
|
export { API, type ApiError, type CompactResult } from './routes';
|
|
4
|
+
export { FormSubmissionError, FormUploadError, DatabaseFormRequestError, FORM_UPLOAD_MAX_FILE_BYTES, FORM_UPLOAD_MAX_FILES, FORM_UPLOAD_MAX_FORM_STAGED_BYTES, FORM_UPLOAD_MAX_FORM_BYTES, FORM_UPLOAD_ORPHAN_TTL_MS, generateSubmissionKey, safeFormRedirectUrl, type DatabaseFormDescriptorRequest, type DatabaseFormPublication, type DatabaseFormPublishResult, type DatabaseFormReference, type DatabaseFormSubmissionRequest, type DatabaseFormUploadInput, type FormSubmissionRequest, type FormSubmissionResult, type FormUploadInput, type FormUploadRequest, type FormUploadResult, } from './forms';
|
|
4
5
|
export type { DataClient, PageSubscription, FetchLike, LiveSourceLike, HttpDataClientOptions, IdentityCredential, CreateAgentTokenInput, CreatedAgentToken, AgentTokenList } from './client';
|
|
5
6
|
export { HttpDataClient, IdentityRejectedError } from './client';
|
|
6
7
|
export { ForwardingApiError, ForwardingClient, TunnelClient, MemoryKeyStore, SITE_VISIBILITIES, SiteReattachError, type SiteReattachErrorCode, createNamespacedKeyStore, KeychainLockedError, type NamespacedKeyStoreOptions, type RawSecretStore, mintSiteKeypair, signWithSiteKey, verifyWithSiteKey, FORWARDED_HEADER, signRosterAssertion, verifyRosterAssertion, isAcceptedRosterVersion, ROSTER_ASSERTION_VERSION, ROSTER_ASSERTION_V2, ACCEPTED_ROSTER_VERSIONS, ROSTER_ASSERTION_SKEW_MS, type KeyStore, type SiteIdentity, type SiteVisibility, type ForwardingClientOptions, type TunnelStatus, type RosterAssertionVersion, type RosterAssertionPayload, type RosterAssertionV1Payload, type RosterAssertionV2Payload, type SignRosterAssertionInput, type VerifyRosterAssertionInput, type VerifiedRosterAssertion, } from './forwarding';
|
|
7
8
|
export { DATA_PALETTE, DATA_COLOR_TOKENS, DATA_COLOR_SCHEMES, DEFAULT_DATA_COLOR_SCHEME, SERIES_ORDER, DATA_STROKE, STATUS_TOKENS, dataStroke, isDataColorToken, seriesColor, statusColor, hexAlpha, type DataColorToken, type DataColorScheme, type DataColor, type ChipColors, } from './dataColors';
|
|
8
|
-
export type { DatabasePropertyType, NumberFormat, NumberDisplay, StatusGroup, RollupFunction, RollupConfig, RelationCardinality, DatabaseSelectOption, DatabaseProperty, DateRange, LocationValue, PropertyGroup, RowTemplate, DatabaseViewType, ChartAggregate, SummaryType, FilterOperator, FilterConjunction, DatabaseFilter, DatabaseFilterGroup, FilterNode, SortDirection, DatabaseSort, DatabaseView, DatabaseMetric, ColorRule, DatabaseSchema, AutoExpiryConfig, ResolvedAutoExpiry, StoredDatabase, DatabaseInput, DatabaseUpdate, DatabaseRow, RowInput, RowUpdate, RowGroup, ChartDatum, ChartSeries, ChartSegment, ChartGroup, ChartMatrix, DateSpan, GraphNode, GraphEdge, DependencyGraph, InverseUpdate, RowTreeNode, } from './database';
|
|
9
|
-
export { TITLE_PROPERTY_ID, SELECT_COLORS, NO_VALUE_GROUP, STATUS_GROUPS, RELATIVE_DATE_OPS, projectExports, rowValue, matchesFilter, rowMatchesCondition, applyView, viewFilterRoot, isFilterGroup, shortId, resolveAutoExpiry, defaultDatabaseSchema, defaultView, defaultStatusOptions, removeProperty, formatNumber, formatUniqueId, numberProgress, groupRows, groupRowsBy, groupRowsByParent, PARENT_GROUP_ID, NO_PARENT_GROUP, aggregateRows, aggregateMatrix, CHART_TOTAL_SERIES, summarizeColumn, dateStart, dateEnd, parseDay, rowDateSpan, rowLocation, asLocation, dependencyGraph, syncInverseUpdates, relationSides, buildRowTree, flattenRowTree, isImageUrl, firstImageUrl, coverImageUrl, } from './database';
|
|
9
|
+
export type { DatabasePropertyType, FormWritablePropertyType, NumberFormat, NumberDisplay, StatusGroup, RollupFunction, RollupConfig, RelationCardinality, DatabaseSelectOption, DatabaseProperty, DateRange, LocationValue, PropertyGroup, RowTemplate, DatabaseViewType, ChartAggregate, SummaryType, FilterOperator, FilterConjunction, DatabaseFilter, DatabaseFilterGroup, FilterNode, SortDirection, DatabaseSort, DatabaseView, DatabaseFormField, DatabaseFormFieldValidation, DatabaseFormConfirmation, DatabaseFormConfig, DatabaseFormDescriptorField, DatabaseFormDescriptor, FormRowValidationErrorCode, FormRowValidationError, FormRowValidationResult, DatabaseMetric, ColorRule, DatabaseSchema, AutoExpiryConfig, ResolvedAutoExpiry, StoredDatabase, DatabaseInput, DatabaseUpdate, DatabaseRow, RowInput, RowUpdate, RowGroup, ChartDatum, ChartSeries, ChartSegment, ChartGroup, ChartMatrix, DateSpan, GraphNode, GraphEdge, DependencyGraph, InverseUpdate, RowTreeNode, } from './database';
|
|
10
|
+
export { TITLE_PROPERTY_ID, FORM_PROPERTY_TYPE_WRITABILITY, FORM_ROW_VALIDATION_ERROR_CODES, KNOWN_DATABASE_VIEW_TYPES, SELECT_COLORS, NO_VALUE_GROUP, STATUS_GROUPS, RELATIVE_DATE_OPS, projectExports, rowValue, matchesFilter, rowMatchesCondition, applyView, viewFilterRoot, isFilterGroup, shortId, resolveAutoExpiry, isDatabaseViewType, isFormWritablePropertyType, formPatternIsUnsafe, defaultDatabaseSchema, defaultView, defaultStatusOptions, removeProperty, projectDatabaseFormDescriptor, validateRowAgainstForm, formatNumber, formatUniqueId, numberProgress, groupRows, groupRowsBy, groupRowsByParent, PARENT_GROUP_ID, NO_PARENT_GROUP, aggregateRows, aggregateMatrix, CHART_TOTAL_SERIES, summarizeColumn, dateStart, dateEnd, parseDay, rowDateSpan, rowLocation, asLocation, dependencyGraph, syncInverseUpdates, relationSides, buildRowTree, flattenRowTree, isImageUrl, firstImageUrl, coverImageUrl, } from './database';
|
|
10
11
|
export { evaluateFormula, formulaReferences, FormulaError, type FormulaValue, type FormulaResolver, } from './formula';
|
|
11
|
-
export { OWNER_PROPERTY_ID, VERIFICATION_PROPERTY_ID, BACKLINKS_PROPERTY_ID, THEME_PROPERTY_ID, COVER_PROPERTY_ID, FONTS_PROPERTY_ID, ICON_PROPERTY_ID, FULLWIDTH_PROPERTY_ID, SYSTEM_PAGE_PROPERTIES, isVerified, verificationExpired, isVerificationActive, makeVerification, extractMentionIds, propertiesReferencePage, extractPropertyReferenceIds, type VerificationValue, } from './pageProperties';
|
|
12
|
+
export { OWNER_PROPERTY_ID, VERIFICATION_PROPERTY_ID, BACKLINKS_PROPERTY_ID, FORM_SUBMISSION_PROPERTY_ID, THEME_PROPERTY_ID, COVER_PROPERTY_ID, FONTS_PROPERTY_ID, ICON_PROPERTY_ID, FULLWIDTH_PROPERTY_ID, SYSTEM_PAGE_PROPERTIES, isVerified, verificationExpired, isVerificationActive, makeVerification, extractMentionIds, propertiesReferencePage, extractPropertyReferenceIds, type DatabaseFormSubmissionMarker, type VerificationValue, } from './pageProperties';
|
|
12
13
|
export { getServerUrlOverride, setServerUrlOverride, getServerTokenOverride, setServerTokenOverride, getIdentityCredential, setIdentityToken, setGuestName, onIdentityChange, onServerOverrideChange, getForwardingAudience, setForwardingAudience, isMixedContentBlocked } from './connection';
|
|
13
14
|
export { AccountClient, AccountError, DEFAULT_ACCOUNT_URL, getAccountUrlOverride, setAccountUrlOverride, resolveAccountUrl, type AccountSettings, type IdentityTokenResult, } from './account';
|
|
14
15
|
export { guestPrincipal, localPrincipal, principalId, verifiedSubject, colorForIdentity, IDENTITY_COLORS, mintIdentityKeypair, signIdentity, decodeIdentity, verifyIdentity, verifyRevocations, signRevocations, principalFromClaims, unverifiedPrincipalFromClaims, LOCAL_OWNER_HEADER, CLIENT_HEADER, type Principal, type PrincipalKind, type VerifiedVia, type AgentTokenScope, type AgentTokenMeta, type IdentityHeader, type IdentityClaims, type Jwk, type Jwks, type RevocationEntry, type RevocationSet, type IdentityKeypair, type VerifyOptions, type VerifyResult, type VerifyFailure, } from './identity';
|
|
@@ -34,7 +35,7 @@ export { markdownToBlocks, markdownToImportedDoc, type MarkdownImportOptions } f
|
|
|
34
35
|
export { notionExportToImportedDoc } from './notionImport';
|
|
35
36
|
export { parseCsv, CsvLimitError, type ParseCsvOptions } from './csv';
|
|
36
37
|
export { rehydrateImageUrls, rehydrateStoredImages, importedImageBlock, imagePlaceholderMeta, mimeFromRef, notionAssetResolver, urlAssetResolver, isHttpUrl, isDataUrlRef, IMAGE_BLOCK_TYPE, DEFAULT_MAX_ASSET_BYTES, ASSET_IMAGE_MIMES, type RehydrateUrlOptions, type RehydrateStoredClient, type RehydrateStoredOptions, type RehydrateStoredResult, type ImportAssetResolver, type AssetBytes, } from './importAssets';
|
|
37
|
-
export { BACKUP_VERSION, BACKUP_CADENCES, BACKUP_CADENCE_MS, DEFAULT_BACKUP_CONFIG, remapBundle, type LibraryBackup, type LedgerBackupSection, type LedgerBackupAsset, type LedgerRestoreOutcome, type ImportMode, type ImportRequest, type ImportResult, type BackupCadence, type BackupConfig, type BackupCadenceStatus, type BackupStatus, } from './backup';
|
|
38
|
+
export { BACKUP_VERSION, BACKUP_CADENCES, BACKUP_CADENCE_MS, DEFAULT_BACKUP_CONFIG, remapBundle, type LibraryBackup, type BackupAsset, type BackupPageAcl, type BackupPageAccess, type BackupSkippedItem, type LedgerBackupSection, type LedgerBackupAsset, type LedgerRestoreOutcome, type PartialRestoreMissing, type BackupRestoreDiagnostic, type ImportMode, type ImportRequest, type ImportResult, type BackupCadence, type BackupFailure, type BackupConfig, type BackupCadenceStatus, type BackupStatus, } from './backup';
|
|
38
39
|
export type { AgentChatEvent, AgentChatMessage, AgentChatOptions, AgentProposal, InterviewStep, AiProvider, AiConfig, AiProviderSettings, AiEffort, AiSkill, AiStatus, AiSearchResult, AiSearchResponse, AiTasksResponse, AiStreamEvent, AiModelPrice, AiPricingTable, AiPricingResponse, AiUsageRow, AiUsageTotals, AiUsageResponse, McpTransport, McpServerConfig, McpClientConfig, McpConfigResponse, McpTestResult, } from './ai';
|
|
39
40
|
export { providerSettings, isPaidProvider } from './ai';
|
|
40
41
|
export { parseAmount, formatAmount, addAmounts, sumAmounts, negateAmount, compareAmounts, isValidMinor, isValidCurrencyCode, assertUniformCurrency, MoneyError, MoneyParseError, MoneyRangeError, MoneyCurrencyError, MAX_AMOUNT_MINOR, MIN_AMOUNT_MINOR, type MoneyErrorCode, type ParseAmountOptions, type FormatAmountOptions } from './money';
|
|
@@ -42,3 +43,4 @@ export { LedgerError, LEDGER_ERROR_CODES, LEDGER_ACCOUNT_TYPES, LEDGER_ACCOUNT_S
|
|
|
42
43
|
export { buildLedgerPostingsCsv, LEDGER_CSV_COLUMNS } from './ledgerCsv';
|
|
43
44
|
export { BEANCOUNT_ROOT_BY_TYPE, beancountAccountName, buildBeancountAccountNames, buildLedgerBeancount, formatBeancountAmount, mangleBeancountComponent, quoteBeancountString, } from './ledgerBeancount';
|
|
44
45
|
export { BEANCOUNT_PARITY_TX_COUNT, LEDGER_BENCH_POSTING_COUNT, buildBeancountMiniBook, buildBeancountParityBook, buildLedgerBenchBook, type LedgerBeancountFixtureBook, } from './ledgerBeancountFixture';
|
|
46
|
+
export * from './formSchema';
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
export { emptyPageSnapshot, PAGE_VISIBILITIES, AGENT_EDITS_MODES, AGENT_EDITS_POLICIES, resolveAgentEdits } from './types';
|
|
2
2
|
export { API } from './routes';
|
|
3
|
+
export { FormSubmissionError, FormUploadError, DatabaseFormRequestError, FORM_UPLOAD_MAX_FILE_BYTES, FORM_UPLOAD_MAX_FILES, FORM_UPLOAD_MAX_FORM_STAGED_BYTES, FORM_UPLOAD_MAX_FORM_BYTES, FORM_UPLOAD_ORPHAN_TTL_MS, generateSubmissionKey, safeFormRedirectUrl, } from './forms';
|
|
3
4
|
export { HttpDataClient, IdentityRejectedError } from './client';
|
|
4
5
|
export { ForwardingApiError, ForwardingClient, TunnelClient, MemoryKeyStore, SITE_VISIBILITIES, SiteReattachError, createNamespacedKeyStore, KeychainLockedError, mintSiteKeypair, signWithSiteKey, verifyWithSiteKey, FORWARDED_HEADER, signRosterAssertion, verifyRosterAssertion, isAcceptedRosterVersion, ROSTER_ASSERTION_VERSION, ROSTER_ASSERTION_V2, ACCEPTED_ROSTER_VERSIONS, ROSTER_ASSERTION_SKEW_MS, } from './forwarding';
|
|
5
6
|
export { DATA_PALETTE, DATA_COLOR_TOKENS, DATA_COLOR_SCHEMES, DEFAULT_DATA_COLOR_SCHEME, SERIES_ORDER, DATA_STROKE, STATUS_TOKENS, dataStroke, isDataColorToken, seriesColor, statusColor, hexAlpha, } from './dataColors';
|
|
6
|
-
export { TITLE_PROPERTY_ID, SELECT_COLORS, NO_VALUE_GROUP, STATUS_GROUPS, RELATIVE_DATE_OPS, projectExports, rowValue, matchesFilter, rowMatchesCondition, applyView, viewFilterRoot, isFilterGroup, shortId, resolveAutoExpiry, defaultDatabaseSchema, defaultView, defaultStatusOptions, removeProperty, formatNumber, formatUniqueId, numberProgress, groupRows, groupRowsBy, groupRowsByParent, PARENT_GROUP_ID, NO_PARENT_GROUP, aggregateRows, aggregateMatrix, CHART_TOTAL_SERIES, summarizeColumn, dateStart, dateEnd, parseDay, rowDateSpan, rowLocation, asLocation, dependencyGraph, syncInverseUpdates, relationSides, buildRowTree, flattenRowTree, isImageUrl, firstImageUrl, coverImageUrl, } from './database';
|
|
7
|
+
export { TITLE_PROPERTY_ID, FORM_PROPERTY_TYPE_WRITABILITY, FORM_ROW_VALIDATION_ERROR_CODES, KNOWN_DATABASE_VIEW_TYPES, SELECT_COLORS, NO_VALUE_GROUP, STATUS_GROUPS, RELATIVE_DATE_OPS, projectExports, rowValue, matchesFilter, rowMatchesCondition, applyView, viewFilterRoot, isFilterGroup, shortId, resolveAutoExpiry, isDatabaseViewType, isFormWritablePropertyType, formPatternIsUnsafe, defaultDatabaseSchema, defaultView, defaultStatusOptions, removeProperty, projectDatabaseFormDescriptor, validateRowAgainstForm, formatNumber, formatUniqueId, numberProgress, groupRows, groupRowsBy, groupRowsByParent, PARENT_GROUP_ID, NO_PARENT_GROUP, aggregateRows, aggregateMatrix, CHART_TOTAL_SERIES, summarizeColumn, dateStart, dateEnd, parseDay, rowDateSpan, rowLocation, asLocation, dependencyGraph, syncInverseUpdates, relationSides, buildRowTree, flattenRowTree, isImageUrl, firstImageUrl, coverImageUrl, } from './database';
|
|
7
8
|
export { evaluateFormula, formulaReferences, FormulaError, } from './formula';
|
|
8
|
-
export { OWNER_PROPERTY_ID, VERIFICATION_PROPERTY_ID, BACKLINKS_PROPERTY_ID, THEME_PROPERTY_ID, COVER_PROPERTY_ID, FONTS_PROPERTY_ID, ICON_PROPERTY_ID, FULLWIDTH_PROPERTY_ID, SYSTEM_PAGE_PROPERTIES, isVerified, verificationExpired, isVerificationActive, makeVerification, extractMentionIds, propertiesReferencePage, extractPropertyReferenceIds, } from './pageProperties';
|
|
9
|
+
export { OWNER_PROPERTY_ID, VERIFICATION_PROPERTY_ID, BACKLINKS_PROPERTY_ID, FORM_SUBMISSION_PROPERTY_ID, THEME_PROPERTY_ID, COVER_PROPERTY_ID, FONTS_PROPERTY_ID, ICON_PROPERTY_ID, FULLWIDTH_PROPERTY_ID, SYSTEM_PAGE_PROPERTIES, isVerified, verificationExpired, isVerificationActive, makeVerification, extractMentionIds, propertiesReferencePage, extractPropertyReferenceIds, } from './pageProperties';
|
|
9
10
|
export { getServerUrlOverride, setServerUrlOverride, getServerTokenOverride, setServerTokenOverride, getIdentityCredential, setIdentityToken, setGuestName, onIdentityChange, onServerOverrideChange, getForwardingAudience, setForwardingAudience, isMixedContentBlocked } from './connection';
|
|
10
11
|
export { AccountClient, AccountError, DEFAULT_ACCOUNT_URL, getAccountUrlOverride, setAccountUrlOverride, resolveAccountUrl, } from './account';
|
|
11
12
|
export { guestPrincipal, localPrincipal, principalId, verifiedSubject, colorForIdentity, IDENTITY_COLORS, mintIdentityKeypair, signIdentity, decodeIdentity, verifyIdentity, verifyRevocations, signRevocations, principalFromClaims, unverifiedPrincipalFromClaims, LOCAL_OWNER_HEADER, CLIENT_HEADER, } from './identity';
|
|
@@ -37,4 +38,5 @@ export { LedgerError, LEDGER_ERROR_CODES, LEDGER_ACCOUNT_TYPES, LEDGER_ACCOUNT_S
|
|
|
37
38
|
export { buildLedgerPostingsCsv, LEDGER_CSV_COLUMNS } from './ledgerCsv';
|
|
38
39
|
export { BEANCOUNT_ROOT_BY_TYPE, beancountAccountName, buildBeancountAccountNames, buildLedgerBeancount, formatBeancountAmount, mangleBeancountComponent, quoteBeancountString, } from './ledgerBeancount';
|
|
39
40
|
export { BEANCOUNT_PARITY_TX_COUNT, LEDGER_BENCH_POSTING_COUNT, buildBeancountMiniBook, buildBeancountParityBook, buildLedgerBenchBook, } from './ledgerBeancountFixture';
|
|
41
|
+
export * from './formSchema';
|
|
40
42
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/pageProperties.d.ts
CHANGED
|
@@ -22,6 +22,13 @@ export declare const OWNER_PROPERTY_ID = "sys_owner";
|
|
|
22
22
|
export declare const VERIFICATION_PROPERTY_ID = "sys_verification";
|
|
23
23
|
/** Reserved, stable id for the Backlinks (computed) property. */
|
|
24
24
|
export declare const BACKLINKS_PROPERTY_ID = "sys_backlinks";
|
|
25
|
+
/** Reserved provenance marker attached to rows created by a form submission. */
|
|
26
|
+
export declare const FORM_SUBMISSION_PROPERTY_ID = "sys_form_submission";
|
|
27
|
+
/** Provenance stamped on a row created through a database-view form. */
|
|
28
|
+
export interface DatabaseFormSubmissionMarker {
|
|
29
|
+
submittedViaViewId: string;
|
|
30
|
+
submittedAt: string;
|
|
31
|
+
}
|
|
25
32
|
/**
|
|
26
33
|
* Reserved ids for a page's **appearance**, stored on `page.properties` so a
|
|
27
34
|
* page's theme / cover / typefaces travel with the document (sync across
|
package/dist/pageProperties.js
CHANGED
|
@@ -4,6 +4,8 @@ export const OWNER_PROPERTY_ID = 'sys_owner';
|
|
|
4
4
|
export const VERIFICATION_PROPERTY_ID = 'sys_verification';
|
|
5
5
|
/** Reserved, stable id for the Backlinks (computed) property. */
|
|
6
6
|
export const BACKLINKS_PROPERTY_ID = 'sys_backlinks';
|
|
7
|
+
/** Reserved provenance marker attached to rows created by a form submission. */
|
|
8
|
+
export const FORM_SUBMISSION_PROPERTY_ID = 'sys_form_submission';
|
|
7
9
|
/**
|
|
8
10
|
* Reserved ids for a page's **appearance**, stored on `page.properties` so a
|
|
9
11
|
* page's theme / cover / typefaces travel with the document (sync across
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageProperties.js","sourceRoot":"","sources":["../src/pageProperties.ts"],"names":[],"mappings":"AAmBA,2DAA2D;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAC7C,yDAAyD;AACzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAC3D,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"pageProperties.js","sourceRoot":"","sources":["../src/pageProperties.ts"],"names":[],"mappings":"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"}
|
package/dist/routes.d.ts
CHANGED
|
@@ -9,6 +9,18 @@ export declare const API: {
|
|
|
9
9
|
readonly pages: "/api/pages";
|
|
10
10
|
/** Single page: `GET` / `PUT` (upsert) / `PATCH` (rename) / `DELETE` (to trash). */
|
|
11
11
|
readonly page: (id: string) => string;
|
|
12
|
+
/** Capability-gated form row creation: `POST`. */
|
|
13
|
+
readonly formSubmissions: (pageId: string, formId: string) => string;
|
|
14
|
+
/** Capability-gated database form-view row creation: `POST` (F-4). */
|
|
15
|
+
readonly databaseFormSubmissions: (databaseId: string, viewId: string) => string;
|
|
16
|
+
/** Capability-gated database form descriptor: `POST` (F-4). */
|
|
17
|
+
readonly databaseForm: (databaseId: string, viewId: string) => string;
|
|
18
|
+
/** Owner/manager publication lifecycle: `GET` status / `POST` mint-or-rotate / `DELETE` revoke. */
|
|
19
|
+
readonly databaseFormCapability: (databaseId: string, viewId: string) => string;
|
|
20
|
+
/** Capability-gated staged upload for a database form view: `POST`. */
|
|
21
|
+
readonly databaseFormUploads: (databaseId: string, viewId: string) => string;
|
|
22
|
+
/** Capability-gated staged form-file upload: `POST`. */
|
|
23
|
+
readonly formUploads: (pageId: string, formId: string) => string;
|
|
12
24
|
/** A page's structured properties (owner, verification, …): `PATCH` (shallow merge). */
|
|
13
25
|
readonly pageProperties: (id: string) => string;
|
|
14
26
|
/** Pages that link to this one (the backlink graph): `GET`. */
|
package/dist/routes.js
CHANGED
|
@@ -9,6 +9,18 @@ export const API = {
|
|
|
9
9
|
pages: '/api/pages',
|
|
10
10
|
/** Single page: `GET` / `PUT` (upsert) / `PATCH` (rename) / `DELETE` (to trash). */
|
|
11
11
|
page: (id) => `/api/pages/${encodeURIComponent(id)}`,
|
|
12
|
+
/** Capability-gated form row creation: `POST`. */
|
|
13
|
+
formSubmissions: (pageId, formId) => `/api/pages/${encodeURIComponent(pageId)}/forms/${encodeURIComponent(formId)}/submissions`,
|
|
14
|
+
/** Capability-gated database form-view row creation: `POST` (F-4). */
|
|
15
|
+
databaseFormSubmissions: (databaseId, viewId) => `/api/databases/${encodeURIComponent(databaseId)}/views/${encodeURIComponent(viewId)}/submissions`,
|
|
16
|
+
/** Capability-gated database form descriptor: `POST` (F-4). */
|
|
17
|
+
databaseForm: (databaseId, viewId) => `/api/databases/${encodeURIComponent(databaseId)}/views/${encodeURIComponent(viewId)}/form`,
|
|
18
|
+
/** Owner/manager publication lifecycle: `GET` status / `POST` mint-or-rotate / `DELETE` revoke. */
|
|
19
|
+
databaseFormCapability: (databaseId, viewId) => `/api/databases/${encodeURIComponent(databaseId)}/views/${encodeURIComponent(viewId)}/capability`,
|
|
20
|
+
/** Capability-gated staged upload for a database form view: `POST`. */
|
|
21
|
+
databaseFormUploads: (databaseId, viewId) => `/api/databases/${encodeURIComponent(databaseId)}/views/${encodeURIComponent(viewId)}/uploads`,
|
|
22
|
+
/** Capability-gated staged form-file upload: `POST`. */
|
|
23
|
+
formUploads: (pageId, formId) => `/api/pages/${encodeURIComponent(pageId)}/forms/${encodeURIComponent(formId)}/uploads`,
|
|
12
24
|
/** A page's structured properties (owner, verification, …): `PATCH` (shallow merge). */
|
|
13
25
|
pageProperties: (id) => `/api/pages/${encodeURIComponent(id)}/properties`,
|
|
14
26
|
/** Pages that link to this one (the backlink graph): `GET`. */
|