@domino-sdk/relay 0.14.1 → 0.15.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/authoring.d.ts +2 -2
- package/dist/browser.d.ts +39 -39
- package/dist/browser.js +4 -55
- package/dist/chunk-CQ5YSQQE.js +61 -0
- package/dist/index.d.ts +102 -102
- package/dist/portal-proxy.d.ts +26 -1
- package/dist/portal-proxy.js +43 -0
- package/dist/react/index.d.ts +3847 -0
- package/dist/react/index.js +833 -0
- package/dist/{settings-CU2y-wUM.d.ts → settings-e0nHA0JA.d.ts} +1 -1
- package/dist/vite.d.ts +32 -0
- package/dist/vite.js +42 -0
- package/package.json +22 -2
package/dist/authoring.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { O as Observation, T as TrackerReader, D as DiscordMember, a as DiscordMessage, W as WalletConnection, S as SolanaBalance, o as observationTriggerSchema, B as Budget, A as AuthoringIdentity, I as IntegrationProvider, b as StreakPolicy } from './settings-
|
|
2
|
-
export { c as customSource, d as defineLeaderboard, e as defineReferral, f as defineTracker, g as discord, p as pointLedgers, s as settings, h as streak, x } from './settings-
|
|
1
|
+
import { O as Observation, T as TrackerReader, D as DiscordMember, a as DiscordMessage, W as WalletConnection, S as SolanaBalance, o as observationTriggerSchema, B as Budget, A as AuthoringIdentity, I as IntegrationProvider, b as StreakPolicy } from './settings-e0nHA0JA.js';
|
|
2
|
+
export { c as customSource, d as defineLeaderboard, e as defineReferral, f as defineTracker, g as discord, p as pointLedgers, s as settings, h as streak, x } from './settings-e0nHA0JA.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { PhotoResult, rewardSchema, triggerSchema, QuestPresentation, QuizEvidence, Decision, TieredRewardDefinition } from './schema.js';
|
|
5
5
|
|
package/dist/browser.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SubmitInput, ReviewListOptions, MemberListOptions, ReleaseInput, beginHandoverSchema } from './schema.js';
|
|
2
2
|
import { SubmissionStore, createRelayClient, QuestView, QuestController, ProgressObservation, questExperienceSchema, ProgressObserver, ExchangeInput, PhotoSubmission, QuizSubmission, ClaimSubmission } from './index.js';
|
|
3
|
-
import { r as referralAcceptSchema, L as LeaderboardQuery, w as walletChallengeInputSchema, i as walletProofSchema, j as AuthProvider } from './settings-
|
|
3
|
+
import { r as referralAcceptSchema, L as LeaderboardQuery, w as walletChallengeInputSchema, i as walletProofSchema, j as AuthProvider } from './settings-e0nHA0JA.js';
|
|
4
4
|
import * as zod from 'zod';
|
|
5
5
|
|
|
6
6
|
/** Browser client with durable submission recovery; safe to construct during SSR. */
|
|
@@ -212,7 +212,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
212
212
|
accounts: {
|
|
213
213
|
id: string;
|
|
214
214
|
program: string;
|
|
215
|
-
kind: "
|
|
215
|
+
kind: "fixed" | "milestone" | "bonus";
|
|
216
216
|
balance: string;
|
|
217
217
|
earned: number;
|
|
218
218
|
settled: number;
|
|
@@ -402,7 +402,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
402
402
|
quest: string;
|
|
403
403
|
member: string;
|
|
404
404
|
evidence: string | null;
|
|
405
|
-
status: "
|
|
405
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
406
406
|
reason: string | null;
|
|
407
407
|
retries: number;
|
|
408
408
|
generation: number;
|
|
@@ -445,7 +445,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
445
445
|
} | null;
|
|
446
446
|
release: string;
|
|
447
447
|
interaction: "staff" | "quiz" | "photo" | "automatic" | "claim";
|
|
448
|
-
lifecycle: "
|
|
448
|
+
lifecycle: "active" | "paused" | "archived";
|
|
449
449
|
rewards: {
|
|
450
450
|
label: string;
|
|
451
451
|
}[];
|
|
@@ -487,7 +487,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
487
487
|
quest: string;
|
|
488
488
|
member: string;
|
|
489
489
|
evidence: string | null;
|
|
490
|
-
status: "
|
|
490
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
491
491
|
reason: string | null;
|
|
492
492
|
retries: number;
|
|
493
493
|
generation: number;
|
|
@@ -616,7 +616,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
616
616
|
quest: string;
|
|
617
617
|
member: string;
|
|
618
618
|
evidence: string | null;
|
|
619
|
-
status: "
|
|
619
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
620
620
|
reason: string | null;
|
|
621
621
|
retries: number;
|
|
622
622
|
generation: number;
|
|
@@ -659,7 +659,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
659
659
|
} | null;
|
|
660
660
|
release: string;
|
|
661
661
|
interaction: "staff" | "quiz" | "photo" | "automatic" | "claim";
|
|
662
|
-
lifecycle: "
|
|
662
|
+
lifecycle: "active" | "paused" | "archived";
|
|
663
663
|
rewards: {
|
|
664
664
|
label: string;
|
|
665
665
|
}[];
|
|
@@ -784,7 +784,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
784
784
|
quest: string;
|
|
785
785
|
member: string;
|
|
786
786
|
evidence: string | null;
|
|
787
|
-
status: "
|
|
787
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
788
788
|
reason: string | null;
|
|
789
789
|
retries: number;
|
|
790
790
|
generation: number;
|
|
@@ -827,7 +827,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
827
827
|
} | null;
|
|
828
828
|
release: string;
|
|
829
829
|
interaction: "staff" | "quiz" | "photo" | "automatic" | "claim";
|
|
830
|
-
lifecycle: "
|
|
830
|
+
lifecycle: "active" | "paused" | "archived";
|
|
831
831
|
rewards: {
|
|
832
832
|
label: string;
|
|
833
833
|
}[];
|
|
@@ -955,7 +955,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
955
955
|
quest: string;
|
|
956
956
|
member: string;
|
|
957
957
|
evidence: string | null;
|
|
958
|
-
status: "
|
|
958
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
959
959
|
reason: string | null;
|
|
960
960
|
retries: number;
|
|
961
961
|
generation: number;
|
|
@@ -998,7 +998,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
998
998
|
} | null;
|
|
999
999
|
release: string;
|
|
1000
1000
|
interaction: "staff" | "quiz" | "photo" | "automatic" | "claim";
|
|
1001
|
-
lifecycle: "
|
|
1001
|
+
lifecycle: "active" | "paused" | "archived";
|
|
1002
1002
|
rewards: {
|
|
1003
1003
|
label: string;
|
|
1004
1004
|
}[];
|
|
@@ -1187,7 +1187,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
1187
1187
|
quest: string;
|
|
1188
1188
|
member: string;
|
|
1189
1189
|
evidence: string | null;
|
|
1190
|
-
status: "
|
|
1190
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
1191
1191
|
reason: string | null;
|
|
1192
1192
|
retries: number;
|
|
1193
1193
|
generation: number;
|
|
@@ -1316,7 +1316,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
1316
1316
|
quest: string;
|
|
1317
1317
|
member: string;
|
|
1318
1318
|
evidence: string | null;
|
|
1319
|
-
status: "
|
|
1319
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
1320
1320
|
reason: string | null;
|
|
1321
1321
|
retries: number;
|
|
1322
1322
|
generation: number;
|
|
@@ -1477,7 +1477,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
1477
1477
|
provider: "discord";
|
|
1478
1478
|
action: "grant-role";
|
|
1479
1479
|
roleId: string;
|
|
1480
|
-
status: "
|
|
1480
|
+
status: "failed" | "pending" | "delivered";
|
|
1481
1481
|
attempts: number;
|
|
1482
1482
|
nextAt: number;
|
|
1483
1483
|
lastError: string | null;
|
|
@@ -1493,7 +1493,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
1493
1493
|
quest: string;
|
|
1494
1494
|
member: string;
|
|
1495
1495
|
evidence: string | null;
|
|
1496
|
-
status: "
|
|
1496
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
1497
1497
|
reason: string | null;
|
|
1498
1498
|
retries: number;
|
|
1499
1499
|
generation: number;
|
|
@@ -1552,7 +1552,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
1552
1552
|
quest: string;
|
|
1553
1553
|
member: string;
|
|
1554
1554
|
evidence: string | null;
|
|
1555
|
-
status: "
|
|
1555
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
1556
1556
|
reason: string | null;
|
|
1557
1557
|
retries: number;
|
|
1558
1558
|
generation: number;
|
|
@@ -1664,12 +1664,12 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
1664
1664
|
kind: "resource";
|
|
1665
1665
|
default: string;
|
|
1666
1666
|
source: {
|
|
1667
|
+
provider: "domino";
|
|
1668
|
+
resource: "point-ledger";
|
|
1669
|
+
} | {
|
|
1667
1670
|
provider: "discord";
|
|
1668
1671
|
resource: "channel";
|
|
1669
1672
|
types: ("text" | "announcement")[];
|
|
1670
|
-
} | {
|
|
1671
|
-
provider: "domino";
|
|
1672
|
-
resource: "point-ledger";
|
|
1673
1673
|
} | {
|
|
1674
1674
|
provider: "discord";
|
|
1675
1675
|
resource: "role";
|
|
@@ -1831,12 +1831,12 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
1831
1831
|
kind: "resource";
|
|
1832
1832
|
default: string;
|
|
1833
1833
|
source: {
|
|
1834
|
+
provider: "domino";
|
|
1835
|
+
resource: "point-ledger";
|
|
1836
|
+
} | {
|
|
1834
1837
|
provider: "discord";
|
|
1835
1838
|
resource: "channel";
|
|
1836
1839
|
types: ("text" | "announcement")[];
|
|
1837
|
-
} | {
|
|
1838
|
-
provider: "domino";
|
|
1839
|
-
resource: "point-ledger";
|
|
1840
1840
|
} | {
|
|
1841
1841
|
provider: "discord";
|
|
1842
1842
|
resource: "role";
|
|
@@ -1997,12 +1997,12 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
1997
1997
|
kind: "resource";
|
|
1998
1998
|
default: string;
|
|
1999
1999
|
source: {
|
|
2000
|
+
provider: "domino";
|
|
2001
|
+
resource: "point-ledger";
|
|
2002
|
+
} | {
|
|
2000
2003
|
provider: "discord";
|
|
2001
2004
|
resource: "channel";
|
|
2002
2005
|
types: ("text" | "announcement")[];
|
|
2003
|
-
} | {
|
|
2004
|
-
provider: "domino";
|
|
2005
|
-
resource: "point-ledger";
|
|
2006
2006
|
} | {
|
|
2007
2007
|
provider: "discord";
|
|
2008
2008
|
resource: "role";
|
|
@@ -2126,7 +2126,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
2126
2126
|
id: string;
|
|
2127
2127
|
createdAt: number;
|
|
2128
2128
|
legacy: boolean;
|
|
2129
|
-
lifecycle: "
|
|
2129
|
+
lifecycle: "active" | "paused" | "archived";
|
|
2130
2130
|
key?: string | undefined;
|
|
2131
2131
|
origin?: {
|
|
2132
2132
|
typeVersion: string;
|
|
@@ -2242,7 +2242,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
2242
2242
|
quest: string;
|
|
2243
2243
|
member: string;
|
|
2244
2244
|
evidence: string | null;
|
|
2245
|
-
status: "
|
|
2245
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
2246
2246
|
reason: string | null;
|
|
2247
2247
|
retries: number;
|
|
2248
2248
|
generation: number;
|
|
@@ -2338,12 +2338,12 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
2338
2338
|
kind: "resource";
|
|
2339
2339
|
default: string;
|
|
2340
2340
|
source: {
|
|
2341
|
+
provider: "domino";
|
|
2342
|
+
resource: "point-ledger";
|
|
2343
|
+
} | {
|
|
2341
2344
|
provider: "discord";
|
|
2342
2345
|
resource: "channel";
|
|
2343
2346
|
types: ("text" | "announcement")[];
|
|
2344
|
-
} | {
|
|
2345
|
-
provider: "domino";
|
|
2346
|
-
resource: "point-ledger";
|
|
2347
2347
|
} | {
|
|
2348
2348
|
provider: "discord";
|
|
2349
2349
|
resource: "role";
|
|
@@ -2467,7 +2467,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
2467
2467
|
id: string;
|
|
2468
2468
|
createdAt: number;
|
|
2469
2469
|
legacy: boolean;
|
|
2470
|
-
lifecycle: "
|
|
2470
|
+
lifecycle: "active" | "paused" | "archived";
|
|
2471
2471
|
key?: string | undefined;
|
|
2472
2472
|
origin?: {
|
|
2473
2473
|
typeVersion: string;
|
|
@@ -2533,12 +2533,12 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
2533
2533
|
kind: "resource";
|
|
2534
2534
|
default: string;
|
|
2535
2535
|
source: {
|
|
2536
|
+
provider: "domino";
|
|
2537
|
+
resource: "point-ledger";
|
|
2538
|
+
} | {
|
|
2536
2539
|
provider: "discord";
|
|
2537
2540
|
resource: "channel";
|
|
2538
2541
|
types: ("text" | "announcement")[];
|
|
2539
|
-
} | {
|
|
2540
|
-
provider: "domino";
|
|
2541
|
-
resource: "point-ledger";
|
|
2542
2542
|
} | {
|
|
2543
2543
|
provider: "discord";
|
|
2544
2544
|
resource: "role";
|
|
@@ -2662,7 +2662,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
2662
2662
|
id: string;
|
|
2663
2663
|
createdAt: number;
|
|
2664
2664
|
legacy: boolean;
|
|
2665
|
-
lifecycle: "
|
|
2665
|
+
lifecycle: "active" | "paused" | "archived";
|
|
2666
2666
|
key?: string | undefined;
|
|
2667
2667
|
origin?: {
|
|
2668
2668
|
typeVersion: string;
|
|
@@ -2777,7 +2777,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
2777
2777
|
quest: string;
|
|
2778
2778
|
member: string;
|
|
2779
2779
|
evidence: string | null;
|
|
2780
|
-
status: "
|
|
2780
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
2781
2781
|
reason: string | null;
|
|
2782
2782
|
retries: number;
|
|
2783
2783
|
generation: number;
|
|
@@ -3098,7 +3098,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
3098
3098
|
quest: string;
|
|
3099
3099
|
member: string;
|
|
3100
3100
|
evidence: string | null;
|
|
3101
|
-
status: "
|
|
3101
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
3102
3102
|
reason: string | null;
|
|
3103
3103
|
retries: number;
|
|
3104
3104
|
generation: number;
|
|
@@ -3145,7 +3145,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
3145
3145
|
quest: string;
|
|
3146
3146
|
member: string;
|
|
3147
3147
|
evidence: string | null;
|
|
3148
|
-
status: "
|
|
3148
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
3149
3149
|
reason: string | null;
|
|
3150
3150
|
retries: number;
|
|
3151
3151
|
generation: number;
|
|
@@ -3197,7 +3197,7 @@ declare function createBrowserRelayClient(options: Parameters<typeof createRelay
|
|
|
3197
3197
|
quest: string;
|
|
3198
3198
|
member: string;
|
|
3199
3199
|
evidence: string | null;
|
|
3200
|
-
status: "
|
|
3200
|
+
status: "queued" | "evaluating" | "accepted" | "progressed" | "rejected" | "needs-review" | "failed";
|
|
3201
3201
|
reason: string | null;
|
|
3202
3202
|
retries: number;
|
|
3203
3203
|
generation: number;
|
package/dist/browser.js
CHANGED
|
@@ -1,62 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
browserSubmissionStore,
|
|
3
|
+
createBrowserRelayClient
|
|
4
|
+
} from "./chunk-CQ5YSQQE.js";
|
|
5
|
+
import "./chunk-YZJOZL4V.js";
|
|
4
6
|
import "./chunk-CJARNIVP.js";
|
|
5
7
|
import "./chunk-I2CCMGN6.js";
|
|
6
8
|
import "./chunk-FUQYKTOJ.js";
|
|
7
|
-
|
|
8
|
-
// src/browser.ts
|
|
9
|
-
function createBrowserRelayClient(options) {
|
|
10
|
-
return createRelayClient({
|
|
11
|
-
...options,
|
|
12
|
-
submissionStore: options.submissionStore ?? browserSubmissionStore()
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
function browserSubmissionStore() {
|
|
16
|
-
let database;
|
|
17
|
-
function open() {
|
|
18
|
-
if (!globalThis.indexedDB || !globalThis.navigator?.locks) {
|
|
19
|
-
throw new Error(
|
|
20
|
-
"This browser cannot safely save submissions. Use a browser with IndexedDB and Web Locks enabled."
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
return database ??= new Promise((resolve, reject) => {
|
|
24
|
-
const request = indexedDB.open("domino-relay-submissions", 1);
|
|
25
|
-
request.onupgradeneeded = () => request.result.createObjectStore("submissions");
|
|
26
|
-
request.onerror = () => reject(new Error("Could not open submission storage"));
|
|
27
|
-
request.onsuccess = () => resolve(request.result);
|
|
28
|
-
request.onblocked = () => reject(new Error("Close other Relay tabs and try again"));
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
async function transact(key, value) {
|
|
32
|
-
const db = await open();
|
|
33
|
-
return new Promise((resolve, reject) => {
|
|
34
|
-
const transaction = db.transaction(
|
|
35
|
-
"submissions",
|
|
36
|
-
value === void 0 ? "readonly" : "readwrite",
|
|
37
|
-
{ durability: "strict" }
|
|
38
|
-
);
|
|
39
|
-
const store = transaction.objectStore("submissions");
|
|
40
|
-
const request = value === void 0 ? store.get(key) : store.put(value, key);
|
|
41
|
-
transaction.oncomplete = () => resolve(request.result);
|
|
42
|
-
transaction.onerror = transaction.onabort = () => reject(
|
|
43
|
-
new Error(
|
|
44
|
-
"Could not save submission progress. Resume the saved submission when browser storage is available."
|
|
45
|
-
)
|
|
46
|
-
);
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
read: (key) => transact(key),
|
|
51
|
-
write: async (key, value) => {
|
|
52
|
-
await transact(key, value);
|
|
53
|
-
},
|
|
54
|
-
exclusive: async (key, task) => {
|
|
55
|
-
await open();
|
|
56
|
-
return navigator.locks.request(key, task);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
9
|
export {
|
|
61
10
|
browserSubmissionStore,
|
|
62
11
|
createBrowserRelayClient
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createRelayClient
|
|
3
|
+
} from "./chunk-YZJOZL4V.js";
|
|
4
|
+
|
|
5
|
+
// src/browser.ts
|
|
6
|
+
function createBrowserRelayClient(options) {
|
|
7
|
+
return createRelayClient({
|
|
8
|
+
...options,
|
|
9
|
+
submissionStore: options.submissionStore ?? browserSubmissionStore()
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function browserSubmissionStore() {
|
|
13
|
+
let database;
|
|
14
|
+
function open() {
|
|
15
|
+
if (!globalThis.indexedDB || !globalThis.navigator?.locks) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
"This browser cannot safely save submissions. Use a browser with IndexedDB and Web Locks enabled."
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
return database ??= new Promise((resolve, reject) => {
|
|
21
|
+
const request = indexedDB.open("domino-relay-submissions", 1);
|
|
22
|
+
request.onupgradeneeded = () => request.result.createObjectStore("submissions");
|
|
23
|
+
request.onerror = () => reject(new Error("Could not open submission storage"));
|
|
24
|
+
request.onsuccess = () => resolve(request.result);
|
|
25
|
+
request.onblocked = () => reject(new Error("Close other Relay tabs and try again"));
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async function transact(key, value) {
|
|
29
|
+
const db = await open();
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const transaction = db.transaction(
|
|
32
|
+
"submissions",
|
|
33
|
+
value === void 0 ? "readonly" : "readwrite",
|
|
34
|
+
{ durability: "strict" }
|
|
35
|
+
);
|
|
36
|
+
const store = transaction.objectStore("submissions");
|
|
37
|
+
const request = value === void 0 ? store.get(key) : store.put(value, key);
|
|
38
|
+
transaction.oncomplete = () => resolve(request.result);
|
|
39
|
+
transaction.onerror = transaction.onabort = () => reject(
|
|
40
|
+
new Error(
|
|
41
|
+
"Could not save submission progress. Resume the saved submission when browser storage is available."
|
|
42
|
+
)
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
read: (key) => transact(key),
|
|
48
|
+
write: async (key, value) => {
|
|
49
|
+
await transact(key, value);
|
|
50
|
+
},
|
|
51
|
+
exclusive: async (key, task) => {
|
|
52
|
+
await open();
|
|
53
|
+
return navigator.locks.request(key, task);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export {
|
|
59
|
+
createBrowserRelayClient,
|
|
60
|
+
browserSubmissionStore
|
|
61
|
+
};
|