@domino-sdk/relay 0.14.0 → 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.
@@ -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-CU2y-wUM.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-CU2y-wUM.js';
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-CU2y-wUM.js';
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. */
package/dist/browser.js CHANGED
@@ -1,62 +1,11 @@
1
1
  import {
2
- createRelayClient
3
- } from "./chunk-YZJOZL4V.js";
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
+ };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import { errorSchema, QuizEvidence, Attempt, SubmitInput, MemberProgress, questDescriptionSchema, PublishedRelease, ReviewListOptions, MemberListOptions, ReleaseInput, beginHandoverSchema } from './schema.js';
3
3
  export { Decision, Entitlement, MemberPage, PhotoResult, PickupAvailability, QuestAvailability, QuestDescription, QuestPresentation, QuestSettingsInput, ReviewPage, Reward, Snapshot, TieredRewardDefinition, artifactSchema, attemptSchema, batchReleaseSchema, completionRecordSchema, configurePickupSchema, confirmHandoverSchema, createStockItemSchema, decisionSchema, entitlementSchema, eventSchema, evidenceSchema, identifier, integrationRewardSchema, mediaUrlSchema, memberListSchema, memberPageSchema, memberProgressSchema, photoResultSchema, pickupAllocationSchema, pickupAvailabilitySchema, pickupCatalogSchema, pickupPolicySchema, pickupSelectionSchema, pointsRewardSchema, prerequisiteSchema, publishedReleaseSchema, questAvailabilitySchema, questPresentationSchema, questSettingsInputSchema, quizAnswersSchema, quizEvidenceSchema, releaseSchema, reservationSchema, reviewItemSchema, reviewListSchema, reviewModeSchema, reviewPageSchema, rewardBundleSchema, rewardKey, rewardSchema, snapshotSchema, staffDecisionSchema, stockItemSchema, stockSchema, storedReviewModeSchema, submitSchema, templateSchema, tierRewardSchema, tieredRewardDefinitionSchema, triggerSchema } from './schema.js';
4
- import { r as referralAcceptSchema, L as LeaderboardQuery, w as walletChallengeInputSchema, i as walletProofSchema, j as AuthProvider } from './settings-CU2y-wUM.js';
5
- export { k as AccountConnection, B as Budget, D as DiscordMember, a as DiscordMessage, I as IntegrationProvider, l as LeaderboardDefinition, m as LeaderboardPage, O as Observation, P as ProjectIntegration, Q as QuizContent, R as ReferralDefinition, n as ResourceOption, q as ResourceSource, t as SettingField, u as SettingsValues, S as SolanaBalance, b as StreakPolicy, v as StreakProgress, y as TrackerDefinition, z as TrackerPreview, C as TrackerPreviewInput, E as TrackerQuery, T as TrackerReader, F as TrackerRecord, G as TrackerStatus, W as WalletConnection, X as XTweet, H as accountConnectionSchema, J as authProviderSchema, K as budgetSchema, M as communityTimeZoneSchema, N as compatibleSettingKinds, U as completionKeySchema, V as completionPolicySchema, c as customSource, d as defineLeaderboard, e as defineReferral, f as defineTracker, g as discord, Y as discordMemberInputSchema, Z as discordMemberSchema, _ as discordMessageInputSchema, $ as discordMessageSchema, a0 as discordReactionSchema, a1 as discordServerSchema, a2 as integrationProviderSchema, a3 as leaderboardArtifactSchema, a4 as leaderboardAuthoringSchema, a5 as leaderboardDefinitionSchema, a6 as leaderboardExclusionSchema, a7 as leaderboardGroupSchema, a8 as leaderboardPageSchema, a9 as leaderboardPreviewSchema, aa as leaderboardQuerySchema, ab as leaderboardRowSchema, ac as leaderboardWindowSchema, ad as missingResourceSettings, ae as observationInputSchema, af as observationReceiptSchema, ag as observationSchema, o as observationTriggerSchema, ah as parseSettings, p as pointLedgers, ai as pointsAccountSchema, aj as pointsEntrySchema, ak as pointsMutationSchema, al as pointsResultSchema, am as projectIntegrationSchema, an as publishedLeaderboardSchema, ao as publishedReferralSchema, ap as publishedTrackerSchema, aq as quizChoiceSchema, ar as quizContentSchema, as as quizQuestionSchema, at as quizQuestionsSchema, au as referralAccountSchema, av as referralArtifactSchema, aw as referralAuthoringSchema, ax as referralControlSchema, ay as referralDefinitionSchema, az as referralHistorySchema, aA as referralManagementSchema, aB as referralRelationshipSchema, aC as referralSummarySchema, aD as resourceOptionsSchema, aE as resourceRequestSchema, aF as resourceSourceSchema, aG as settingFieldSchema, s as settings, aH as settingsFieldsSchema, aI as settingsValuesSchema, aJ as solanaAddressSchema, aK as solanaBalanceSchema, h as streak, aL as streakPolicySchema, aM as streakProgressSchema, aN as trackerArtifactSchema, aO as trackerControlSchema, aP as trackerDefinitionSchema, aQ as trackerIngestResultSchema, aR as trackerIngestSchema, aS as trackerPageSchema, aT as trackerPreviewInputSchema, aU as trackerPreviewLimits, aV as trackerPreviewSchema, aW as trackerQuerySchema, aX as trackerRecordInputSchema, aY as trackerRecordSchema, aZ as trackerSourceSchema, a_ as trackerStatusSchema, a$ as trackerSummarySchema, b0 as walletChallengeSchema, b1 as walletConnectionSchema, x, b2 as xTweetSchema } from './settings-CU2y-wUM.js';
4
+ import { r as referralAcceptSchema, L as LeaderboardQuery, w as walletChallengeInputSchema, i as walletProofSchema, j as AuthProvider } from './settings-e0nHA0JA.js';
5
+ export { k as AccountConnection, B as Budget, D as DiscordMember, a as DiscordMessage, I as IntegrationProvider, n as LeaderboardDefinition, m as LeaderboardPage, O as Observation, P as ProjectIntegration, Q as QuizContent, R as ReferralDefinition, q as ResourceOption, t as ResourceSource, u as SettingField, v as SettingsValues, S as SolanaBalance, b as StreakPolicy, y as StreakProgress, z as TrackerDefinition, C as TrackerPreview, E as TrackerPreviewInput, F as TrackerQuery, T as TrackerReader, G as TrackerRecord, H as TrackerStatus, W as WalletConnection, X as XTweet, J as accountConnectionSchema, K as authProviderSchema, M as budgetSchema, N as communityTimeZoneSchema, U as compatibleSettingKinds, V as completionKeySchema, Y as completionPolicySchema, c as customSource, d as defineLeaderboard, e as defineReferral, f as defineTracker, g as discord, Z as discordMemberInputSchema, _ as discordMemberSchema, $ as discordMessageInputSchema, a0 as discordMessageSchema, a1 as discordReactionSchema, a2 as discordServerSchema, a3 as integrationProviderSchema, a4 as leaderboardArtifactSchema, a5 as leaderboardAuthoringSchema, a6 as leaderboardDefinitionSchema, a7 as leaderboardExclusionSchema, a8 as leaderboardGroupSchema, a9 as leaderboardPageSchema, aa as leaderboardPreviewSchema, ab as leaderboardQuerySchema, ac as leaderboardRowSchema, ad as leaderboardWindowSchema, ae as missingResourceSettings, af as observationInputSchema, ag as observationReceiptSchema, ah as observationSchema, o as observationTriggerSchema, ai as parseSettings, p as pointLedgers, aj as pointsAccountSchema, ak as pointsEntrySchema, al as pointsMutationSchema, am as pointsResultSchema, an as projectIntegrationSchema, ao as publishedLeaderboardSchema, ap as publishedReferralSchema, aq as publishedTrackerSchema, ar as quizChoiceSchema, as as quizContentSchema, at as quizQuestionSchema, au as quizQuestionsSchema, av as referralAccountSchema, aw as referralArtifactSchema, ax as referralAuthoringSchema, ay as referralControlSchema, az as referralDefinitionSchema, aA as referralHistorySchema, aB as referralManagementSchema, aC as referralRelationshipSchema, l as referralSummarySchema, aD as resourceOptionsSchema, aE as resourceRequestSchema, aF as resourceSourceSchema, aG as settingFieldSchema, s as settings, aH as settingsFieldsSchema, aI as settingsValuesSchema, aJ as solanaAddressSchema, aK as solanaBalanceSchema, h as streak, aL as streakPolicySchema, aM as streakProgressSchema, aN as trackerArtifactSchema, aO as trackerControlSchema, aP as trackerDefinitionSchema, aQ as trackerIngestResultSchema, aR as trackerIngestSchema, aS as trackerPageSchema, aT as trackerPreviewInputSchema, aU as trackerPreviewLimits, aV as trackerPreviewSchema, aW as trackerQuerySchema, aX as trackerRecordInputSchema, aY as trackerRecordSchema, aZ as trackerSourceSchema, a_ as trackerStatusSchema, a$ as trackerSummarySchema, b0 as walletChallengeSchema, b1 as walletConnectionSchema, x, b2 as xTweetSchema } from './settings-e0nHA0JA.js';
6
6
 
7
7
  declare class RelayError extends Error {
8
8
  readonly status: number;
@@ -24,5 +24,30 @@ declare function createParticipantBackend(options: {
24
24
  } | null>;
25
25
  fetch?: typeof fetch;
26
26
  }): (request: Request) => Promise<Response>;
27
+ /**
28
+ * The Worker variables `domino dev` sets for a locally running hosted app.
29
+ * Domino hosting sets none of them, so a deployed app uses `apiUrl` directly.
30
+ */
31
+ type HostedAppEnv = {
32
+ DOMINO_PARTICIPANT_API?: string;
33
+ DOMINO_PREVIEW_ORIGIN?: string;
34
+ DOMINO_LOCAL_API?: string;
35
+ DOMINO_DEV_CONTROL?: string;
36
+ };
37
+ /**
38
+ * The request as the participant sent it. The `domino dev` tunnel terminates
39
+ * HTTPS before the local Worker, so its URL is rebuilt on the preview origin.
40
+ * Call it first, before any routing, so every handler sees the public URL.
41
+ */
42
+ declare function hostedAppRequest(request: Request, env: HostedAppEnv): Request;
43
+ /**
44
+ * Answers the routes Domino owns in a hosted app: the participant proxy under
45
+ * `/relay/*`, and `domino dev` control routes under `/__domino/*`. Returns null
46
+ * for everything else, which belongs to the app.
47
+ */
48
+ declare function handleHostedApp(request: Request, env: HostedAppEnv, options: {
49
+ apiUrl: string;
50
+ fetch?: typeof fetch;
51
+ }): Promise<Response | null>;
27
52
 
28
- export { createParticipantBackend, proxyParticipant };
53
+ export { type HostedAppEnv, createParticipantBackend, handleHostedApp, hostedAppRequest, proxyParticipant };
@@ -133,7 +133,50 @@ function createParticipantBackend(options) {
133
133
  return new Response(response.body, { status: response.status, headers });
134
134
  };
135
135
  }
136
+ function hostedAppRequest(request, env) {
137
+ if (!env.DOMINO_PREVIEW_ORIGIN) {
138
+ return request;
139
+ }
140
+ const url = new URL(request.url);
141
+ return new Request(
142
+ new URL(url.pathname + url.search, env.DOMINO_PREVIEW_ORIGIN),
143
+ request
144
+ );
145
+ }
146
+ async function handleHostedApp(request, env, options) {
147
+ const url = new URL(request.url);
148
+ const send = options.fetch ?? fetch;
149
+ if (env.DOMINO_DEV_CONTROL && url.pathname.startsWith("/__domino/")) {
150
+ return send(
151
+ new Request(
152
+ new URL(url.pathname + url.search, env.DOMINO_DEV_CONTROL),
153
+ request
154
+ )
155
+ );
156
+ }
157
+ if (!url.pathname.startsWith("/relay/")) {
158
+ return null;
159
+ }
160
+ if (env.DOMINO_LOCAL_API) {
161
+ return send(
162
+ new Request(
163
+ new URL(
164
+ url.pathname.slice("/relay".length) + url.search,
165
+ env.DOMINO_LOCAL_API
166
+ ),
167
+ request
168
+ )
169
+ );
170
+ }
171
+ return proxyParticipant(request, {
172
+ baseUrl: env.DOMINO_PARTICIPANT_API || options.apiUrl,
173
+ fetch: send,
174
+ hosted: true
175
+ });
176
+ }
136
177
  export {
137
178
  createParticipantBackend,
179
+ handleHostedApp,
180
+ hostedAppRequest,
138
181
  proxyParticipant
139
182
  };