@streamplace/components 0.8.17 → 0.9.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.
Files changed (147) hide show
  1. package/dist/components/chat/chat-box.d.ts +1 -1
  2. package/dist/components/chat/chat-box.d.ts.map +1 -1
  3. package/dist/components/chat/chat-box.js +3 -0
  4. package/dist/components/chat/chat-box.js.map +1 -1
  5. package/dist/components/chat/mod-view.d.ts +4 -2
  6. package/dist/components/chat/mod-view.d.ts.map +1 -1
  7. package/dist/components/chat/mod-view.js +142 -42
  8. package/dist/components/chat/mod-view.js.map +1 -1
  9. package/dist/components/dashboard/chat-panel.d.ts +2 -1
  10. package/dist/components/dashboard/chat-panel.d.ts.map +1 -1
  11. package/dist/components/dashboard/chat-panel.js +2 -3
  12. package/dist/components/dashboard/chat-panel.js.map +1 -1
  13. package/dist/components/dashboard/index.d.ts +1 -0
  14. package/dist/components/dashboard/index.d.ts.map +1 -1
  15. package/dist/components/dashboard/index.js +3 -1
  16. package/dist/components/dashboard/index.js.map +1 -1
  17. package/dist/components/dashboard/moderator-panel.d.ts +7 -0
  18. package/dist/components/dashboard/moderator-panel.d.ts.map +1 -0
  19. package/dist/components/dashboard/moderator-panel.js +256 -0
  20. package/dist/components/dashboard/moderator-panel.js.map +1 -0
  21. package/dist/components/mobile-player/video-async.native.d.ts.map +1 -1
  22. package/dist/components/mobile-player/video-async.native.js +1 -1
  23. package/dist/components/mobile-player/video-async.native.js.map +1 -1
  24. package/dist/components/ui/dialog.d.ts +1 -1
  25. package/dist/components/ui/menu.d.ts +14 -0
  26. package/dist/components/ui/menu.d.ts.map +1 -1
  27. package/dist/components/ui/menu.js +83 -4
  28. package/dist/components/ui/menu.js.map +1 -1
  29. package/dist/components/ui/text.d.ts +1 -1
  30. package/dist/crypto-polyfill.native.js +7 -1
  31. package/dist/crypto-polyfill.native.js.map +1 -1
  32. package/dist/hooks/index.d.ts +1 -0
  33. package/dist/hooks/index.d.ts.map +1 -1
  34. package/dist/hooks/index.js +1 -0
  35. package/dist/hooks/index.js.map +1 -1
  36. package/dist/hooks/useDocumentTitle.d.ts +6 -0
  37. package/dist/hooks/useDocumentTitle.d.ts.map +1 -0
  38. package/dist/hooks/useDocumentTitle.js +40 -0
  39. package/dist/hooks/useDocumentTitle.js.map +1 -0
  40. package/dist/lib/theme/atoms.d.ts +145 -145
  41. package/dist/lib/theme/branded-theme-provider.d.ts +13 -0
  42. package/dist/lib/theme/branded-theme-provider.d.ts.map +1 -0
  43. package/dist/lib/theme/branded-theme-provider.js +34 -0
  44. package/dist/lib/theme/branded-theme-provider.js.map +1 -0
  45. package/dist/lib/theme/index.d.ts +1 -0
  46. package/dist/lib/theme/index.d.ts.map +1 -1
  47. package/dist/lib/theme/index.js +4 -1
  48. package/dist/lib/theme/index.js.map +1 -1
  49. package/dist/lib/theme/theme.d.ts +1 -1
  50. package/dist/lib/theme/tokens.d.ts +1 -1
  51. package/dist/lib/theme/tokens.js +1 -1
  52. package/dist/livestream-provider/index.d.ts +2 -1
  53. package/dist/livestream-provider/index.d.ts.map +1 -1
  54. package/dist/livestream-provider/index.js +4 -2
  55. package/dist/livestream-provider/index.js.map +1 -1
  56. package/dist/livestream-provider/websocket.d.ts.map +1 -1
  57. package/dist/livestream-provider/websocket.js +15 -1
  58. package/dist/livestream-provider/websocket.js.map +1 -1
  59. package/dist/livestream-store/chat.d.ts +1 -1
  60. package/dist/livestream-store/chat.d.ts.map +1 -1
  61. package/dist/livestream-store/chat.js +1 -3
  62. package/dist/livestream-store/chat.js.map +1 -1
  63. package/dist/livestream-store/livestream-state.d.ts +5 -1
  64. package/dist/livestream-store/livestream-state.d.ts.map +1 -1
  65. package/dist/livestream-store/livestream-store.d.ts +1 -0
  66. package/dist/livestream-store/livestream-store.d.ts.map +1 -1
  67. package/dist/livestream-store/livestream-store.js +7 -1
  68. package/dist/livestream-store/livestream-store.js.map +1 -1
  69. package/dist/livestream-store/stream-key.d.ts +1 -0
  70. package/dist/livestream-store/stream-key.d.ts.map +1 -1
  71. package/dist/livestream-store/stream-key.js +2 -0
  72. package/dist/livestream-store/stream-key.js.map +1 -1
  73. package/dist/livestream-store/websocket-consumer.d.ts.map +1 -1
  74. package/dist/livestream-store/websocket-consumer.js +145 -75
  75. package/dist/livestream-store/websocket-consumer.js.map +1 -1
  76. package/dist/streamplace-provider/index.d.ts +3 -0
  77. package/dist/streamplace-provider/index.d.ts.map +1 -1
  78. package/dist/streamplace-provider/index.js +12 -1
  79. package/dist/streamplace-provider/index.js.map +1 -1
  80. package/dist/streamplace-store/block.d.ts +36 -2
  81. package/dist/streamplace-store/block.d.ts.map +1 -1
  82. package/dist/streamplace-store/block.js +121 -18
  83. package/dist/streamplace-store/block.js.map +1 -1
  84. package/dist/streamplace-store/branding.d.ts +27 -0
  85. package/dist/streamplace-store/branding.d.ts.map +1 -0
  86. package/dist/streamplace-store/branding.js +195 -0
  87. package/dist/streamplace-store/branding.js.map +1 -0
  88. package/dist/streamplace-store/index.d.ts +4 -0
  89. package/dist/streamplace-store/index.d.ts.map +1 -1
  90. package/dist/streamplace-store/index.js +4 -0
  91. package/dist/streamplace-store/index.js.map +1 -1
  92. package/dist/streamplace-store/moderation.d.ts +16 -0
  93. package/dist/streamplace-store/moderation.d.ts.map +1 -0
  94. package/dist/streamplace-store/moderation.js +141 -0
  95. package/dist/streamplace-store/moderation.js.map +1 -0
  96. package/dist/streamplace-store/moderator-management.d.ts +44 -0
  97. package/dist/streamplace-store/moderator-management.d.ts.map +1 -0
  98. package/dist/streamplace-store/moderator-management.js +136 -0
  99. package/dist/streamplace-store/moderator-management.js.map +1 -0
  100. package/dist/streamplace-store/streamplace-store.d.ts +6 -0
  101. package/dist/streamplace-store/streamplace-store.d.ts.map +1 -1
  102. package/dist/streamplace-store/streamplace-store.js +6 -0
  103. package/dist/streamplace-store/streamplace-store.js.map +1 -1
  104. package/dist/streamplace-store/xrpc.d.ts +1 -0
  105. package/dist/streamplace-store/xrpc.d.ts.map +1 -1
  106. package/dist/streamplace-store/xrpc.js +16 -0
  107. package/dist/streamplace-store/xrpc.js.map +1 -1
  108. package/locales/en-US/common.ftl +16 -0
  109. package/locales/en-US/settings.ftl +104 -0
  110. package/locales/es-ES/common.ftl +16 -0
  111. package/locales/es-ES/settings.ftl +1 -1
  112. package/locales/fr-FR/common.ftl +16 -0
  113. package/locales/pt-BR/common.ftl +16 -0
  114. package/locales/pt-BR/settings.ftl +1 -1
  115. package/locales/zh-Hant/common.ftl +16 -0
  116. package/node-compile-cache/v22.15.0-x64-efe9a9df-0/37be0eec +0 -0
  117. package/package.json +3 -3
  118. package/src/components/chat/chat-box.tsx +3 -1
  119. package/src/components/chat/mod-view.tsx +431 -121
  120. package/src/components/dashboard/chat-panel.tsx +2 -1
  121. package/src/components/dashboard/index.tsx +1 -0
  122. package/src/components/dashboard/moderator-panel.tsx +632 -0
  123. package/src/components/mobile-player/video-async.native.tsx +2 -1
  124. package/src/components/ui/menu.tsx +181 -5
  125. package/src/crypto-polyfill.native.tsx +8 -1
  126. package/src/hooks/index.ts +1 -0
  127. package/src/hooks/useDocumentTitle.tsx +45 -0
  128. package/src/lib/theme/branded-theme-provider.tsx +58 -0
  129. package/src/lib/theme/index.ts +3 -0
  130. package/src/lib/theme/tokens.ts +1 -1
  131. package/src/livestream-provider/index.tsx +5 -1
  132. package/src/livestream-provider/websocket.tsx +15 -1
  133. package/src/livestream-store/chat.tsx +0 -2
  134. package/src/livestream-store/livestream-state.tsx +7 -0
  135. package/src/livestream-store/livestream-store.tsx +7 -0
  136. package/src/livestream-store/stream-key.tsx +3 -0
  137. package/src/livestream-store/websocket-consumer.tsx +155 -73
  138. package/src/streamplace-provider/index.tsx +23 -4
  139. package/src/streamplace-store/block.tsx +139 -19
  140. package/src/streamplace-store/branding.tsx +216 -0
  141. package/src/streamplace-store/index.tsx +4 -0
  142. package/src/streamplace-store/moderation.tsx +185 -0
  143. package/src/streamplace-store/moderator-management.tsx +175 -0
  144. package/src/streamplace-store/streamplace-store.tsx +15 -0
  145. package/src/streamplace-store/xrpc.tsx +18 -1
  146. package/dist/assets/emoji-data.json +0 -19371
  147. package/src/assets/emoji-data.json +0 -19371
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useFetchBroadcasterDID = useFetchBroadcasterDID;
4
+ exports.useFetchBranding = useFetchBranding;
5
+ exports.useBrandingAsset = useBrandingAsset;
6
+ exports.useMainLogo = useMainLogo;
7
+ exports.useFavicon = useFavicon;
8
+ exports.useSiteTitle = useSiteTitle;
9
+ exports.useSiteDescription = useSiteDescription;
10
+ exports.usePrimaryColor = usePrimaryColor;
11
+ exports.useAccentColor = useAccentColor;
12
+ exports.useDefaultStreamer = useDefaultStreamer;
13
+ exports.useSidebarBackgroundImage = useSidebarBackgroundImage;
14
+ exports.useLegalLinks = useLegalLinks;
15
+ exports.useBrandingAutoFetch = useBrandingAutoFetch;
16
+ const tslib_1 = require("tslib");
17
+ const react_1 = require("react");
18
+ const storage_1 = tslib_1.__importDefault(require("../storage"));
19
+ const streamplace_store_1 = require("./streamplace-store");
20
+ const xrpc_1 = require("./xrpc");
21
+ // helper to convert blob to base64
22
+ const blobToBase64 = (blob) => {
23
+ return new Promise((resolve, reject) => {
24
+ const reader = new FileReader();
25
+ reader.onloadend = () => resolve(reader.result);
26
+ reader.onerror = reject;
27
+ reader.readAsDataURL(blob);
28
+ });
29
+ };
30
+ // hook to fetch broadcaster DID (unauthenticated)
31
+ function useFetchBroadcasterDID() {
32
+ const streamplaceAgent = (0, xrpc_1.usePossiblyUnauthedPDSAgent)();
33
+ const store = (0, streamplace_store_1.getStreamplaceStoreFromContext)();
34
+ return (0, react_1.useCallback)(async () => {
35
+ try {
36
+ if (!streamplaceAgent) {
37
+ throw new Error("Streamplace agent not available");
38
+ }
39
+ const result = await streamplaceAgent.place.stream.broadcast.getBroadcaster();
40
+ store.setState({ broadcasterDID: result.data.broadcaster });
41
+ if (result.data.server) {
42
+ store.setState({ serverDID: result.data.server });
43
+ }
44
+ if (result.data.admins) {
45
+ store.setState({ adminDIDs: result.data.admins });
46
+ }
47
+ }
48
+ catch (err) {
49
+ console.error("Failed to fetch broadcaster DID:", err);
50
+ }
51
+ }, [streamplaceAgent, store]);
52
+ }
53
+ // hook to fetch branding data from the server
54
+ function useFetchBranding() {
55
+ const streamplaceAgent = (0, xrpc_1.usePossiblyUnauthedPDSAgent)();
56
+ const broadcasterDID = (0, streamplace_store_1.useStreamplaceStore)((state) => state.broadcasterDID);
57
+ const url = (0, streamplace_store_1.useStreamplaceStore)((state) => state.url);
58
+ const store = (0, streamplace_store_1.getStreamplaceStoreFromContext)();
59
+ return (0, react_1.useCallback)(async ({ force = true } = {}) => {
60
+ if (!broadcasterDID)
61
+ return;
62
+ try {
63
+ store.setState({ brandingLoading: true });
64
+ // check localStorage first
65
+ const cacheKey = `branding:${broadcasterDID}`;
66
+ const cached = await storage_1.default.getItem(cacheKey);
67
+ if (!force && cached) {
68
+ try {
69
+ const parsed = JSON.parse(cached);
70
+ // check if cache is less than 1 hour old
71
+ if (Date.now() - parsed.timestamp < 60 * 60 * 1000) {
72
+ store.setState({
73
+ branding: parsed.data,
74
+ brandingLoading: false,
75
+ brandingError: null,
76
+ });
77
+ return;
78
+ }
79
+ }
80
+ catch (e) {
81
+ // invalid cache, continue to fetch
82
+ console.warn("Invalid branding cache, refetching", e);
83
+ }
84
+ }
85
+ // fetch branding metadata from server
86
+ if (!streamplaceAgent) {
87
+ throw new Error("Streamplace agent not available");
88
+ }
89
+ const res = await streamplaceAgent.place.stream.branding.getBranding({
90
+ broadcaster: broadcasterDID,
91
+ });
92
+ const assets = res.data.assets;
93
+ // convert assets array to keyed object and fetch blob data
94
+ const brandingMap = {};
95
+ for (const asset of assets) {
96
+ brandingMap[asset.key] = { ...asset };
97
+ // if data is already inline (text assets), use it directly
98
+ if (asset.data) {
99
+ brandingMap[asset.key].data = asset.data;
100
+ }
101
+ else if (asset.url) {
102
+ // for images, construct full URL and fetch blob
103
+ const fullUrl = `${url}${asset.url}`;
104
+ const blobRes = await fetch(fullUrl);
105
+ const blob = await blobRes.blob();
106
+ brandingMap[asset.key].data = await blobToBase64(blob);
107
+ }
108
+ }
109
+ // cache in localStorage
110
+ storage_1.default.setItem(cacheKey, JSON.stringify({
111
+ timestamp: Date.now(),
112
+ data: brandingMap,
113
+ }));
114
+ store.setState({
115
+ branding: brandingMap,
116
+ brandingLoading: false,
117
+ brandingError: null,
118
+ });
119
+ }
120
+ catch (err) {
121
+ console.error("Failed to fetch branding:", err);
122
+ store.setState({
123
+ brandingLoading: false,
124
+ brandingError: err.message || "Failed to fetch branding",
125
+ });
126
+ }
127
+ }, [broadcasterDID, streamplaceAgent, url, store]);
128
+ }
129
+ // hook to get a specific branding asset by key
130
+ function useBrandingAsset(key) {
131
+ return (0, streamplace_store_1.useStreamplaceStore)((state) => state.branding?.[key]);
132
+ }
133
+ // convenience hook for main logo
134
+ function useMainLogo() {
135
+ const asset = useBrandingAsset("mainLogo");
136
+ return asset?.data;
137
+ }
138
+ // convenience hook for favicon
139
+ function useFavicon() {
140
+ const asset = useBrandingAsset("favicon");
141
+ return asset?.data;
142
+ }
143
+ // convenience hook for site title
144
+ function useSiteTitle() {
145
+ const asset = useBrandingAsset("siteTitle");
146
+ return asset?.data || "My Streamplace Station";
147
+ }
148
+ // convenience hook for site description
149
+ function useSiteDescription() {
150
+ const asset = useBrandingAsset("siteDescription");
151
+ return asset?.data || "Live streaming platform";
152
+ }
153
+ // convenience hook for primary color
154
+ function usePrimaryColor() {
155
+ const asset = useBrandingAsset("primaryColor");
156
+ return asset?.data || "#6366f1";
157
+ }
158
+ // convenience hook for accent color
159
+ function useAccentColor() {
160
+ const asset = useBrandingAsset("accentColor");
161
+ return asset?.data || "#8b5cf6";
162
+ }
163
+ // convenience hook for default streamer
164
+ function useDefaultStreamer() {
165
+ const asset = useBrandingAsset("defaultStreamer");
166
+ return asset?.data || undefined;
167
+ }
168
+ // convenience hook for sidebar background image
169
+ function useSidebarBackgroundImage() {
170
+ return useBrandingAsset("sidebarBackgroundImage");
171
+ }
172
+ // convenience hook for legal links
173
+ function useLegalLinks() {
174
+ const asset = useBrandingAsset("legalLinks");
175
+ if (!asset?.data) {
176
+ return [];
177
+ }
178
+ try {
179
+ return JSON.parse(asset.data);
180
+ }
181
+ catch {
182
+ return [];
183
+ }
184
+ }
185
+ // hook to auto-fetch branding when broadcaster changes
186
+ function useBrandingAutoFetch() {
187
+ const fetchBranding = useFetchBranding();
188
+ const broadcasterDID = (0, streamplace_store_1.useStreamplaceStore)((state) => state.broadcasterDID);
189
+ (0, react_1.useEffect)(() => {
190
+ if (broadcasterDID) {
191
+ fetchBranding();
192
+ }
193
+ }, [broadcasterDID, fetchBranding]);
194
+ }
195
+ //# sourceMappingURL=branding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branding.js","sourceRoot":"","sources":["../../src/streamplace-store/branding.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ export * from "./block";
2
+ export * from "./branding";
3
+ export * from "./moderation";
4
+ export * from "./moderator-management";
1
5
  export * from "./stream";
2
6
  export * from "./streamplace-store";
3
7
  export * from "./user";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/streamplace-store/index.tsx"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/streamplace-store/index.tsx"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,QAAQ,CAAC"}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./block"), exports);
5
+ tslib_1.__exportStar(require("./branding"), exports);
6
+ tslib_1.__exportStar(require("./moderation"), exports);
7
+ tslib_1.__exportStar(require("./moderator-management"), exports);
4
8
  tslib_1.__exportStar(require("./stream"), exports);
5
9
  tslib_1.__exportStar(require("./streamplace-store"), exports);
6
10
  tslib_1.__exportStar(require("./user"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/streamplace-store/index.tsx"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,8DAAoC;AACpC,iDAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/streamplace-store/index.tsx"],"names":[],"mappings":";;;AAAA,kDAAwB;AACxB,qDAA2B;AAC3B,uDAA6B;AAC7B,iEAAuC;AACvC,mDAAyB;AACzB,8DAAoC;AACpC,iDAAuB"}
@@ -0,0 +1,16 @@
1
+ export interface ModerationPermissions {
2
+ canBan: boolean;
3
+ canHide: boolean;
4
+ canManageLivestream: boolean;
5
+ isOwner: boolean;
6
+ isLoading: boolean;
7
+ error: string | null;
8
+ }
9
+ /**
10
+ * Hook to check if the current user can moderate for a given streamer.
11
+ * Returns permission flags based on:
12
+ * - Owner: full permissions if userDID === streamerDID
13
+ * - Delegated: permissions from place.stream.moderation.permission records
14
+ */
15
+ export declare function useCanModerate(streamerDID: string | null | undefined): ModerationPermissions;
16
+ //# sourceMappingURL=moderation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderation.d.ts","sourceRoot":"","sources":["../../src/streamplace-store/moderation.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACrC,qBAAqB,CAkKvB"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCanModerate = useCanModerate;
4
+ const react_1 = require("react");
5
+ const livestream_store_1 = require("../livestream-store/livestream-store");
6
+ const xrpc_1 = require("./xrpc");
7
+ /**
8
+ * Hook to check if the current user can moderate for a given streamer.
9
+ * Returns permission flags based on:
10
+ * - Owner: full permissions if userDID === streamerDID
11
+ * - Delegated: permissions from place.stream.moderation.permission records
12
+ */
13
+ function useCanModerate(streamerDID) {
14
+ const agent = (0, xrpc_1.usePDSAgent)();
15
+ const userDID = agent?.did;
16
+ // Get moderation permissions from livestream store (updated via WebSocket)
17
+ const moderationPermissions = (0, livestream_store_1.useLivestreamStore)((state) => state.moderationPermissions);
18
+ const setModerationPermissions = (0, livestream_store_1.useLivestreamStore)((state) => state.setModerationPermissions);
19
+ const [isOwner, setIsOwner] = (0, react_1.useState)(false);
20
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
21
+ const [error, setError] = (0, react_1.useState)(null);
22
+ (0, react_1.useEffect)(() => {
23
+ if (!userDID || !streamerDID) {
24
+ setModerationPermissions([]);
25
+ setIsOwner(false);
26
+ setError(null);
27
+ return;
28
+ }
29
+ // If user is the streamer, they have full permissions
30
+ if (userDID === streamerDID) {
31
+ setIsOwner(true);
32
+ setModerationPermissions([]); // Not needed for owner
33
+ setIsLoading(false);
34
+ setError(null);
35
+ return;
36
+ }
37
+ // Otherwise, fetch delegation records from the streamer's repo
38
+ // This initial fetch populates the store, then WebSocket updates will keep it in sync
39
+ const fetchDelegation = async () => {
40
+ if (!agent) {
41
+ setModerationPermissions([]);
42
+ setIsLoading(false);
43
+ return;
44
+ }
45
+ setIsLoading(true);
46
+ setError(null);
47
+ setIsOwner(false);
48
+ try {
49
+ // Use authenticated agent to list permission records from the streamer's repo
50
+ const result = await agent.com.atproto.repo.listRecords({
51
+ repo: streamerDID,
52
+ collection: "place.stream.moderation.permission",
53
+ limit: 100,
54
+ });
55
+ const records = result.data.records || [];
56
+ const permissionRecords = records
57
+ .map((r) => r.value)
58
+ .filter((v) => v && v.$type === "place.stream.moderation.permission");
59
+ // Store all permissions in the livestream store
60
+ // WebSocket updates will keep this in sync
61
+ setModerationPermissions(permissionRecords);
62
+ }
63
+ catch (err) {
64
+ console.error("[useCanModerate] Error fetching permissions:", err);
65
+ setError(`Could not fetch moderation permissions: ${err instanceof Error ? err.message : `Unknown error: ${err}`}`);
66
+ setModerationPermissions([]);
67
+ }
68
+ finally {
69
+ setIsLoading(false);
70
+ }
71
+ };
72
+ // Fetch immediately on mount or when dependencies change
73
+ fetchDelegation();
74
+ }, [userDID, streamerDID, agent, setModerationPermissions]);
75
+ // If permissions were cleared (e.g., due to deletion), trigger a refetch
76
+ (0, react_1.useEffect)(() => {
77
+ // If permissions were cleared and we're not the owner, refetch
78
+ if (moderationPermissions.length === 0 &&
79
+ !isOwner &&
80
+ userDID &&
81
+ streamerDID &&
82
+ agent) {
83
+ const fetchDelegation = async () => {
84
+ try {
85
+ const result = await agent.com.atproto.repo.listRecords({
86
+ repo: streamerDID,
87
+ collection: "place.stream.moderation.permission",
88
+ limit: 100,
89
+ });
90
+ const records = result.data.records || [];
91
+ const permissionRecords = records
92
+ .map((r) => r.value)
93
+ .filter((v) => v && v.$type === "place.stream.moderation.permission");
94
+ setModerationPermissions(permissionRecords);
95
+ }
96
+ catch (err) {
97
+ console.error("[useCanModerate] Error refetching permissions:", err);
98
+ }
99
+ };
100
+ // Small delay to avoid rapid refetches
101
+ const timeout = setTimeout(fetchDelegation, 100);
102
+ return () => clearTimeout(timeout);
103
+ }
104
+ }, [
105
+ moderationPermissions.length,
106
+ isOwner,
107
+ userDID,
108
+ streamerDID,
109
+ agent,
110
+ setModerationPermissions,
111
+ ]);
112
+ // Find ALL delegation records for this moderator and merge their permissions
113
+ const delegations = moderationPermissions.filter((perm) => perm.moderator === userDID);
114
+ // Merge permissions from all delegation records for this moderator
115
+ const permissions = delegations.reduce((acc, delegation) => {
116
+ // Check if delegation has expired
117
+ if (delegation.expirationTime) {
118
+ const expiration = new Date(delegation.expirationTime);
119
+ if (new Date() > expiration) {
120
+ return acc; // Skip expired delegations
121
+ }
122
+ }
123
+ // Add all permissions from this delegation, avoiding duplicates
124
+ const delegationPerms = delegation.permissions || [];
125
+ for (const perm of delegationPerms) {
126
+ if (!acc.includes(perm)) {
127
+ acc.push(perm);
128
+ }
129
+ }
130
+ return acc;
131
+ }, []);
132
+ return {
133
+ canBan: isOwner || permissions.includes("ban"),
134
+ canHide: isOwner || permissions.includes("hide"),
135
+ canManageLivestream: isOwner || permissions.includes("livestream.manage"),
136
+ isOwner,
137
+ isLoading,
138
+ error,
139
+ };
140
+ }
141
+ //# sourceMappingURL=moderation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderation.js","sourceRoot":"","sources":["../../src/streamplace-store/moderation.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { PlaceStreamModerationPermission } from "streamplace";
2
+ interface ModeratorRecord {
3
+ uri: string;
4
+ cid: string;
5
+ value: PlaceStreamModerationPermission.Record;
6
+ rkey: string;
7
+ }
8
+ interface ListModeratorsResult {
9
+ moderators: ModeratorRecord[];
10
+ isLoading: boolean;
11
+ error: string | null;
12
+ refresh: () => void;
13
+ }
14
+ /**
15
+ * Hook to list all moderators for the current user's stream.
16
+ * Fetches place.stream.moderation.permission records from the user's repo.
17
+ */
18
+ export declare function useListModerators(): ListModeratorsResult;
19
+ interface AddModeratorParams {
20
+ moderatorDID: string;
21
+ permissions: ("ban" | "hide" | "livestream.manage")[];
22
+ expirationTime?: string;
23
+ }
24
+ /**
25
+ * Hook to add a new moderator.
26
+ * Creates a place.stream.moderation.permission record in the current user's repo.
27
+ */
28
+ export declare function useAddModerator(): {
29
+ addModerator: (params: AddModeratorParams) => Promise<{
30
+ uri: string;
31
+ cid: string;
32
+ }>;
33
+ isLoading: boolean;
34
+ };
35
+ /**
36
+ * Hook to remove a moderator.
37
+ * Deletes a place.stream.moderation.permission record by its rkey.
38
+ */
39
+ export declare function useRemoveModerator(): {
40
+ removeModerator: (rkey: string) => Promise<void>;
41
+ isLoading: boolean;
42
+ };
43
+ export {};
44
+ //# sourceMappingURL=moderator-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderator-management.d.ts","sourceRoot":"","sources":["../../src/streamplace-store/moderator-management.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAG9D,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,+BAA+B,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,oBAAoB;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,oBAAoB,CAyDxD;AAED,UAAU,kBAAkB;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,KAAK,GAAG,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,eAAe;2BAIO,kBAAkB;;;;;EAoDvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB;4BAIK,MAAM;;EAiB5C"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useListModerators = useListModerators;
4
+ exports.useAddModerator = useAddModerator;
5
+ exports.useRemoveModerator = useRemoveModerator;
6
+ const react_1 = require("react");
7
+ const xrpc_1 = require("./xrpc");
8
+ /**
9
+ * Hook to list all moderators for the current user's stream.
10
+ * Fetches place.stream.moderation.permission records from the user's repo.
11
+ */
12
+ function useListModerators() {
13
+ const agent = (0, xrpc_1.usePDSAgent)();
14
+ const [moderators, setModerators] = (0, react_1.useState)([]);
15
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
16
+ const [error, setError] = (0, react_1.useState)(null);
17
+ const [refreshTrigger, setRefreshTrigger] = (0, react_1.useState)(0);
18
+ const refresh = (0, react_1.useCallback)(() => {
19
+ setRefreshTrigger((prev) => prev + 1);
20
+ }, []);
21
+ (0, react_1.useEffect)(() => {
22
+ if (!agent?.did) {
23
+ setModerators([]);
24
+ setError(null);
25
+ return;
26
+ }
27
+ const fetchModerators = async () => {
28
+ setIsLoading(true);
29
+ setError(null);
30
+ try {
31
+ const result = await agent.place.stream.moderation.permission.list({
32
+ repo: agent.did,
33
+ });
34
+ const records = result.records.map((record) => {
35
+ const rkey = record.uri.split("/").pop();
36
+ return {
37
+ uri: record.uri,
38
+ cid: record.cid || "",
39
+ value: record.value,
40
+ rkey: rkey || "",
41
+ };
42
+ });
43
+ setModerators(records);
44
+ }
45
+ catch (err) {
46
+ setError(`Failed to fetch moderators: ${err instanceof Error ? err.message : "Unknown error"}`);
47
+ setModerators([]);
48
+ }
49
+ finally {
50
+ setIsLoading(false);
51
+ }
52
+ };
53
+ fetchModerators();
54
+ }, [agent?.did, refreshTrigger]);
55
+ return {
56
+ moderators,
57
+ isLoading,
58
+ error,
59
+ refresh,
60
+ };
61
+ }
62
+ /**
63
+ * Hook to add a new moderator.
64
+ * Creates a place.stream.moderation.permission record in the current user's repo.
65
+ */
66
+ function useAddModerator() {
67
+ const agent = (0, xrpc_1.usePDSAgent)();
68
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
69
+ const addModerator = async (params) => {
70
+ if (!agent?.did) {
71
+ throw new Error("Not logged in");
72
+ }
73
+ if (params.permissions.length === 0) {
74
+ throw new Error("At least one permission must be selected");
75
+ }
76
+ setIsLoading(true);
77
+ try {
78
+ // Resolve handle to DID if needed
79
+ let moderatorDID = params.moderatorDID.trim();
80
+ if (!moderatorDID.startsWith("did:")) {
81
+ if (moderatorDID.startsWith("@")) {
82
+ moderatorDID = moderatorDID.substring(1); // Remove @
83
+ }
84
+ try {
85
+ const resolved = await agent.com.atproto.identity.resolveHandle({
86
+ handle: moderatorDID,
87
+ });
88
+ moderatorDID = resolved.data.did;
89
+ }
90
+ catch (e) {
91
+ throw new Error(`Invalid DID or handle: ${moderatorDID}. Please use a valid DID (did:plc:...) or handle (@handle.bsky.social)`);
92
+ }
93
+ }
94
+ const record = {
95
+ $type: "place.stream.moderation.permission",
96
+ moderator: moderatorDID,
97
+ permissions: params.permissions,
98
+ createdAt: new Date().toISOString(),
99
+ };
100
+ if (params.expirationTime) {
101
+ record.expirationTime = params.expirationTime;
102
+ }
103
+ const result = await agent.place.stream.moderation.permission.create({ repo: agent.did }, record);
104
+ return result;
105
+ }
106
+ finally {
107
+ setIsLoading(false);
108
+ }
109
+ };
110
+ return { addModerator, isLoading };
111
+ }
112
+ /**
113
+ * Hook to remove a moderator.
114
+ * Deletes a place.stream.moderation.permission record by its rkey.
115
+ */
116
+ function useRemoveModerator() {
117
+ const agent = (0, xrpc_1.usePDSAgent)();
118
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
119
+ const removeModerator = async (rkey) => {
120
+ if (!agent?.did) {
121
+ throw new Error("Not logged in");
122
+ }
123
+ setIsLoading(true);
124
+ try {
125
+ await agent.place.stream.moderation.permission.delete({
126
+ repo: agent.did,
127
+ rkey,
128
+ });
129
+ }
130
+ finally {
131
+ setIsLoading(false);
132
+ }
133
+ };
134
+ return { removeModerator, isLoading };
135
+ }
136
+ //# sourceMappingURL=moderator-management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderator-management.js","sourceRoot":"","sources":["../../src/streamplace-store/moderator-management.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { SessionManager } from "@atproto/api/dist/session-manager";
2
2
  import { PlaceStreamChatProfile, PlaceStreamLivestream } from "streamplace";
3
3
  import { StoreApi } from "zustand";
4
+ import { BrandingAsset } from "./branding";
4
5
  export interface ContentMetadataResult {
5
6
  record: any;
6
7
  uri: string;
@@ -28,6 +29,11 @@ export interface StreamplaceState {
28
29
  setBroadcasterDID: (broadcasterDID: string | null) => void;
29
30
  serverDID: string | null;
30
31
  setServerDID: (serverDID: string | null) => void;
32
+ adminDIDs: string[];
33
+ setAdminDIDs: (adminDIDs: string[]) => void;
34
+ branding: Record<string, BrandingAsset> | null;
35
+ brandingLoading: boolean;
36
+ brandingError: string | null;
31
37
  volume: number;
32
38
  muted: boolean;
33
39
  setVolume: (volume: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"streamplace-store.d.ts","sourceRoot":"","sources":["../../src/streamplace-store/streamplace-store.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamplace-store.d.ts","sourceRoot":"","sources":["../../src/streamplace-store/streamplace-store.tsx"],"names":[],"mappings":"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"}