@noya-app/noya-api-client-react 0.1.46 → 0.1.48

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,18 +1,17 @@
1
-
2
- $ tsup src/index.ts --format cjs,esm --dts --sourcemap
3
- CLI Building entry: src/index.ts
4
- CLI Using tsconfig: tsconfig.json
5
- CLI tsup v8.3.5
6
- CLI Target: esnext
7
- CJS Build start
8
- ESM Build start
9
- DTS Build start
10
- ESM dist/index.mjs 528.09 KB
11
- ESM dist/index.mjs.map 1.42 MB
12
- ESM ⚡️ Build success in 858ms
13
- CJS dist/index.js 536.51 KB
14
- CJS dist/index.js.map 1.42 MB
15
- CJS ⚡️ Build success in 878ms
16
- DTS ⚡️ Build success in 7142ms
17
- DTS dist/index.d.ts 15.78 KB
18
- DTS dist/index.d.mts 15.78 KB
1
+ $ tsup src/index.ts --format cjs,esm --dts --sourcemap
2
+ CLI Building entry: src/index.ts
3
+ CLI Using tsconfig: tsconfig.json
4
+ CLI tsup v8.3.5
5
+ CLI Target: esnext
6
+ CJS Build start
7
+ ESM Build start
8
+ DTS Build start
9
+ CJS dist/index.js 540.31 KB
10
+ CJS dist/index.js.map 1.43 MB
11
+ CJS ⚡️ Build success in 6095ms
12
+ ESM dist/index.mjs 531.64 KB
13
+ ESM dist/index.mjs.map 1.43 MB
14
+ ESM ⚡️ Build success in 6096ms
15
+ DTS ⚡️ Build success in 75545ms
16
+ DTS dist/index.d.ts 17.73 KB
17
+ DTS dist/index.d.mts 17.73 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @noya-app/noya-api-client-react
2
2
 
3
+ ## 0.1.48
4
+
5
+ ### Patch Changes
6
+
7
+ - ef15878: Update packages
8
+ - Updated dependencies [ef15878]
9
+ - @noya-app/noya-api@0.1.48
10
+
11
+ ## 0.1.47
12
+
13
+ ### Patch Changes
14
+
15
+ - 900b8f3: Bump packages
16
+ - @noya-app/noya-api@0.1.47
17
+
3
18
  ## 0.1.46
4
19
 
5
20
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -396,9 +396,28 @@ declare function useNoyaWorkspaces(): {
396
396
  };
397
397
  role: "OWNER" | "ADMIN" | "MEMBER";
398
398
  }[];
399
+ settings?: {
400
+ defaultFileWorkspaceAccess: "private" | "read" | "write";
401
+ } | null | undefined;
399
402
  }[];
400
403
  loading: boolean;
401
404
  };
405
+ type WorkspaceMemberInfo = {
406
+ userId: string;
407
+ name: string | null;
408
+ email: string | null;
409
+ image: string | null;
410
+ role: "OWNER" | "ADMIN" | "MEMBER";
411
+ };
412
+ /**
413
+ * Hook to get workspace members for a specific workspace.
414
+ * Returns the members array and a lookup map for easy access by userId.
415
+ */
416
+ declare function useNoyaWorkspaceMembers(workspaceId: string): {
417
+ members: WorkspaceMemberInfo[];
418
+ membersById: Map<string, WorkspaceMemberInfo>;
419
+ loading: boolean;
420
+ };
402
421
  declare function useNoyaMultiplayerRoomToken(fileId: string): {
403
422
  access: "read" | "write";
404
423
  } | undefined;
@@ -462,6 +481,46 @@ declare function useNoyaTemplates(): {
462
481
  }[];
463
482
  loading: boolean;
464
483
  };
484
+ type WorkspaceRole = "OWNER" | "ADMIN" | "MEMBER";
485
+ type WorkspaceAccessInfo = {
486
+ isMember: boolean;
487
+ role: WorkspaceRole | null;
488
+ isOwner: boolean;
489
+ isAdmin: boolean;
490
+ workspaceId: string;
491
+ loading: boolean;
492
+ };
493
+ /**
494
+ * Get workspace membership and role information for the current user.
495
+ * Returns workspace access details including membership status and role.
496
+ */
497
+ declare function useWorkspaceAccess(workspaceId: string): WorkspaceAccessInfo;
498
+ type FileAccessSource = "owner" | "workspace" | "public" | "none";
499
+ type FileAccessInfo = {
500
+ isOwner: boolean;
501
+ canView: boolean;
502
+ canEdit: boolean;
503
+ accessSource: FileAccessSource;
504
+ loading: boolean;
505
+ };
506
+ type FileWithAccess = {
507
+ user?: {
508
+ id: string;
509
+ } | null;
510
+ access?: NoyaAPI.FileAccess;
511
+ workspaceAccess?: NoyaAPI.FileAccess;
512
+ workspaceId?: string;
513
+ };
514
+ /**
515
+ * Get file access permissions for the current user.
516
+ * Considers ownership, workspace membership, and public access settings.
517
+ */
518
+ declare function useFileAccess(file: FileWithAccess | null | undefined): FileAccessInfo;
519
+ declare function useIsFileOwner(file: {
520
+ user?: {
521
+ id: string;
522
+ } | null;
523
+ } | null | undefined): boolean;
465
524
 
466
525
  type GetRowType<TTable extends Table<EntitySchema>> = Static<TTable["schema"]>;
467
526
  type GetSelectConfig<TTable extends Table<EntitySchema>> = SelectConfig<GetRowType<TTable>[]>;
@@ -518,4 +577,4 @@ declare function useActivityEventsList<Config extends SelectConfig<ActivityEvent
518
577
  }, config?: Config) => void;
519
578
  };
520
579
 
521
- export { NoyaAPIProvider, useActivityEventsList, useFileList, useFileListItem, useIsBeta, useMetadata, useNetworkRequests, useNoyaAssets, useNoyaAssetsByFileVersionId, useNoyaBilling, useNoyaClient, useNoyaClientOrFallback, useNoyaCreators, useNoyaDeployments, useNoyaEmailLists, useNoyaMultiplayerRoomToken, useNoyaOwnedFileVersions, useNoyaPersonalAccessTokens, useNoyaSecrets, useNoyaSession, useNoyaSite, useNoyaSites, useNoyaTags, useNoyaTemplates, useNoyaTools, useNoyaUserData, useNoyaWorkspaceBilling, useNoyaWorkspaceInvitations, useNoyaWorkspaces, useOptionalNoyaClient, useOptionalNoyaCreators, useOptionalNoyaSession, useOptionalNoyaTags, useOptionalNoyaTools, useOptionalNoyaUserData, useResourcesList, useTable, useUser };
580
+ export { type FileAccessInfo, type FileAccessSource, NoyaAPIProvider, type WorkspaceAccessInfo, type WorkspaceMemberInfo, type WorkspaceRole, useActivityEventsList, useFileAccess, useFileList, useFileListItem, useIsBeta, useIsFileOwner, useMetadata, useNetworkRequests, useNoyaAssets, useNoyaAssetsByFileVersionId, useNoyaBilling, useNoyaClient, useNoyaClientOrFallback, useNoyaCreators, useNoyaDeployments, useNoyaEmailLists, useNoyaMultiplayerRoomToken, useNoyaOwnedFileVersions, useNoyaPersonalAccessTokens, useNoyaSecrets, useNoyaSession, useNoyaSite, useNoyaSites, useNoyaTags, useNoyaTemplates, useNoyaTools, useNoyaUserData, useNoyaWorkspaceBilling, useNoyaWorkspaceInvitations, useNoyaWorkspaceMembers, useNoyaWorkspaces, useOptionalNoyaClient, useOptionalNoyaCreators, useOptionalNoyaSession, useOptionalNoyaTags, useOptionalNoyaTools, useOptionalNoyaUserData, useResourcesList, useTable, useUser, useWorkspaceAccess };
package/dist/index.d.ts CHANGED
@@ -396,9 +396,28 @@ declare function useNoyaWorkspaces(): {
396
396
  };
397
397
  role: "OWNER" | "ADMIN" | "MEMBER";
398
398
  }[];
399
+ settings?: {
400
+ defaultFileWorkspaceAccess: "private" | "read" | "write";
401
+ } | null | undefined;
399
402
  }[];
400
403
  loading: boolean;
401
404
  };
405
+ type WorkspaceMemberInfo = {
406
+ userId: string;
407
+ name: string | null;
408
+ email: string | null;
409
+ image: string | null;
410
+ role: "OWNER" | "ADMIN" | "MEMBER";
411
+ };
412
+ /**
413
+ * Hook to get workspace members for a specific workspace.
414
+ * Returns the members array and a lookup map for easy access by userId.
415
+ */
416
+ declare function useNoyaWorkspaceMembers(workspaceId: string): {
417
+ members: WorkspaceMemberInfo[];
418
+ membersById: Map<string, WorkspaceMemberInfo>;
419
+ loading: boolean;
420
+ };
402
421
  declare function useNoyaMultiplayerRoomToken(fileId: string): {
403
422
  access: "read" | "write";
404
423
  } | undefined;
@@ -462,6 +481,46 @@ declare function useNoyaTemplates(): {
462
481
  }[];
463
482
  loading: boolean;
464
483
  };
484
+ type WorkspaceRole = "OWNER" | "ADMIN" | "MEMBER";
485
+ type WorkspaceAccessInfo = {
486
+ isMember: boolean;
487
+ role: WorkspaceRole | null;
488
+ isOwner: boolean;
489
+ isAdmin: boolean;
490
+ workspaceId: string;
491
+ loading: boolean;
492
+ };
493
+ /**
494
+ * Get workspace membership and role information for the current user.
495
+ * Returns workspace access details including membership status and role.
496
+ */
497
+ declare function useWorkspaceAccess(workspaceId: string): WorkspaceAccessInfo;
498
+ type FileAccessSource = "owner" | "workspace" | "public" | "none";
499
+ type FileAccessInfo = {
500
+ isOwner: boolean;
501
+ canView: boolean;
502
+ canEdit: boolean;
503
+ accessSource: FileAccessSource;
504
+ loading: boolean;
505
+ };
506
+ type FileWithAccess = {
507
+ user?: {
508
+ id: string;
509
+ } | null;
510
+ access?: NoyaAPI.FileAccess;
511
+ workspaceAccess?: NoyaAPI.FileAccess;
512
+ workspaceId?: string;
513
+ };
514
+ /**
515
+ * Get file access permissions for the current user.
516
+ * Considers ownership, workspace membership, and public access settings.
517
+ */
518
+ declare function useFileAccess(file: FileWithAccess | null | undefined): FileAccessInfo;
519
+ declare function useIsFileOwner(file: {
520
+ user?: {
521
+ id: string;
522
+ } | null;
523
+ } | null | undefined): boolean;
465
524
 
466
525
  type GetRowType<TTable extends Table<EntitySchema>> = Static<TTable["schema"]>;
467
526
  type GetSelectConfig<TTable extends Table<EntitySchema>> = SelectConfig<GetRowType<TTable>[]>;
@@ -518,4 +577,4 @@ declare function useActivityEventsList<Config extends SelectConfig<ActivityEvent
518
577
  }, config?: Config) => void;
519
578
  };
520
579
 
521
- export { NoyaAPIProvider, useActivityEventsList, useFileList, useFileListItem, useIsBeta, useMetadata, useNetworkRequests, useNoyaAssets, useNoyaAssetsByFileVersionId, useNoyaBilling, useNoyaClient, useNoyaClientOrFallback, useNoyaCreators, useNoyaDeployments, useNoyaEmailLists, useNoyaMultiplayerRoomToken, useNoyaOwnedFileVersions, useNoyaPersonalAccessTokens, useNoyaSecrets, useNoyaSession, useNoyaSite, useNoyaSites, useNoyaTags, useNoyaTemplates, useNoyaTools, useNoyaUserData, useNoyaWorkspaceBilling, useNoyaWorkspaceInvitations, useNoyaWorkspaces, useOptionalNoyaClient, useOptionalNoyaCreators, useOptionalNoyaSession, useOptionalNoyaTags, useOptionalNoyaTools, useOptionalNoyaUserData, useResourcesList, useTable, useUser };
580
+ export { type FileAccessInfo, type FileAccessSource, NoyaAPIProvider, type WorkspaceAccessInfo, type WorkspaceMemberInfo, type WorkspaceRole, useActivityEventsList, useFileAccess, useFileList, useFileListItem, useIsBeta, useIsFileOwner, useMetadata, useNetworkRequests, useNoyaAssets, useNoyaAssetsByFileVersionId, useNoyaBilling, useNoyaClient, useNoyaClientOrFallback, useNoyaCreators, useNoyaDeployments, useNoyaEmailLists, useNoyaMultiplayerRoomToken, useNoyaOwnedFileVersions, useNoyaPersonalAccessTokens, useNoyaSecrets, useNoyaSession, useNoyaSite, useNoyaSites, useNoyaTags, useNoyaTemplates, useNoyaTools, useNoyaUserData, useNoyaWorkspaceBilling, useNoyaWorkspaceInvitations, useNoyaWorkspaceMembers, useNoyaWorkspaces, useOptionalNoyaClient, useOptionalNoyaCreators, useOptionalNoyaSession, useOptionalNoyaTags, useOptionalNoyaTools, useOptionalNoyaUserData, useResourcesList, useTable, useUser, useWorkspaceAccess };
package/dist/index.js CHANGED
@@ -2266,9 +2266,11 @@ var src_exports = {};
2266
2266
  __export(src_exports, {
2267
2267
  NoyaAPIProvider: () => NoyaAPIProvider,
2268
2268
  useActivityEventsList: () => useActivityEventsList,
2269
+ useFileAccess: () => useFileAccess,
2269
2270
  useFileList: () => useFileList,
2270
2271
  useFileListItem: () => useFileListItem,
2271
2272
  useIsBeta: () => useIsBeta,
2273
+ useIsFileOwner: () => useIsFileOwner,
2272
2274
  useMetadata: () => useMetadata,
2273
2275
  useNetworkRequests: () => useNetworkRequests,
2274
2276
  useNoyaAssets: () => useNoyaAssets,
@@ -2292,6 +2294,7 @@ __export(src_exports, {
2292
2294
  useNoyaUserData: () => useNoyaUserData,
2293
2295
  useNoyaWorkspaceBilling: () => useNoyaWorkspaceBilling,
2294
2296
  useNoyaWorkspaceInvitations: () => useNoyaWorkspaceInvitations,
2297
+ useNoyaWorkspaceMembers: () => useNoyaWorkspaceMembers,
2295
2298
  useNoyaWorkspaces: () => useNoyaWorkspaces,
2296
2299
  useOptionalNoyaClient: () => useOptionalNoyaClient,
2297
2300
  useOptionalNoyaCreators: () => useOptionalNoyaCreators,
@@ -2301,7 +2304,8 @@ __export(src_exports, {
2301
2304
  useOptionalNoyaUserData: () => useOptionalNoyaUserData,
2302
2305
  useResourcesList: () => useResourcesList,
2303
2306
  useTable: () => useTable,
2304
- useUser: () => useUser
2307
+ useUser: () => useUser,
2308
+ useWorkspaceAccess: () => useWorkspaceAccess
2305
2309
  });
2306
2310
  module.exports = __toCommonJS(src_exports);
2307
2311
  __reExport(src_exports, require("@noya-app/noya-api"), module.exports);
@@ -2502,6 +2506,24 @@ function useNoyaWorkspaces() {
2502
2506
  }, [client, fetchWorkspaces]);
2503
2507
  return workspaces;
2504
2508
  }
2509
+ function useNoyaWorkspaceMembers(workspaceId) {
2510
+ const { workspaces, loading } = useNoyaWorkspaces();
2511
+ return (0, import_react3.useMemo)(() => {
2512
+ const workspace = workspaces.find((w) => w.id === workspaceId);
2513
+ const members = workspace?.members.map((m) => ({
2514
+ userId: m.userId,
2515
+ name: m.user.name,
2516
+ email: m.user.email,
2517
+ image: m.user.image,
2518
+ role: m.role
2519
+ })) ?? [];
2520
+ const membersById = /* @__PURE__ */ new Map();
2521
+ for (const member of members) {
2522
+ membersById.set(member.userId, member);
2523
+ }
2524
+ return { members, membersById, loading };
2525
+ }, [workspaces, workspaceId, loading]);
2526
+ }
2505
2527
  function useNoyaMultiplayerRoomToken(fileId) {
2506
2528
  const client = useNoyaClientOrFallback();
2507
2529
  const multiplayerRoomToken = (0, import_observable_react.useObservable)(
@@ -2566,6 +2588,111 @@ function useNoyaTemplates() {
2566
2588
  loading: loading === "fetching"
2567
2589
  };
2568
2590
  }
2591
+ function useWorkspaceAccess(workspaceId) {
2592
+ const session = useNoyaSession();
2593
+ const { workspaces, loading } = useNoyaWorkspaces();
2594
+ return (0, import_react3.useMemo)(() => {
2595
+ const userId = session?.user?.id;
2596
+ const workspace = workspaces.find((w) => w.id === workspaceId);
2597
+ if (!workspace || !userId) {
2598
+ return {
2599
+ isMember: false,
2600
+ role: null,
2601
+ isOwner: false,
2602
+ isAdmin: false,
2603
+ workspaceId,
2604
+ loading
2605
+ };
2606
+ }
2607
+ const member = workspace.members.find((m) => m.userId === userId);
2608
+ const role = member?.role ?? null;
2609
+ return {
2610
+ isMember: !!member,
2611
+ role,
2612
+ isOwner: role === "OWNER",
2613
+ isAdmin: role === "OWNER" || role === "ADMIN",
2614
+ workspaceId,
2615
+ loading
2616
+ };
2617
+ }, [session?.user?.id, workspaces, workspaceId, loading]);
2618
+ }
2619
+ function useFileAccess(file) {
2620
+ const session = useNoyaSession();
2621
+ const { workspaces, loading: workspacesLoading } = useNoyaWorkspaces();
2622
+ return (0, import_react3.useMemo)(() => {
2623
+ const userId = session?.user?.id;
2624
+ const noAccess = {
2625
+ isOwner: false,
2626
+ canView: false,
2627
+ canEdit: false,
2628
+ accessSource: "none",
2629
+ loading: workspacesLoading
2630
+ };
2631
+ if (!file) return noAccess;
2632
+ const isOwner = !!(userId && file.user?.id === userId);
2633
+ if (isOwner) {
2634
+ return {
2635
+ isOwner: true,
2636
+ canView: true,
2637
+ canEdit: true,
2638
+ accessSource: "owner",
2639
+ loading: false
2640
+ };
2641
+ }
2642
+ if (file.workspaceId && userId) {
2643
+ const workspace = workspaces.find((w) => w.id === file.workspaceId);
2644
+ const isMember = workspace?.members.some((m) => m.userId === userId);
2645
+ if (isMember) {
2646
+ const workspaceAccess = file.workspaceAccess ?? "private";
2647
+ if (workspaceAccess === "write") {
2648
+ return {
2649
+ isOwner: false,
2650
+ canView: true,
2651
+ canEdit: true,
2652
+ accessSource: "workspace",
2653
+ loading: false
2654
+ };
2655
+ }
2656
+ if (workspaceAccess === "read") {
2657
+ return {
2658
+ isOwner: false,
2659
+ canView: true,
2660
+ canEdit: false,
2661
+ accessSource: "workspace",
2662
+ loading: false
2663
+ };
2664
+ }
2665
+ }
2666
+ }
2667
+ const publicAccess = file.access ?? "private";
2668
+ if (publicAccess === "write") {
2669
+ return {
2670
+ isOwner: false,
2671
+ canView: true,
2672
+ canEdit: true,
2673
+ accessSource: "public",
2674
+ loading: false
2675
+ };
2676
+ }
2677
+ if (publicAccess === "read") {
2678
+ return {
2679
+ isOwner: false,
2680
+ canView: true,
2681
+ canEdit: false,
2682
+ accessSource: "public",
2683
+ loading: false
2684
+ };
2685
+ }
2686
+ return noAccess;
2687
+ }, [session?.user?.id, file, workspaces, workspacesLoading]);
2688
+ }
2689
+ function useIsFileOwner(file) {
2690
+ const session = useNoyaSession();
2691
+ return (0, import_react3.useMemo)(() => {
2692
+ if (!file || !session?.user?.id) return false;
2693
+ return file.user?.id === session.user.id;
2694
+ }, [file, session?.user?.id]);
2695
+ }
2569
2696
 
2570
2697
  // ../../node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs
2571
2698
  var value_exports = {};
@@ -15262,9 +15389,11 @@ function useActivityEventsList(fileId, select, options = {}) {
15262
15389
  0 && (module.exports = {
15263
15390
  NoyaAPIProvider,
15264
15391
  useActivityEventsList,
15392
+ useFileAccess,
15265
15393
  useFileList,
15266
15394
  useFileListItem,
15267
15395
  useIsBeta,
15396
+ useIsFileOwner,
15268
15397
  useMetadata,
15269
15398
  useNetworkRequests,
15270
15399
  useNoyaAssets,
@@ -15288,6 +15417,7 @@ function useActivityEventsList(fileId, select, options = {}) {
15288
15417
  useNoyaUserData,
15289
15418
  useNoyaWorkspaceBilling,
15290
15419
  useNoyaWorkspaceInvitations,
15420
+ useNoyaWorkspaceMembers,
15291
15421
  useNoyaWorkspaces,
15292
15422
  useOptionalNoyaClient,
15293
15423
  useOptionalNoyaCreators,
@@ -15298,6 +15428,7 @@ function useActivityEventsList(fileId, select, options = {}) {
15298
15428
  useResourcesList,
15299
15429
  useTable,
15300
15430
  useUser,
15431
+ useWorkspaceAccess,
15301
15432
  ...require("@noya-app/noya-api")
15302
15433
  });
15303
15434
  //# sourceMappingURL=index.js.map