New source found from dndbeyond.com

This commit is contained in:
2026-07-08 01:00:09 -07:00
parent 9a983a6d7b
commit dcefa0d2f2
2865 changed files with 222467 additions and 49053 deletions
@@ -0,0 +1,63 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { AuthUtils } from '@dndbeyond/authentication-lib-js';
import { isValidGameId } from '@dndbeyond/message-broker-lib';
import { useEffect, useMemo } from 'react';
import { useAwaitMessageBroker } from '../useAwaitMessageBroker';
export const useActiveCampaign = (authUrl, baseUrl, callback) => {
const mb = useAwaitMessageBroker();
const getShortTermToken = useMemo(() => AuthUtils.makeGetShortTermToken({ authUrl }), [authUrl]);
useEffect(() => {
if (process.env.NODE_ENV === 'test' ||
!(mb && mb.gameId && isValidGameId(mb.gameId))) {
return;
}
const controller = new AbortController();
const { signal } = controller;
(() => __awaiter(void 0, void 0, void 0, function* () {
let stt = undefined;
let response = undefined;
let data = undefined;
try {
stt = yield getShortTermToken();
}
catch (error) {
console.error('Failed to get stt', error);
return;
}
try {
response = yield fetch(`${baseUrl}/campaigns/v1/details/${mb.gameId}`, {
signal,
headers: {
Authorization: `Bearer ${stt}`,
},
});
}
catch (error) {
console.error('Failed to fetch', error);
return;
}
try {
({ data } = yield response.json());
}
catch (error) {
console.error('Failed to parse json', error);
return;
}
if (!signal.aborted && data !== undefined) {
callback(data);
}
}))();
return () => {
controller.abort();
};
}, [baseUrl, callback, getShortTermToken, mb, mb === null || mb === void 0 ? void 0 : mb.gameId]);
};
//# sourceMappingURL=useActiveCampaign.js.map
@@ -0,0 +1,63 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { AuthUtils } from '@dndbeyond/authentication-lib-js';
import { isValidGameId } from '@dndbeyond/message-broker-lib';
import { useEffect, useMemo } from 'react';
import { useAwaitMessageBroker } from '../useAwaitMessageBroker';
export const useActiveCharacters = (authUrl, baseUrl, callback) => {
const mb = useAwaitMessageBroker();
const getShortTermToken = useMemo(() => AuthUtils.makeGetShortTermToken({ authUrl }), [authUrl]);
useEffect(() => {
if (process.env.NODE_ENV === 'test' ||
!(mb && mb.gameId && isValidGameId(mb.gameId))) {
return;
}
const controller = new AbortController();
const { signal } = controller;
(() => __awaiter(void 0, void 0, void 0, function* () {
let stt = undefined;
let response = undefined;
let data = undefined;
try {
stt = yield getShortTermToken();
}
catch (error) {
console.error('Failed to get stt', error);
return;
}
try {
response = yield fetch(`${baseUrl}/campaigns/v1/${mb.gameId}/characters`, {
signal,
headers: {
Authorization: `Bearer ${stt}`,
},
});
}
catch (error) {
console.error('Failed to fetch', error);
return;
}
try {
({ data } = yield response.json());
}
catch (error) {
console.error('Failed to parse json', error);
return;
}
if (!signal.aborted && data !== undefined) {
callback(data);
}
}))();
return () => {
controller.abort();
};
}, [baseUrl, callback, getShortTermToken, mb, mb === null || mb === void 0 ? void 0 : mb.gameId]);
};
//# sourceMappingURL=useActiveCharacters.js.map
@@ -0,0 +1,63 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { AuthUtils } from '@dndbeyond/authentication-lib-js';
import { isValidGameId } from '@dndbeyond/message-broker-lib';
import { useEffect, useMemo } from 'react';
import { useAwaitMessageBroker } from '../useAwaitMessageBroker';
export const useActivePlayers = (authUrl, baseUrl, callback) => {
const mb = useAwaitMessageBroker();
const getShortTermToken = useMemo(() => AuthUtils.makeGetShortTermToken({ authUrl }), [authUrl]);
useEffect(() => {
if (process.env.NODE_ENV === 'test' ||
!(mb && mb.gameId && isValidGameId(mb.gameId))) {
return;
}
const controller = new AbortController();
const { signal } = controller;
(() => __awaiter(void 0, void 0, void 0, function* () {
let stt = undefined;
let response = undefined;
let data = undefined;
try {
stt = yield getShortTermToken();
}
catch (error) {
console.error('Failed to get stt', error);
return;
}
try {
response = yield fetch(`${baseUrl}/campaigns/v1/details/${mb.gameId}`, {
signal,
headers: {
Authorization: `Bearer ${stt}`,
},
});
}
catch (error) {
console.error('Failed to fetch', error);
return;
}
try {
({ data } = yield response.json());
}
catch (error) {
console.error('Failed to parse json', error);
return;
}
if (!signal.aborted && data !== undefined) {
callback(data);
}
}))();
return () => {
controller.abort();
};
}, [baseUrl, callback, getShortTermToken, mb, mb === null || mb === void 0 ? void 0 : mb.gameId]);
};
//# sourceMappingURL=useActivePlayers.js.map
@@ -0,0 +1,28 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { getMessageBroker } from '@dndbeyond/message-broker-lib';
import { useEffect, useState } from 'react';
export const useAwaitMessageBroker = () => {
const [mb, setMb] = useState();
useEffect(() => {
(() => __awaiter(void 0, void 0, void 0, function* () {
try {
setMb(yield getMessageBroker());
}
catch (error) {
if (process.env.NODE_ENV !== 'test') {
console.error(error.message);
}
}
}))();
}, []);
return mb;
};
//# sourceMappingURL=useAwaitMessageBroker.js.map
@@ -0,0 +1,28 @@
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { useEffect } from 'react';
export const useDiceFamilies = (diceServiceUrl, callback) => {
useEffect(() => {
if (process.env.NODE_ENV === 'test') {
return;
}
(() => __awaiter(void 0, void 0, void 0, function* () {
try {
const response = yield fetch(`${diceServiceUrl}/dice/v1/getallfamilysets`);
const { data } = yield response.json();
callback(data);
}
catch (error) {
console.error(error.message);
}
}))();
}, [callback, diceServiceUrl]);
};
//# sourceMappingURL=useDiceFamilies.js.map
@@ -0,0 +1,12 @@
import { useEffect } from 'react';
import { useAwaitMessageBroker } from '../useAwaitMessageBroker';
export const useFetchHistory = (callback) => {
const mb = useAwaitMessageBroker();
useEffect(() => {
if (!mb) {
return;
}
callback(() => mb.fetchHistory());
}, [callback, mb]);
};
//# sourceMappingURL=useFetchHistory.js.map
@@ -0,0 +1,59 @@
import { useEffect, useRef } from 'react';
/**
* this hook takes an optional callback, wires it up to be called when a
* "sentinel" element scrolls into view inside of a scroll container, and
* returns `RefObject`s to use to attach to the appropriate DOM elements, e.g.
*
* ```jsx
* export const InfiniteScroller: FC = () => {
* const myCallback = useCallback(() => {
* // do something when the sentinel scrolls into view inside the scroll
* // container
* }, []);
*
* const [scrollContainerRef, sentinelRef] = useInfiniteScroll(myCallback);
*
* return (
* <div className="scroll-container" ref={scrollContainerRef}>
* <div className="taller-than-scroll-container">
* // other stuff could go here ...
* <hr className="sentinel" ref={sentinelRef} />
* // ... or other stuff could go here
* </div>
* </div>
* );
* }
* ```
*
* the styling and exact structure is up to the implementor
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
*/
export const useInfiniteScroll = (callback) => {
const scrollContainerRef = useRef(null);
const sentinelRef = useRef(null);
useEffect(() => {
if (!(scrollContainerRef.current && sentinelRef.current)) {
return;
}
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (!(scrollContainerRef.current &&
scrollContainerRef.current.scrollHeight >
scrollContainerRef.current.clientHeight &&
entry.isIntersecting)) {
return;
}
callback === null || callback === void 0 ? void 0 : callback();
});
}, {
root: scrollContainerRef.current,
});
observer.observe(sentinelRef.current);
return () => {
observer.disconnect();
};
}, [callback]);
return [scrollContainerRef, sentinelRef];
};
//# sourceMappingURL=useInfiniteScroll.js.map
@@ -0,0 +1,23 @@
import { useEffect, useRef } from 'react';
/**
* heavily inspired by @dan_abramov's post
*
* @see https://overreacted.io/making-setinterval-declarative-with-react-hooks/
*/
export const useInterval = (handler, timeout) => {
const handlerRef = useRef();
useEffect(() => {
handlerRef.current = handler;
}, [handler]);
useEffect(() => {
if (timeout === null) {
return;
}
const intervalId = setInterval(() => {
var _a;
typeof handlerRef.current === 'function' && ((_a = handlerRef.current) === null || _a === void 0 ? void 0 : _a.call(handlerRef));
}, timeout);
return () => clearInterval(intervalId);
}, [timeout]);
};
//# sourceMappingURL=useInterval.js.map
@@ -0,0 +1,12 @@
import { useEffect } from 'react';
import { useAwaitMessageBroker } from '../useAwaitMessageBroker';
export const useMessageBroker = (callback) => {
const mb = useAwaitMessageBroker();
useEffect(() => {
if (!mb) {
return;
}
return mb.subscribe(callback);
}, [callback, mb]);
};
//# sourceMappingURL=useMessageBroker.js.map