@sparkvault/sdk-mobile 4.5.4 → 4.5.6
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/config.js +19 -1
- package/dist/config.js.map +1 -1
- package/dist/notify.d.ts +15 -7
- package/dist/notify.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +25 -2
- package/src/notify.ts +15 -7
package/dist/config.js
CHANGED
|
@@ -29,7 +29,25 @@ function defaultFetch(url, options) {
|
|
|
29
29
|
if (typeof fetch !== 'function') {
|
|
30
30
|
throw new SparkVaultValidationError('A fetch implementation is required in this runtime');
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
const { timeoutMs, ...init } = options ?? {};
|
|
33
|
+
if (!timeoutMs || timeoutMs <= 0) {
|
|
34
|
+
return fetch(url, init);
|
|
35
|
+
}
|
|
36
|
+
// `timeoutMs` is inert to the platform fetch, so it has to become an abort
|
|
37
|
+
// signal here or every request runs unbounded — the worst failure mode on a
|
|
38
|
+
// mobile network. A caller-supplied signal still aborts the request too.
|
|
39
|
+
const controller = new AbortController();
|
|
40
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
41
|
+
const callerSignal = init.signal;
|
|
42
|
+
if (callerSignal) {
|
|
43
|
+
if (callerSignal.aborted) {
|
|
44
|
+
controller.abort();
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
callerSignal.addEventListener('abort', () => controller.abort(), { once: true });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return fetch(url, { ...init, signal: controller.signal }).finally(() => clearTimeout(timer));
|
|
33
51
|
}
|
|
34
52
|
export function resolveMobileConfig(config) {
|
|
35
53
|
if (!config.tokenStorage) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AASzC,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAC7D,MAAM,yBAAyB,GAAG,6BAA6B,CAAC;AAEhE,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,sEAAsE;AACtE,MAAM,sCAAsC,GAAa;IACvD,IAAI,MAAM,CAAC,UAAU,YAAY,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC;IAClE,IAAI,MAAM,CAAC,WAAW,4BAA4B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;IACxF,oBAAoB;IACpB,qBAAqB;CACtB,CAAC;AAEF,MAAM,UAAU,GAAqB;IACnC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;IACrB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;IACrB,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;CACvB,CAAC;AAwCF,SAAS,gBAAgB,CAAC,GAAW,EAAE,KAAa;IAClD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,yBAAyB,CAAC,GAAG,KAAK,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,YAAY,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/notify.d.ts
CHANGED
|
@@ -4,27 +4,35 @@ export type NotificationInboxState = 'all' | 'unseen' | 'unread' | 'archived';
|
|
|
4
4
|
/** Terminal display states the recipient can apply to one of their rows. */
|
|
5
5
|
export type NotificationMarkState = 'seen' | 'read' | 'archived';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* the
|
|
9
|
-
*
|
|
7
|
+
* An inbox row in the two-part notification model. The `title` (and, for a
|
|
8
|
+
* cleartext send, the short `body`) is the NON-sensitive cleartext part, shown
|
|
9
|
+
* natively. A SECURE send's content lives behind the SparkLink (`sparklink_code`)
|
|
10
|
+
* and is never carried here — open the pointer to reveal it. Timestamps are epoch
|
|
11
|
+
* SECONDS.
|
|
10
12
|
*/
|
|
11
13
|
export interface NotificationRow {
|
|
12
14
|
notification_id: string;
|
|
13
15
|
send_id: string;
|
|
14
16
|
created_at: number;
|
|
15
17
|
title: string;
|
|
18
|
+
/**
|
|
19
|
+
* The short cleartext body of a plaintext send, shown natively. Absent on a
|
|
20
|
+
* sealed row (its content lives behind the pointer).
|
|
21
|
+
*/
|
|
22
|
+
body?: string;
|
|
16
23
|
category: string;
|
|
17
24
|
type: string;
|
|
18
25
|
seen_at: number | null;
|
|
19
26
|
read_at: number | null;
|
|
20
27
|
archived_at: number | null;
|
|
21
28
|
/**
|
|
22
|
-
* The grant to open. Present only for a SEALED send — a
|
|
23
|
-
* its content inline in the channel and mints no grant, so its row has
|
|
24
|
-
* pointer. Guard before building a URL from it.
|
|
29
|
+
* The grant to open. Present only for a SEALED (secure) send — a cleartext send
|
|
30
|
+
* delivers its content inline in the channel and mints no grant, so its row has
|
|
31
|
+
* no pointer. Guard before building a URL from it.
|
|
25
32
|
*/
|
|
26
33
|
sparklink_code?: string;
|
|
27
|
-
|
|
34
|
+
/** True only when there is a secure part to reveal (i.e. `sparklink_code` is set). */
|
|
35
|
+
locked: boolean;
|
|
28
36
|
thread_id?: string;
|
|
29
37
|
}
|
|
30
38
|
export interface ListNotificationsOptions {
|
package/dist/notify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../src/notify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../src/notify.ts"],"names":[],"mappings":"AAoFA;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IAG7B,YAAY,IAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,QAAQ,CAAC,UAAoC,EAAE;QACnD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAClC,KAAK,CAAC,CAAC,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAC3D,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,cAAc;QAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAsB,gCAAgC,CAAC,CAAC;QAC5F,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CACb,cAAsB,EACtB,OAAqC;QAErC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CACnC,qBAAqB,kBAAkB,CAAC,cAAc,CAAC,QAAQ,EAC/D,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACxD,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAyB,2BAA2B,EAAE;YACzF,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QACtC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;CACF"}
|
package/package.json
CHANGED
package/src/config.ts
CHANGED
|
@@ -79,11 +79,34 @@ function normalizeBaseUrl(url: string, field: string): string {
|
|
|
79
79
|
return url.replace(/\/+$/, '');
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
function defaultFetch(
|
|
82
|
+
function defaultFetch(
|
|
83
|
+
url: string,
|
|
84
|
+
options?: RequestInit & { timeoutMs?: number }
|
|
85
|
+
): Promise<Response> {
|
|
83
86
|
if (typeof fetch !== 'function') {
|
|
84
87
|
throw new SparkVaultValidationError('A fetch implementation is required in this runtime');
|
|
85
88
|
}
|
|
86
|
-
|
|
89
|
+
|
|
90
|
+
const { timeoutMs, ...init } = options ?? {};
|
|
91
|
+
if (!timeoutMs || timeoutMs <= 0) {
|
|
92
|
+
return fetch(url, init);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// `timeoutMs` is inert to the platform fetch, so it has to become an abort
|
|
96
|
+
// signal here or every request runs unbounded — the worst failure mode on a
|
|
97
|
+
// mobile network. A caller-supplied signal still aborts the request too.
|
|
98
|
+
const controller = new AbortController();
|
|
99
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
100
|
+
const callerSignal = init.signal;
|
|
101
|
+
if (callerSignal) {
|
|
102
|
+
if (callerSignal.aborted) {
|
|
103
|
+
controller.abort();
|
|
104
|
+
} else {
|
|
105
|
+
callerSignal.addEventListener('abort', () => controller.abort(), { once: true });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return fetch(url, { ...init, signal: controller.signal }).finally(() => clearTimeout(timer));
|
|
87
110
|
}
|
|
88
111
|
|
|
89
112
|
export function resolveMobileConfig(config: SparkVaultMobileConfig): ResolvedMobileConfig {
|
package/src/notify.ts
CHANGED
|
@@ -7,27 +7,35 @@ export type NotificationInboxState = 'all' | 'unseen' | 'unread' | 'archived';
|
|
|
7
7
|
export type NotificationMarkState = 'seen' | 'read' | 'archived';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* the
|
|
12
|
-
*
|
|
10
|
+
* An inbox row in the two-part notification model. The `title` (and, for a
|
|
11
|
+
* cleartext send, the short `body`) is the NON-sensitive cleartext part, shown
|
|
12
|
+
* natively. A SECURE send's content lives behind the SparkLink (`sparklink_code`)
|
|
13
|
+
* and is never carried here — open the pointer to reveal it. Timestamps are epoch
|
|
14
|
+
* SECONDS.
|
|
13
15
|
*/
|
|
14
16
|
export interface NotificationRow {
|
|
15
17
|
notification_id: string;
|
|
16
18
|
send_id: string;
|
|
17
19
|
created_at: number;
|
|
18
20
|
title: string;
|
|
21
|
+
/**
|
|
22
|
+
* The short cleartext body of a plaintext send, shown natively. Absent on a
|
|
23
|
+
* sealed row (its content lives behind the pointer).
|
|
24
|
+
*/
|
|
25
|
+
body?: string;
|
|
19
26
|
category: string;
|
|
20
27
|
type: string;
|
|
21
28
|
seen_at: number | null;
|
|
22
29
|
read_at: number | null;
|
|
23
30
|
archived_at: number | null;
|
|
24
31
|
/**
|
|
25
|
-
* The grant to open. Present only for a SEALED send — a
|
|
26
|
-
* its content inline in the channel and mints no grant, so its row has
|
|
27
|
-
* pointer. Guard before building a URL from it.
|
|
32
|
+
* The grant to open. Present only for a SEALED (secure) send — a cleartext send
|
|
33
|
+
* delivers its content inline in the channel and mints no grant, so its row has
|
|
34
|
+
* no pointer. Guard before building a URL from it.
|
|
28
35
|
*/
|
|
29
36
|
sparklink_code?: string;
|
|
30
|
-
|
|
37
|
+
/** True only when there is a secure part to reveal (i.e. `sparklink_code` is set). */
|
|
38
|
+
locked: boolean;
|
|
31
39
|
thread_id?: string;
|
|
32
40
|
}
|
|
33
41
|
|