@civitai/blocks-react 0.37.0 → 0.39.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/hooks/useBuzzWorkflow.d.ts +133 -13
- package/dist/hooks/useBuzzWorkflow.d.ts.map +1 -1
- package/dist/hooks/useBuzzWorkflow.js +179 -18
- package/dist/hooks/useBuzzWorkflow.js.map +1 -1
- package/dist/hooks/useSaveImage.d.ts +47 -0
- package/dist/hooks/useSaveImage.d.ts.map +1 -0
- package/dist/hooks/useSaveImage.js +27 -0
- package/dist/hooks/useSaveImage.js.map +1 -0
- package/dist/hooks/useSharedStorage.d.ts +26 -25
- package/dist/hooks/useSharedStorage.d.ts.map +1 -1
- package/dist/hooks/useSharedStorage.js +31 -8
- package/dist/hooks/useSharedStorage.js.map +1 -1
- package/dist/hooks/useTip.d.ts +62 -0
- package/dist/hooks/useTip.d.ts.map +1 -0
- package/dist/hooks/useTip.js +97 -0
- package/dist/hooks/useTip.js.map +1 -0
- package/dist/hooks/useTipAllowance.d.ts +40 -0
- package/dist/hooks/useTipAllowance.d.ts.map +1 -0
- package/dist/hooks/useTipAllowance.js +90 -0
- package/dist/hooks/useTipAllowance.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/iframeTransport.d.ts +29 -0
- package/dist/internal/iframeTransport.d.ts.map +1 -1
- package/dist/internal/iframeTransport.js +113 -1
- package/dist/internal/iframeTransport.js.map +1 -1
- package/dist/internal/mockHost.d.ts.map +1 -1
- package/dist/internal/mockHost.js +92 -3
- package/dist/internal/mockHost.js.map +1 -1
- package/dist/internal/transport.d.ts +9 -0
- package/dist/internal/transport.d.ts.map +1 -1
- package/dist/internal/transport.js +16 -0
- package/dist/internal/transport.js.map +1 -1
- package/dist/internal/validate.d.ts +20 -0
- package/dist/internal/validate.d.ts.map +1 -1
- package/dist/internal/validate.js +83 -0
- package/dist/internal/validate.js.map +1 -1
- package/package.json +5 -5
|
@@ -26,6 +26,24 @@ import { sendTypedRequest } from '../internal/transport.js';
|
|
|
26
26
|
* await shared.unvote(key);
|
|
27
27
|
* await shared.withdraw(key); // remove my own entry
|
|
28
28
|
*/
|
|
29
|
+
/**
|
|
30
|
+
* Rehydrate one wire item (ISO date strings) into a public {@link SharedListItem}
|
|
31
|
+
* (`Date`s). `viewerVoted` defaults to `false` when a host predating the field
|
|
32
|
+
* omits it, so a new block on an old host degrades to today's behavior. Shared by
|
|
33
|
+
* {@link UseSharedStorage.list} and {@link UseSharedStorage.get} so the two stay
|
|
34
|
+
* in lockstep.
|
|
35
|
+
*/
|
|
36
|
+
function rehydrateSharedItem(item) {
|
|
37
|
+
return {
|
|
38
|
+
key: item.key,
|
|
39
|
+
authorUserId: item.authorUserId,
|
|
40
|
+
value: item.value,
|
|
41
|
+
count: item.count,
|
|
42
|
+
createdAt: new Date(item.createdAt),
|
|
43
|
+
updatedAt: new Date(item.updatedAt),
|
|
44
|
+
viewerVoted: item.viewerVoted ?? false,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
29
47
|
export function useSharedStorage() {
|
|
30
48
|
return useMemo(() => {
|
|
31
49
|
const transport = getTransport();
|
|
@@ -42,17 +60,22 @@ export function useSharedStorage() {
|
|
|
42
60
|
if (result.error)
|
|
43
61
|
throw new Error(result.error);
|
|
44
62
|
return {
|
|
45
|
-
items: result.items.map(
|
|
46
|
-
key: item.key,
|
|
47
|
-
authorUserId: item.authorUserId,
|
|
48
|
-
value: item.value,
|
|
49
|
-
count: item.count,
|
|
50
|
-
createdAt: new Date(item.createdAt),
|
|
51
|
-
updatedAt: new Date(item.updatedAt),
|
|
52
|
-
})),
|
|
63
|
+
items: result.items.map(rehydrateSharedItem),
|
|
53
64
|
nextCursor: result.nextCursor,
|
|
54
65
|
};
|
|
55
66
|
},
|
|
67
|
+
async get(key) {
|
|
68
|
+
const result = await sendTypedRequest(transport, { type: 'SHARED_GET', payload: { key } }, 'SHARED_GET_RESULT');
|
|
69
|
+
if (result.error)
|
|
70
|
+
throw new Error(result.error);
|
|
71
|
+
return result.item ? rehydrateSharedItem(result.item) : null;
|
|
72
|
+
},
|
|
73
|
+
async report(key, reason) {
|
|
74
|
+
const result = await sendTypedRequest(transport, { type: 'SHARED_REPORT', payload: { key, reason } }, 'SHARED_REPORT_RESULT');
|
|
75
|
+
if (!result.ok || result.error) {
|
|
76
|
+
throw new Error(result.error ?? 'shared report failed');
|
|
77
|
+
}
|
|
78
|
+
},
|
|
56
79
|
async getCount(key) {
|
|
57
80
|
const result = await sendTypedRequest(transport, { type: 'SHARED_GET_COUNT', payload: { key } }, 'SHARED_GET_COUNT_RESULT');
|
|
58
81
|
if (result.error)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSharedStorage.js","sourceRoot":"","sources":["../../src/hooks/useSharedStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"useSharedStorage.js","sourceRoot":"","sources":["../../src/hooks/useSharedStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** The tip target + amount. `entityType`/`entityId` are optional context. */
|
|
2
|
+
export interface TipParams {
|
|
3
|
+
toUserId: number;
|
|
4
|
+
amount: number;
|
|
5
|
+
entityType?: 'Image' | 'Collection' | 'User';
|
|
6
|
+
entityId?: number;
|
|
7
|
+
}
|
|
8
|
+
/** Optional per-tip controls. */
|
|
9
|
+
export interface TipOptions {
|
|
10
|
+
/**
|
|
11
|
+
* A STABLE idempotency key for this logical tip. Reuse the SAME value when
|
|
12
|
+
* RETRYING a tip whose response was lost (timeout / network drop) so the host
|
|
13
|
+
* collapses it to ONE transfer instead of DOUBLE-TIPPING. Omit → the hook mints
|
|
14
|
+
* a fresh key per `tip()` call (each call is a new logical tip).
|
|
15
|
+
*/
|
|
16
|
+
idempotencyKey?: string;
|
|
17
|
+
}
|
|
18
|
+
/** The successful tip echo the endpoint returns. */
|
|
19
|
+
export interface TipResult {
|
|
20
|
+
ok: true;
|
|
21
|
+
tip: {
|
|
22
|
+
toUserId: number;
|
|
23
|
+
amount: number;
|
|
24
|
+
entityType: string | null;
|
|
25
|
+
entityId: number | null;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface UseTip {
|
|
29
|
+
/**
|
|
30
|
+
* Send a Buzz tip from the viewer to `toUserId`. Resolves with the server's
|
|
31
|
+
* echo on success; REJECTS with an `Error` (carrying the server message) on any
|
|
32
|
+
* 4xx/5xx — including a `409` if a tip with the same idempotency key is still in
|
|
33
|
+
* flight. A lost-response retry with the SAME `options.idempotencyKey` is
|
|
34
|
+
* collapsed server-side to the first result (no double-tip).
|
|
35
|
+
*/
|
|
36
|
+
tip: (params: TipParams, options?: TipOptions) => Promise<TipResult>;
|
|
37
|
+
/** `true` while a tip POST is in flight. */
|
|
38
|
+
loading: boolean;
|
|
39
|
+
/** The last tip's failure, or `null`. Cleared at the start of the next `tip()`. */
|
|
40
|
+
error: Error | null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Send a Buzz TIP from the viewer through the block-token-gated
|
|
44
|
+
* `POST /api/v1/blocks/tip` REST endpoint (scope `social:tip:self`).
|
|
45
|
+
*
|
|
46
|
+
* Direct-fetch (bypasses the postMessage bridge) against the VALIDATED host
|
|
47
|
+
* origin (`useHostOrigin()`) with the block bearer token (`useBlockToken().raw`)
|
|
48
|
+
* — the same security-reviewed pattern as {@link useGenerationResources}. The
|
|
49
|
+
* SENDER is always the token subject (server self-binds it); the block never
|
|
50
|
+
* supplies a `fromUserId`.
|
|
51
|
+
*
|
|
52
|
+
* IDEMPOTENCY: pass a stable `options.idempotencyKey` to make a retry-after-
|
|
53
|
+
* timeout safe (the server replays the first terminal result). Omitting it mints
|
|
54
|
+
* a fresh key per call, so each call is a distinct logical tip.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* const { tip, loading, error } = useTip();
|
|
58
|
+
* const key = React.useId(); // stable across this component's retries
|
|
59
|
+
* await tip({ toUserId: 123, amount: 50, entityType: 'Image', entityId: 99 }, { idempotencyKey: key });
|
|
60
|
+
*/
|
|
61
|
+
export declare function useTip(): UseTip;
|
|
62
|
+
//# sourceMappingURL=useTip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTip.d.ts","sourceRoot":"","sources":["../../src/hooks/useTip.ts"],"names":[],"mappings":"AAaA,6EAA6E;AAC7E,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oDAAoD;AACpD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,MAAM;IACrB;;;;;;OAMG;IACH,GAAG,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACrE,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,mFAAmF;IACnF,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAwE/B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { useHostOrigin } from './useHostOrigin.js';
|
|
3
|
+
import { useBlockToken } from './useBlockToken.js';
|
|
4
|
+
import { generateIdempotencyKey } from '../internal/transport.js';
|
|
5
|
+
/**
|
|
6
|
+
* Backstop timeout for the direct REST tip POST. Like {@link useGenerationResources}
|
|
7
|
+
* (and unlike the postMessage hooks), this talks to the HTTP API directly, so it
|
|
8
|
+
* needs its OWN bound — otherwise a hung request never rejects.
|
|
9
|
+
*/
|
|
10
|
+
const TIP_REQUEST_TIMEOUT_MS = 30_000;
|
|
11
|
+
/**
|
|
12
|
+
* Send a Buzz TIP from the viewer through the block-token-gated
|
|
13
|
+
* `POST /api/v1/blocks/tip` REST endpoint (scope `social:tip:self`).
|
|
14
|
+
*
|
|
15
|
+
* Direct-fetch (bypasses the postMessage bridge) against the VALIDATED host
|
|
16
|
+
* origin (`useHostOrigin()`) with the block bearer token (`useBlockToken().raw`)
|
|
17
|
+
* — the same security-reviewed pattern as {@link useGenerationResources}. The
|
|
18
|
+
* SENDER is always the token subject (server self-binds it); the block never
|
|
19
|
+
* supplies a `fromUserId`.
|
|
20
|
+
*
|
|
21
|
+
* IDEMPOTENCY: pass a stable `options.idempotencyKey` to make a retry-after-
|
|
22
|
+
* timeout safe (the server replays the first terminal result). Omitting it mints
|
|
23
|
+
* a fresh key per call, so each call is a distinct logical tip.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const { tip, loading, error } = useTip();
|
|
27
|
+
* const key = React.useId(); // stable across this component's retries
|
|
28
|
+
* await tip({ toUserId: 123, amount: 50, entityType: 'Image', entityId: 99 }, { idempotencyKey: key });
|
|
29
|
+
*/
|
|
30
|
+
export function useTip() {
|
|
31
|
+
const host = useHostOrigin();
|
|
32
|
+
const { raw } = useBlockToken();
|
|
33
|
+
const [loading, setLoading] = useState(false);
|
|
34
|
+
const [error, setError] = useState(null);
|
|
35
|
+
const mountedRef = useRef(true);
|
|
36
|
+
const inFlight = useRef(new Set());
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
mountedRef.current = true;
|
|
39
|
+
const controllers = inFlight.current;
|
|
40
|
+
return () => {
|
|
41
|
+
mountedRef.current = false;
|
|
42
|
+
for (const c of controllers)
|
|
43
|
+
c.abort();
|
|
44
|
+
controllers.clear();
|
|
45
|
+
};
|
|
46
|
+
}, []);
|
|
47
|
+
const tip = useCallback(async (params, options) => {
|
|
48
|
+
if (!host) {
|
|
49
|
+
throw new Error('useTip: host origin not established yet (wait for BLOCK_INIT).');
|
|
50
|
+
}
|
|
51
|
+
if (mountedRef.current) {
|
|
52
|
+
setLoading(true);
|
|
53
|
+
setError(null);
|
|
54
|
+
}
|
|
55
|
+
const idempotencyKey = options?.idempotencyKey ?? generateIdempotencyKey();
|
|
56
|
+
const controller = new AbortController();
|
|
57
|
+
inFlight.current.add(controller);
|
|
58
|
+
const timeoutId = setTimeout(() => controller.abort(), TIP_REQUEST_TIMEOUT_MS);
|
|
59
|
+
try {
|
|
60
|
+
const res = await fetch(`${host}/api/v1/blocks/tip`, {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers: { Authorization: `Bearer ${raw}`, 'Content-Type': 'application/json' },
|
|
63
|
+
body: JSON.stringify({
|
|
64
|
+
toUserId: params.toUserId,
|
|
65
|
+
amount: params.amount,
|
|
66
|
+
...(params.entityType ? { entityType: params.entityType } : {}),
|
|
67
|
+
...(params.entityId != null ? { entityId: params.entityId } : {}),
|
|
68
|
+
idempotencyKey,
|
|
69
|
+
}),
|
|
70
|
+
signal: controller.signal,
|
|
71
|
+
});
|
|
72
|
+
const bodyJson = (await res.json().catch(() => null));
|
|
73
|
+
if (!res.ok) {
|
|
74
|
+
throw new Error(bodyJson?.error ?? `tip request failed (${res.status})`);
|
|
75
|
+
}
|
|
76
|
+
return bodyJson;
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
const e = controller.signal.aborted && !(err instanceof Error && err.message.startsWith('tip'))
|
|
80
|
+
? new Error(`useTip: request aborted (timed out after ${TIP_REQUEST_TIMEOUT_MS}ms or the hook unmounted).`)
|
|
81
|
+
: err instanceof Error
|
|
82
|
+
? err
|
|
83
|
+
: new Error(String(err));
|
|
84
|
+
if (mountedRef.current)
|
|
85
|
+
setError(e);
|
|
86
|
+
throw e;
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
clearTimeout(timeoutId);
|
|
90
|
+
inFlight.current.delete(controller);
|
|
91
|
+
if (mountedRef.current)
|
|
92
|
+
setLoading(false);
|
|
93
|
+
}
|
|
94
|
+
}, [host, raw]);
|
|
95
|
+
return { tip, loading, error };
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=useTip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTip.js","sourceRoot":"","sources":["../../src/hooks/useTip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** The viewer's daily tip allowance, in Buzz. */
|
|
2
|
+
export interface TipAllowance {
|
|
3
|
+
/** The per-user daily tip ceiling. */
|
|
4
|
+
cap: number;
|
|
5
|
+
/**
|
|
6
|
+
* Net Buzz reserved toward tips today (reservation-based, so it can briefly
|
|
7
|
+
* over-count between a reserve and its refund — the safe direction).
|
|
8
|
+
*/
|
|
9
|
+
spent: number;
|
|
10
|
+
/** `cap - spent`, clamped at 0 — the amount the viewer may still tip today. */
|
|
11
|
+
remaining: number;
|
|
12
|
+
}
|
|
13
|
+
export interface UseTipAllowance {
|
|
14
|
+
/** The current allowance, or `null` until the first successful fetch. */
|
|
15
|
+
allowance: TipAllowance | null;
|
|
16
|
+
/** `true` while a fetch (initial or `refetch`) is in flight. */
|
|
17
|
+
loading: boolean;
|
|
18
|
+
/** The last fetch's failure, or `null`. Cleared at the start of the next fetch. */
|
|
19
|
+
error: Error | null;
|
|
20
|
+
/** Re-read the allowance (e.g. after the viewer tips). */
|
|
21
|
+
refetch: () => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read the viewer's REAL remaining daily tip allowance `{ cap, spent, remaining }`
|
|
25
|
+
* through the block-token-gated `GET /api/v1/blocks/tip-allowance` REST endpoint
|
|
26
|
+
* (scope `social:tip:self` — the SAME scope the app already holds to tip, so no
|
|
27
|
+
* manifest change). Direct-fetch against the validated host origin with the block
|
|
28
|
+
* bearer token, the same pattern as {@link useGenerationResources}.
|
|
29
|
+
*
|
|
30
|
+
* Lets a block show a genuinely-tracked remaining allowance and disable the tip
|
|
31
|
+
* button at the true ceiling — instead of a dead client-side full-cap guess
|
|
32
|
+
* (`localStorage` is inert in the opaque-origin sandbox). Fetches once on mount
|
|
33
|
+
* and exposes `refetch` (call it after a successful `useTip().tip(...)`).
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* const { allowance, refetch } = useTipAllowance();
|
|
37
|
+
* // allowance?.remaining — Buzz the viewer may still tip today
|
|
38
|
+
*/
|
|
39
|
+
export declare function useTipAllowance(): UseTipAllowance;
|
|
40
|
+
//# sourceMappingURL=useTipAllowance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTipAllowance.d.ts","sourceRoot":"","sources":["../../src/hooks/useTipAllowance.ts"],"names":[],"mappings":"AAWA,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,mFAAmF;IACnF,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,IAAI,eAAe,CAsEjD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { useHostOrigin } from './useHostOrigin.js';
|
|
3
|
+
import { useBlockToken } from './useBlockToken.js';
|
|
4
|
+
/**
|
|
5
|
+
* Backstop timeout for the direct REST allowance GET (see {@link useTip} /
|
|
6
|
+
* {@link useGenerationResources} for why direct-fetch hooks need their own bound).
|
|
7
|
+
*/
|
|
8
|
+
const TIP_ALLOWANCE_TIMEOUT_MS = 30_000;
|
|
9
|
+
/**
|
|
10
|
+
* Read the viewer's REAL remaining daily tip allowance `{ cap, spent, remaining }`
|
|
11
|
+
* through the block-token-gated `GET /api/v1/blocks/tip-allowance` REST endpoint
|
|
12
|
+
* (scope `social:tip:self` — the SAME scope the app already holds to tip, so no
|
|
13
|
+
* manifest change). Direct-fetch against the validated host origin with the block
|
|
14
|
+
* bearer token, the same pattern as {@link useGenerationResources}.
|
|
15
|
+
*
|
|
16
|
+
* Lets a block show a genuinely-tracked remaining allowance and disable the tip
|
|
17
|
+
* button at the true ceiling — instead of a dead client-side full-cap guess
|
|
18
|
+
* (`localStorage` is inert in the opaque-origin sandbox). Fetches once on mount
|
|
19
|
+
* and exposes `refetch` (call it after a successful `useTip().tip(...)`).
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const { allowance, refetch } = useTipAllowance();
|
|
23
|
+
* // allowance?.remaining — Buzz the viewer may still tip today
|
|
24
|
+
*/
|
|
25
|
+
export function useTipAllowance() {
|
|
26
|
+
const host = useHostOrigin();
|
|
27
|
+
const { raw } = useBlockToken();
|
|
28
|
+
const [allowance, setAllowance] = useState(null);
|
|
29
|
+
const [loading, setLoading] = useState(true);
|
|
30
|
+
const [error, setError] = useState(null);
|
|
31
|
+
const mountedRef = useRef(true);
|
|
32
|
+
const inFlight = useRef(new Set());
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
mountedRef.current = true;
|
|
35
|
+
const controllers = inFlight.current;
|
|
36
|
+
return () => {
|
|
37
|
+
mountedRef.current = false;
|
|
38
|
+
for (const c of controllers)
|
|
39
|
+
c.abort();
|
|
40
|
+
controllers.clear();
|
|
41
|
+
};
|
|
42
|
+
}, []);
|
|
43
|
+
const refetch = useCallback(() => {
|
|
44
|
+
// Wait for the host origin (established at BLOCK_INIT) before the first fetch.
|
|
45
|
+
if (!host)
|
|
46
|
+
return;
|
|
47
|
+
if (mountedRef.current) {
|
|
48
|
+
setLoading(true);
|
|
49
|
+
setError(null);
|
|
50
|
+
}
|
|
51
|
+
const controller = new AbortController();
|
|
52
|
+
inFlight.current.add(controller);
|
|
53
|
+
const timeoutId = setTimeout(() => controller.abort(), TIP_ALLOWANCE_TIMEOUT_MS);
|
|
54
|
+
fetch(`${host}/api/v1/blocks/tip-allowance`, {
|
|
55
|
+
headers: { Authorization: `Bearer ${raw}` },
|
|
56
|
+
signal: controller.signal,
|
|
57
|
+
})
|
|
58
|
+
.then(async (res) => {
|
|
59
|
+
const body = (await res.json().catch(() => null));
|
|
60
|
+
if (!mountedRef.current)
|
|
61
|
+
return;
|
|
62
|
+
if (!res.ok || body == null || typeof body.remaining !== 'number') {
|
|
63
|
+
setError(new Error(body?.error ?? `tip-allowance request failed (${res.status})`));
|
|
64
|
+
setLoading(false);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
setAllowance({ cap: body.cap ?? 0, spent: body.spent ?? 0, remaining: body.remaining });
|
|
68
|
+
setLoading(false);
|
|
69
|
+
})
|
|
70
|
+
.catch((err) => {
|
|
71
|
+
if (!mountedRef.current)
|
|
72
|
+
return;
|
|
73
|
+
setError(controller.signal.aborted
|
|
74
|
+
? new Error(`useTipAllowance: request aborted (timed out after ${TIP_ALLOWANCE_TIMEOUT_MS}ms or the hook unmounted).`)
|
|
75
|
+
: err instanceof Error
|
|
76
|
+
? err
|
|
77
|
+
: new Error(String(err)));
|
|
78
|
+
setLoading(false);
|
|
79
|
+
})
|
|
80
|
+
.finally(() => {
|
|
81
|
+
clearTimeout(timeoutId);
|
|
82
|
+
inFlight.current.delete(controller);
|
|
83
|
+
});
|
|
84
|
+
}, [host, raw]);
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
refetch();
|
|
87
|
+
}, [refetch]);
|
|
88
|
+
return { allowance, loading, error, refetch };
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=useTipAllowance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTipAllowance.js","sourceRoot":"","sources":["../../src/hooks/useTipAllowance.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,7 +18,12 @@ export { useBlockContext } from './hooks/useBlockContext.js';
|
|
|
18
18
|
export { useBlockSettings } from './hooks/useBlockSettings.js';
|
|
19
19
|
export { useBlockToken } from './hooks/useBlockToken.js';
|
|
20
20
|
export { useHostOrigin } from './hooks/useHostOrigin.js';
|
|
21
|
-
export { useBuzzWorkflow } from './hooks/useBuzzWorkflow.js';
|
|
21
|
+
export { DEFAULT_WATCH_WAIT_SECONDS, useBuzzWorkflow } from './hooks/useBuzzWorkflow.js';
|
|
22
|
+
export type { SubmitWorkflowOptions, WatchWorkflowOptions } from './hooks/useBuzzWorkflow.js';
|
|
23
|
+
export { useTip } from './hooks/useTip.js';
|
|
24
|
+
export type { TipParams, TipOptions, TipResult, UseTip } from './hooks/useTip.js';
|
|
25
|
+
export { useTipAllowance } from './hooks/useTipAllowance.js';
|
|
26
|
+
export type { TipAllowance, UseTipAllowance } from './hooks/useTipAllowance.js';
|
|
22
27
|
export { useBlockResize } from './hooks/useBlockResize.js';
|
|
23
28
|
export { useBuzzPurchase } from './hooks/useBuzzPurchase.js';
|
|
24
29
|
export { useBuzzBalance } from './hooks/useBuzzBalance.js';
|
|
@@ -39,6 +44,8 @@ export { usePublishGenerationOutputs } from './hooks/usePublishGenerationOutputs
|
|
|
39
44
|
export type { UsePublishGenerationOutputs } from './hooks/usePublishGenerationOutputs.js';
|
|
40
45
|
export { useGatedImages } from './hooks/useGatedImages.js';
|
|
41
46
|
export type { UseGatedImages } from './hooks/useGatedImages.js';
|
|
47
|
+
export { useSaveImage } from './hooks/useSaveImage.js';
|
|
48
|
+
export type { UseSaveImage, SaveImageInput } from './hooks/useSaveImage.js';
|
|
42
49
|
export type { BlockBuzzTransaction, BlockBuzzAccount, BlockDailyCompensationResource, BlockWildcardPack, BlockWildcardPackErrorCode, AppWorkflow, AppWorkflowImage, AppWorkflowsParams, BlockGatedImage, } from '@civitai/app-sdk/blocks';
|
|
43
50
|
export { useCheckpointPicker } from './hooks/useCheckpointPicker.js';
|
|
44
51
|
export { useResourcePicker } from './hooks/useResourcePicker.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,9 @@ export { useBlockContext } from './hooks/useBlockContext.js';
|
|
|
22
22
|
export { useBlockSettings } from './hooks/useBlockSettings.js';
|
|
23
23
|
export { useBlockToken } from './hooks/useBlockToken.js';
|
|
24
24
|
export { useHostOrigin } from './hooks/useHostOrigin.js';
|
|
25
|
-
export { useBuzzWorkflow } from './hooks/useBuzzWorkflow.js';
|
|
25
|
+
export { DEFAULT_WATCH_WAIT_SECONDS, useBuzzWorkflow } from './hooks/useBuzzWorkflow.js';
|
|
26
|
+
export { useTip } from './hooks/useTip.js';
|
|
27
|
+
export { useTipAllowance } from './hooks/useTipAllowance.js';
|
|
26
28
|
export { useBlockResize } from './hooks/useBlockResize.js';
|
|
27
29
|
export { useBuzzPurchase } from './hooks/useBuzzPurchase.js';
|
|
28
30
|
export { useBuzzBalance } from './hooks/useBuzzBalance.js';
|
|
@@ -34,6 +36,7 @@ export { useWildcardPack, WildcardPackError } from './hooks/useWildcardPack.js';
|
|
|
34
36
|
export { useAppWorkflows } from './hooks/useAppWorkflows.js';
|
|
35
37
|
export { usePublishGenerationOutputs } from './hooks/usePublishGenerationOutputs.js';
|
|
36
38
|
export { useGatedImages } from './hooks/useGatedImages.js';
|
|
39
|
+
export { useSaveImage } from './hooks/useSaveImage.js';
|
|
37
40
|
export { useCheckpointPicker } from './hooks/useCheckpointPicker.js';
|
|
38
41
|
export { useResourcePicker } from './hooks/useResourcePicker.js';
|
|
39
42
|
export { useImageUpload } from './hooks/useImageUpload.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,mEAAmE;AACnE,yEAAyE;AACzE,6EAA6E;AAC7E,+EAA+E;AAC/E,yEAAyE;AACzE,OAAO,+BAA+B,CAAC;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAG3F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAO3D,QAAQ;AACR,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,mEAAmE;AACnE,yEAAyE;AACzE,6EAA6E;AAC7E,+EAA+E;AAC/E,yEAAyE;AACzE,OAAO,+BAA+B,CAAC;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAG3F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAO3D,QAAQ;AACR,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAErF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAavD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -21,6 +21,13 @@ export interface IframeTransportOptions {
|
|
|
21
21
|
*/
|
|
22
22
|
export declare class IframeTransport implements BlockTransport {
|
|
23
23
|
private readonly originMatcher;
|
|
24
|
+
/**
|
|
25
|
+
* The EXACT (non-wildcard) entries of `allowedParentOrigins`, usable as a
|
|
26
|
+
* `postMessage` `targetOrigin`. A wildcard entry (`https://*.civitaic.com`)
|
|
27
|
+
* is not a concrete origin and cannot be a target, so it is excluded here —
|
|
28
|
+
* see {@link announceReady} for what happens when nothing exact remains.
|
|
29
|
+
*/
|
|
30
|
+
private readonly exactAllowedOrigins;
|
|
24
31
|
private readonly window;
|
|
25
32
|
private snapshot;
|
|
26
33
|
private readonly listeners;
|
|
@@ -42,6 +49,28 @@ export declare class IframeTransport implements BlockTransport {
|
|
|
42
49
|
private initResolved;
|
|
43
50
|
private readonly messageListener;
|
|
44
51
|
constructor(opts: IframeTransportOptions);
|
|
52
|
+
/**
|
|
53
|
+
* Read the host's URL-fragment fast path into the pre-init snapshot.
|
|
54
|
+
*
|
|
55
|
+
* Silent no-op when the fragment is absent, belongs to the block app itself,
|
|
56
|
+
* or is a version we do not understand — in every one of those cases the
|
|
57
|
+
* block falls back to waiting for `BLOCK_INIT`, i.e. today's behaviour.
|
|
58
|
+
*/
|
|
59
|
+
private seedFromFragment;
|
|
60
|
+
/**
|
|
61
|
+
* Post the contentless `BLOCK_HELLO` announce to the parent.
|
|
62
|
+
*
|
|
63
|
+
* Targeting: the announce goes out BEFORE any `BLOCK_INIT` has been
|
|
64
|
+
* validated, so `parentOrigin` is still null and we cannot use the normal
|
|
65
|
+
* `postToParent` path. We therefore aim at each EXACT entry of the configured
|
|
66
|
+
* allowlist — the set of origins this block was built to trust — rather than
|
|
67
|
+
* broadcasting. Only when the allowlist is wildcard-only (no exact origin can
|
|
68
|
+
* be derived, e.g. a preview-subdomain-only build) do we fall back to `'*'`,
|
|
69
|
+
* which is acceptable solely because the message carries no payload: it
|
|
70
|
+
* discloses nothing a framing page does not already know from the URL it
|
|
71
|
+
* chose to frame.
|
|
72
|
+
*/
|
|
73
|
+
private announceReady;
|
|
45
74
|
getSnapshot(): BlockSnapshot;
|
|
46
75
|
/**
|
|
47
76
|
* The validated parent origin — `null` until `BLOCK_INIT` lands.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframeTransport.d.ts","sourceRoot":"","sources":["../../src/internal/iframeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"iframeTransport.d.ts","sourceRoot":"","sources":["../../src/internal/iframeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAEzB,KAAK,wBAAwB,EAC9B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AASxB,MAAM,WAAW,sBAAsB;IACrC;;;;;;;OAOG;IACH,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,cAAc;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoB;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,yEAAyE;IACzE,OAAO,CAAC,YAAY,CAAuB;IAE3C,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAE7D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsD;IAEpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;gBAEpD,IAAI,EAAE,sBAAsB;IA6DxC;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAgDxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa;IAqBrB,WAAW,IAAI,aAAa;IAI5B;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO3C,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIxC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAIhD,WAAW,CACT,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,wBAAwB,EACtC,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAChC,OAAO,CAAC,OAAO,CAAC;IAmBnB,SAAS,CACP,IAAI,EAAE,wBAAwB,EAC9B,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAClC,MAAM,IAAI;IAeb,uDAAuD;IACvD,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,aAAa;IA2GrB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,IAAI;CAGb"}
|