@m5kdev/frontend 0.20.51 → 0.21.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 (138) hide show
  1. package/dist/src/index.d.mts +25 -0
  2. package/dist/src/index.d.ts +25 -0
  3. package/dist/src/index.js +83 -0
  4. package/dist/src/index.mjs +25 -0
  5. package/dist/src/modules/auth/auth.client.d.mts +708 -0
  6. package/dist/src/modules/auth/auth.client.d.mts.map +1 -0
  7. package/dist/src/modules/auth/auth.client.d.ts +708 -0
  8. package/dist/src/modules/auth/auth.client.d.ts.map +1 -0
  9. package/dist/src/modules/auth/auth.client.js +72 -0
  10. package/dist/src/modules/auth/auth.client.js.map +1 -0
  11. package/dist/src/modules/auth/auth.client.mjs +71 -0
  12. package/dist/src/modules/auth/auth.client.mjs.map +1 -0
  13. package/dist/src/modules/auth/auth.context.d.mts +15 -0
  14. package/dist/src/modules/auth/auth.context.d.mts.map +1 -0
  15. package/dist/src/modules/auth/auth.context.d.ts +15 -0
  16. package/dist/src/modules/auth/auth.context.d.ts.map +1 -0
  17. package/dist/src/modules/auth/auth.context.js +13 -0
  18. package/dist/src/modules/auth/auth.context.js.map +1 -0
  19. package/dist/src/modules/auth/auth.context.mjs +13 -0
  20. package/dist/src/modules/auth/auth.context.mjs.map +1 -0
  21. package/dist/src/modules/auth/auth.lib.d.mts +1251 -1380
  22. package/dist/src/modules/auth/auth.lib.d.mts.map +1 -1
  23. package/dist/src/modules/auth/auth.lib.d.ts +1251 -1380
  24. package/dist/src/modules/auth/auth.lib.d.ts.map +1 -1
  25. package/dist/src/modules/auth/auth.lib.js +18 -63
  26. package/dist/src/modules/auth/auth.lib.js.map +1 -1
  27. package/dist/src/modules/auth/auth.lib.mjs +10 -64
  28. package/dist/src/modules/auth/auth.lib.mjs.map +1 -1
  29. package/dist/src/modules/auth/components/AuthProvider.d.mts +9 -10
  30. package/dist/src/modules/auth/components/AuthProvider.d.mts.map +1 -1
  31. package/dist/src/modules/auth/components/AuthProvider.d.ts +9 -10
  32. package/dist/src/modules/auth/components/AuthProvider.d.ts.map +1 -1
  33. package/dist/src/modules/auth/components/AuthProvider.js +20 -42
  34. package/dist/src/modules/auth/components/AuthProvider.js.map +1 -1
  35. package/dist/src/modules/auth/components/AuthProvider.mjs +22 -43
  36. package/dist/src/modules/auth/components/AuthProvider.mjs.map +1 -1
  37. package/dist/src/modules/auth/hooks/useAuth.d.mts.map +1 -1
  38. package/dist/src/modules/auth/hooks/useAuth.d.ts.map +1 -1
  39. package/dist/src/modules/auth/hooks/useAuth.js +5 -3
  40. package/dist/src/modules/auth/hooks/useAuth.js.map +1 -1
  41. package/dist/src/modules/auth/hooks/useAuth.mjs +3 -1
  42. package/dist/src/modules/auth/hooks/useAuth.mjs.map +1 -1
  43. package/dist/src/modules/auth/hooks/useAuthAdmin.d.mts +10 -19
  44. package/dist/src/modules/auth/hooks/useAuthAdmin.d.mts.map +1 -1
  45. package/dist/src/modules/auth/hooks/useAuthAdmin.d.ts +10 -19
  46. package/dist/src/modules/auth/hooks/useAuthAdmin.d.ts.map +1 -1
  47. package/dist/src/modules/auth/hooks/useAuthAdmin.js +20 -12
  48. package/dist/src/modules/auth/hooks/useAuthAdmin.js.map +1 -1
  49. package/dist/src/modules/auth/hooks/useAuthAdmin.mjs +14 -6
  50. package/dist/src/modules/auth/hooks/useAuthAdmin.mjs.map +1 -1
  51. package/dist/src/modules/auth/hooks/useAuthClient.d.mts +707 -0
  52. package/dist/src/modules/auth/hooks/useAuthClient.d.mts.map +1 -0
  53. package/dist/src/modules/auth/hooks/useAuthClient.d.ts +707 -0
  54. package/dist/src/modules/auth/hooks/useAuthClient.d.ts.map +1 -0
  55. package/dist/src/modules/auth/hooks/useAuthClient.js +12 -0
  56. package/dist/src/modules/auth/hooks/useAuthClient.js.map +1 -0
  57. package/dist/src/modules/auth/hooks/useAuthClient.mjs +11 -0
  58. package/dist/src/modules/auth/hooks/useAuthClient.mjs.map +1 -0
  59. package/dist/src/modules/auth/hooks/useMemberInvite.js +3 -2
  60. package/dist/src/modules/auth/hooks/useMemberInvite.js.map +1 -1
  61. package/dist/src/modules/auth/hooks/useMemberInvite.mjs +2 -1
  62. package/dist/src/modules/auth/hooks/useMemberInvite.mjs.map +1 -1
  63. package/dist/src/modules/auth/hooks/useOrganizationAccess.d.mts +1 -1
  64. package/dist/src/modules/auth/hooks/useOrganizationAccess.d.ts +1 -1
  65. package/dist/src/modules/auth/hooks/useSession.d.mts +4 -37
  66. package/dist/src/modules/auth/hooks/useSession.d.mts.map +1 -1
  67. package/dist/src/modules/auth/hooks/useSession.d.ts +4 -37
  68. package/dist/src/modules/auth/hooks/useSession.d.ts.map +1 -1
  69. package/dist/src/modules/auth/hooks/useSession.js +3 -2
  70. package/dist/src/modules/auth/hooks/useSession.js.map +1 -1
  71. package/dist/src/modules/auth/hooks/useSession.mjs +3 -2
  72. package/dist/src/modules/auth/hooks/useSession.mjs.map +1 -1
  73. package/dist/src/modules/billing/components/BillingProvider.d.mts +1 -1
  74. package/dist/src/modules/billing/components/BillingProvider.d.mts.map +1 -1
  75. package/dist/src/modules/billing/components/BillingProvider.d.ts +1 -1
  76. package/dist/src/modules/billing/components/BillingProvider.d.ts.map +1 -1
  77. package/dist/src/modules/file/hooks/useS3Upload.d.mts +15 -2
  78. package/dist/src/modules/file/hooks/useS3Upload.d.mts.map +1 -1
  79. package/dist/src/modules/file/hooks/useS3Upload.d.ts +15 -2
  80. package/dist/src/modules/file/hooks/useS3Upload.d.ts.map +1 -1
  81. package/dist/src/modules/file/hooks/useS3Upload.js +29 -4
  82. package/dist/src/modules/file/hooks/useS3Upload.js.map +1 -1
  83. package/dist/src/modules/file/hooks/useS3Upload.mjs +29 -5
  84. package/dist/src/modules/file/hooks/useS3Upload.mjs.map +1 -1
  85. package/dist/src/modules/file/hooks/useUpload.d.mts +6 -4
  86. package/dist/src/modules/file/hooks/useUpload.d.mts.map +1 -1
  87. package/dist/src/modules/file/hooks/useUpload.d.ts +6 -4
  88. package/dist/src/modules/file/hooks/useUpload.d.ts.map +1 -1
  89. package/dist/src/modules/file/hooks/useUpload.js +10 -7
  90. package/dist/src/modules/file/hooks/useUpload.js.map +1 -1
  91. package/dist/src/modules/file/hooks/useUpload.mjs +10 -7
  92. package/dist/src/modules/file/hooks/useUpload.mjs.map +1 -1
  93. package/dist/src/modules/table/hooks/useQueryWithParams.d.mts +2 -2
  94. package/dist/src/modules/table/hooks/useQueryWithParams.d.mts.map +1 -1
  95. package/dist/src/modules/table/hooks/useQueryWithParams.d.ts +2 -2
  96. package/dist/src/modules/table/hooks/useQueryWithParams.d.ts.map +1 -1
  97. package/dist/src/modules/table/hooks/useQueryWithParams.js.map +1 -1
  98. package/dist/src/modules/table/hooks/useQueryWithParams.mjs.map +1 -1
  99. package/dist/src/modules/table/hooks/useTableQueryParams.d.mts +7 -0
  100. package/dist/src/modules/table/hooks/useTableQueryParams.d.mts.map +1 -0
  101. package/dist/src/modules/table/hooks/useTableQueryParams.d.ts +7 -0
  102. package/dist/src/modules/table/hooks/useTableQueryParams.d.ts.map +1 -0
  103. package/dist/src/modules/table/hooks/useTableQueryParams.js +95 -0
  104. package/dist/src/modules/table/hooks/useTableQueryParams.js.map +1 -0
  105. package/dist/src/modules/table/hooks/useTableQueryParams.mjs +94 -0
  106. package/dist/src/modules/table/hooks/useTableQueryParams.mjs.map +1 -0
  107. package/dist/src/modules/table/queryParams.d.mts +34 -0
  108. package/dist/src/modules/table/queryParams.d.mts.map +1 -0
  109. package/dist/src/modules/table/queryParams.d.ts +34 -0
  110. package/dist/src/modules/table/queryParams.d.ts.map +1 -0
  111. package/dist/src/modules/table/{hooks/useNuqsQueryParams.js → queryParams.js} +14 -130
  112. package/dist/src/modules/table/queryParams.js.map +1 -0
  113. package/dist/src/modules/table/{hooks/useNuqsQueryParams.mjs → queryParams.mjs} +10 -130
  114. package/dist/src/modules/table/queryParams.mjs.map +1 -0
  115. package/dist/src/utils/date.d.mts +1 -1
  116. package/package.json +24 -6
  117. package/dist/src/modules/table/hooks/useDateRangeFilter.d.mts +0 -34
  118. package/dist/src/modules/table/hooks/useDateRangeFilter.d.mts.map +0 -1
  119. package/dist/src/modules/table/hooks/useDateRangeFilter.d.ts +0 -34
  120. package/dist/src/modules/table/hooks/useDateRangeFilter.d.ts.map +0 -1
  121. package/dist/src/modules/table/hooks/useDateRangeFilter.js +0 -30
  122. package/dist/src/modules/table/hooks/useDateRangeFilter.js.map +0 -1
  123. package/dist/src/modules/table/hooks/useDateRangeFilter.mjs +0 -29
  124. package/dist/src/modules/table/hooks/useDateRangeFilter.mjs.map +0 -1
  125. package/dist/src/modules/table/hooks/useNuqsQueryParams.d.mts +0 -34
  126. package/dist/src/modules/table/hooks/useNuqsQueryParams.d.mts.map +0 -1
  127. package/dist/src/modules/table/hooks/useNuqsQueryParams.d.ts +0 -34
  128. package/dist/src/modules/table/hooks/useNuqsQueryParams.d.ts.map +0 -1
  129. package/dist/src/modules/table/hooks/useNuqsQueryParams.js.map +0 -1
  130. package/dist/src/modules/table/hooks/useNuqsQueryParams.mjs.map +0 -1
  131. package/dist/src/modules/table/hooks/useNuqsTable.d.mts +0 -46
  132. package/dist/src/modules/table/hooks/useNuqsTable.d.mts.map +0 -1
  133. package/dist/src/modules/table/hooks/useNuqsTable.d.ts +0 -46
  134. package/dist/src/modules/table/hooks/useNuqsTable.d.ts.map +0 -1
  135. package/dist/src/modules/table/hooks/useNuqsTable.js +0 -58
  136. package/dist/src/modules/table/hooks/useNuqsTable.js.map +0 -1
  137. package/dist/src/modules/table/hooks/useNuqsTable.mjs +0 -58
  138. package/dist/src/modules/table/hooks/useNuqsTable.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuthClient.d.ts","names":[],"sources":["../../../../../src/modules/auth/hooks/useAuthClient.ts"],"mappings":";;;;iBAIgB,aAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAGimD,kBAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;UAA+wG,qBAAA,CAAA,WAAA;;;;;;;;;;;;;;;;;YAAx5D,YAAA;;;eAA2F,WAAA,IAAA,WAAA;;;;;eAA+U,eAAA;kBAA+C,kBAAA;;;WAAwG,WAAA;eAAwC,eAAA;;qBAAqF,cAAA;cAAyC,WAAA;gBAAgD,QAAA,EAAhD,qBAAA,CAAgD,eAAA,KAAA,OAAA;;;;;qBAAA,qBAAA,CAAA,UAAA;;;;;;;;;;;;;;;;;;;;kCAA27B,YAAA;;cAAA,qBAAA,CAAmG,gBAAA,UAAA,IAAA,UAAA,IAAA;kBAAA,qBAAA,CAAmG,gBAAA;;;;;uBAAuM,IAAA"}
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_src_modules_auth_auth_lib = require("../auth.lib.js");
3
+ const require_src_modules_auth_auth_context = require("../auth.context.js");
4
+ let react = require("react");
5
+ //#region src/modules/auth/hooks/useAuthClient.ts
6
+ function useAuthClient() {
7
+ return (0, react.useContext)(require_src_modules_auth_auth_context.authProviderContext).authClient ?? require_src_modules_auth_auth_lib.getAuthClient();
8
+ }
9
+ //#endregion
10
+ exports.useAuthClient = useAuthClient;
11
+
12
+ //# sourceMappingURL=useAuthClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuthClient.js","names":["authProviderContext","getAuthClient"],"sources":["../../../../../src/modules/auth/hooks/useAuthClient.ts"],"sourcesContent":["import { useContext } from \"react\";\r\nimport { authProviderContext } from \"../auth.context\";\r\nimport { getAuthClient } from \"../auth.lib\";\r\n\r\nexport function useAuthClient() {\r\n return useContext(authProviderContext).authClient ?? getAuthClient();\r\n}\r\n"],"mappings":";;;;;AAIA,SAAgB,gBAAgB;AAC9B,SAAA,GAAA,MAAA,YAAkBA,sCAAAA,oBAAoB,CAAC,cAAcC,kCAAAA,eAAe"}
@@ -0,0 +1,11 @@
1
+ import { getAuthClient } from "../auth.lib.mjs";
2
+ import { authProviderContext } from "../auth.context.mjs";
3
+ import { useContext } from "react";
4
+ //#region src/modules/auth/hooks/useAuthClient.ts
5
+ function useAuthClient() {
6
+ return useContext(authProviderContext).authClient ?? getAuthClient();
7
+ }
8
+ //#endregion
9
+ export { useAuthClient };
10
+
11
+ //# sourceMappingURL=useAuthClient.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuthClient.mjs","names":[],"sources":["../../../../../src/modules/auth/hooks/useAuthClient.ts"],"sourcesContent":["import { useContext } from \"react\";\r\nimport { authProviderContext } from \"../auth.context\";\r\nimport { getAuthClient } from \"../auth.lib\";\r\n\r\nexport function useAuthClient() {\r\n return useContext(authProviderContext).authClient ?? getAuthClient();\r\n}\r\n"],"mappings":";;;;AAIA,SAAgB,gBAAgB;AAC9B,QAAO,WAAW,oBAAoB,CAAC,cAAc,eAAe"}
@@ -1,18 +1,19 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_src_modules_auth_auth_lib = require("../auth.lib.js");
2
+ const require_src_modules_auth_hooks_useAuthClient = require("./useAuthClient.js");
3
3
  const require_src_modules_auth_hooks_useOrganizationAccess = require("./useOrganizationAccess.js");
4
4
  let _tanstack_react_query = require("@tanstack/react-query");
5
5
  //#region src/modules/auth/hooks/useMemberInvite.ts
6
6
  function useAuthMemberInvite(options, props) {
7
7
  const { managerRoles = ["admin", "owner"], onInvalidateScopedQueries } = props ?? {};
8
8
  const { onSuccess, ...rest } = options;
9
+ const authClient = require_src_modules_auth_hooks_useAuthClient.useAuthClient();
9
10
  const { refreshOrganizationQueries, activeOrganizationId } = require_src_modules_auth_hooks_useOrganizationAccess.useOrganizationAccess({
10
11
  managerRoles,
11
12
  onInvalidateScopedQueries
12
13
  });
13
14
  return (0, _tanstack_react_query.useMutation)({
14
15
  mutationFn: async ({ email, role }) => {
15
- const { error } = await require_src_modules_auth_auth_lib.authClient.organization.inviteMember({
16
+ const { error } = await authClient.organization.inviteMember({
16
17
  organizationId: activeOrganizationId,
17
18
  email: email.trim(),
18
19
  role
@@ -1 +1 @@
1
- {"version":3,"file":"useMemberInvite.js","names":["useOrganizationAccess","authClient"],"sources":["../../../../../src/modules/auth/hooks/useMemberInvite.ts"],"sourcesContent":["import { type UseMutationOptions, useMutation } from \"@tanstack/react-query\";\r\nimport { authClient } from \"../auth.lib\";\r\nimport {\r\n type AuthOrganizationRole,\r\n type UseOrganizationAccessProps,\r\n useOrganizationAccess,\r\n} from \"./useOrganizationAccess\";\r\n\r\ntype Variables = { email: string; role: AuthOrganizationRole };\r\n\r\nexport function useAuthMemberInvite(\r\n options: Omit<UseMutationOptions<void, Error, Variables, unknown>, \"mutationFn\">,\r\n props?: UseOrganizationAccessProps\r\n): ReturnType<typeof useMutation<void, Error, Variables, unknown>> {\r\n const { managerRoles = [\"admin\", \"owner\"], onInvalidateScopedQueries } = props ?? {};\r\n const { onSuccess, ...rest } = options;\r\n const { refreshOrganizationQueries, activeOrganizationId } = useOrganizationAccess({\r\n managerRoles,\r\n onInvalidateScopedQueries,\r\n });\r\n return useMutation({\r\n mutationFn: async ({ email, role }: { email: string; role: AuthOrganizationRole }) => {\r\n const { error } = await authClient.organization.inviteMember({\r\n organizationId: activeOrganizationId,\r\n email: email.trim(),\r\n role,\r\n });\r\n if (error) throw new Error(error.message);\r\n },\r\n\r\n onSuccess: async (data, variables, context) => {\r\n await refreshOrganizationQueries();\r\n await onSuccess?.(data, variables, context);\r\n },\r\n ...rest,\r\n });\r\n}\r\n"],"mappings":";;;;;AAUA,SAAgB,oBACd,SACA,OACiE;CACjE,MAAM,EAAE,eAAe,CAAC,SAAS,QAAQ,EAAE,8BAA8B,SAAS,EAAE;CACpF,MAAM,EAAE,WAAW,GAAG,SAAS;CAC/B,MAAM,EAAE,4BAA4B,yBAAyBA,qDAAAA,sBAAsB;EACjF;EACA;EACD,CAAC;AACF,SAAA,GAAA,sBAAA,aAAmB;EACjB,YAAY,OAAO,EAAE,OAAO,WAA0D;GACpF,MAAM,EAAE,UAAU,MAAMC,kCAAAA,WAAW,aAAa,aAAa;IAC3D,gBAAgB;IAChB,OAAO,MAAM,MAAM;IACnB;IACD,CAAC;AACF,OAAI,MAAO,OAAM,IAAI,MAAM,MAAM,QAAQ;;EAG3C,WAAW,OAAO,MAAM,WAAW,YAAY;AAC7C,SAAM,4BAA4B;AAClC,SAAM,YAAY,MAAM,WAAW,QAAQ;;EAE7C,GAAG;EACJ,CAAC"}
1
+ {"version":3,"file":"useMemberInvite.js","names":["useAuthClient","useOrganizationAccess"],"sources":["../../../../../src/modules/auth/hooks/useMemberInvite.ts"],"sourcesContent":["import { type UseMutationOptions, useMutation } from \"@tanstack/react-query\";\r\nimport { useAuthClient } from \"./useAuthClient\";\r\nimport {\r\n type AuthOrganizationRole,\r\n type UseOrganizationAccessProps,\r\n useOrganizationAccess,\r\n} from \"./useOrganizationAccess\";\r\n\r\ntype Variables = { email: string; role: AuthOrganizationRole };\r\n\r\nexport function useAuthMemberInvite(\r\n options: Omit<UseMutationOptions<void, Error, Variables, unknown>, \"mutationFn\">,\r\n props?: UseOrganizationAccessProps\r\n): ReturnType<typeof useMutation<void, Error, Variables, unknown>> {\r\n const { managerRoles = [\"admin\", \"owner\"], onInvalidateScopedQueries } = props ?? {};\r\n const { onSuccess, ...rest } = options;\r\n const authClient = useAuthClient();\r\n const { refreshOrganizationQueries, activeOrganizationId } = useOrganizationAccess({\r\n managerRoles,\r\n onInvalidateScopedQueries,\r\n });\r\n return useMutation({\r\n mutationFn: async ({ email, role }: { email: string; role: AuthOrganizationRole }) => {\r\n const { error } = await authClient.organization.inviteMember({\r\n organizationId: activeOrganizationId,\r\n email: email.trim(),\r\n role,\r\n });\r\n if (error) throw new Error(error.message);\r\n },\r\n\r\n onSuccess: async (data, variables, context) => {\r\n await refreshOrganizationQueries();\r\n await onSuccess?.(data, variables, context);\r\n },\r\n ...rest,\r\n });\r\n}\r\n"],"mappings":";;;;;AAUA,SAAgB,oBACd,SACA,OACiE;CACjE,MAAM,EAAE,eAAe,CAAC,SAAS,QAAQ,EAAE,8BAA8B,SAAS,EAAE;CACpF,MAAM,EAAE,WAAW,GAAG,SAAS;CAC/B,MAAM,aAAaA,6CAAAA,eAAe;CAClC,MAAM,EAAE,4BAA4B,yBAAyBC,qDAAAA,sBAAsB;EACjF;EACA;EACD,CAAC;AACF,SAAA,GAAA,sBAAA,aAAmB;EACjB,YAAY,OAAO,EAAE,OAAO,WAA0D;GACpF,MAAM,EAAE,UAAU,MAAM,WAAW,aAAa,aAAa;IAC3D,gBAAgB;IAChB,OAAO,MAAM,MAAM;IACnB;IACD,CAAC;AACF,OAAI,MAAO,OAAM,IAAI,MAAM,MAAM,QAAQ;;EAG3C,WAAW,OAAO,MAAM,WAAW,YAAY;AAC7C,SAAM,4BAA4B;AAClC,SAAM,YAAY,MAAM,WAAW,QAAQ;;EAE7C,GAAG;EACJ,CAAC"}
@@ -1,10 +1,11 @@
1
- import { authClient } from "../auth.lib.mjs";
1
+ import { useAuthClient } from "./useAuthClient.mjs";
2
2
  import { useOrganizationAccess } from "./useOrganizationAccess.mjs";
3
3
  import { useMutation } from "@tanstack/react-query";
4
4
  //#region src/modules/auth/hooks/useMemberInvite.ts
5
5
  function useAuthMemberInvite(options, props) {
6
6
  const { managerRoles = ["admin", "owner"], onInvalidateScopedQueries } = props ?? {};
7
7
  const { onSuccess, ...rest } = options;
8
+ const authClient = useAuthClient();
8
9
  const { refreshOrganizationQueries, activeOrganizationId } = useOrganizationAccess({
9
10
  managerRoles,
10
11
  onInvalidateScopedQueries
@@ -1 +1 @@
1
- {"version":3,"file":"useMemberInvite.mjs","names":[],"sources":["../../../../../src/modules/auth/hooks/useMemberInvite.ts"],"sourcesContent":["import { type UseMutationOptions, useMutation } from \"@tanstack/react-query\";\r\nimport { authClient } from \"../auth.lib\";\r\nimport {\r\n type AuthOrganizationRole,\r\n type UseOrganizationAccessProps,\r\n useOrganizationAccess,\r\n} from \"./useOrganizationAccess\";\r\n\r\ntype Variables = { email: string; role: AuthOrganizationRole };\r\n\r\nexport function useAuthMemberInvite(\r\n options: Omit<UseMutationOptions<void, Error, Variables, unknown>, \"mutationFn\">,\r\n props?: UseOrganizationAccessProps\r\n): ReturnType<typeof useMutation<void, Error, Variables, unknown>> {\r\n const { managerRoles = [\"admin\", \"owner\"], onInvalidateScopedQueries } = props ?? {};\r\n const { onSuccess, ...rest } = options;\r\n const { refreshOrganizationQueries, activeOrganizationId } = useOrganizationAccess({\r\n managerRoles,\r\n onInvalidateScopedQueries,\r\n });\r\n return useMutation({\r\n mutationFn: async ({ email, role }: { email: string; role: AuthOrganizationRole }) => {\r\n const { error } = await authClient.organization.inviteMember({\r\n organizationId: activeOrganizationId,\r\n email: email.trim(),\r\n role,\r\n });\r\n if (error) throw new Error(error.message);\r\n },\r\n\r\n onSuccess: async (data, variables, context) => {\r\n await refreshOrganizationQueries();\r\n await onSuccess?.(data, variables, context);\r\n },\r\n ...rest,\r\n });\r\n}\r\n"],"mappings":";;;;AAUA,SAAgB,oBACd,SACA,OACiE;CACjE,MAAM,EAAE,eAAe,CAAC,SAAS,QAAQ,EAAE,8BAA8B,SAAS,EAAE;CACpF,MAAM,EAAE,WAAW,GAAG,SAAS;CAC/B,MAAM,EAAE,4BAA4B,yBAAyB,sBAAsB;EACjF;EACA;EACD,CAAC;AACF,QAAO,YAAY;EACjB,YAAY,OAAO,EAAE,OAAO,WAA0D;GACpF,MAAM,EAAE,UAAU,MAAM,WAAW,aAAa,aAAa;IAC3D,gBAAgB;IAChB,OAAO,MAAM,MAAM;IACnB;IACD,CAAC;AACF,OAAI,MAAO,OAAM,IAAI,MAAM,MAAM,QAAQ;;EAG3C,WAAW,OAAO,MAAM,WAAW,YAAY;AAC7C,SAAM,4BAA4B;AAClC,SAAM,YAAY,MAAM,WAAW,QAAQ;;EAE7C,GAAG;EACJ,CAAC"}
1
+ {"version":3,"file":"useMemberInvite.mjs","names":[],"sources":["../../../../../src/modules/auth/hooks/useMemberInvite.ts"],"sourcesContent":["import { type UseMutationOptions, useMutation } from \"@tanstack/react-query\";\r\nimport { useAuthClient } from \"./useAuthClient\";\r\nimport {\r\n type AuthOrganizationRole,\r\n type UseOrganizationAccessProps,\r\n useOrganizationAccess,\r\n} from \"./useOrganizationAccess\";\r\n\r\ntype Variables = { email: string; role: AuthOrganizationRole };\r\n\r\nexport function useAuthMemberInvite(\r\n options: Omit<UseMutationOptions<void, Error, Variables, unknown>, \"mutationFn\">,\r\n props?: UseOrganizationAccessProps\r\n): ReturnType<typeof useMutation<void, Error, Variables, unknown>> {\r\n const { managerRoles = [\"admin\", \"owner\"], onInvalidateScopedQueries } = props ?? {};\r\n const { onSuccess, ...rest } = options;\r\n const authClient = useAuthClient();\r\n const { refreshOrganizationQueries, activeOrganizationId } = useOrganizationAccess({\r\n managerRoles,\r\n onInvalidateScopedQueries,\r\n });\r\n return useMutation({\r\n mutationFn: async ({ email, role }: { email: string; role: AuthOrganizationRole }) => {\r\n const { error } = await authClient.organization.inviteMember({\r\n organizationId: activeOrganizationId,\r\n email: email.trim(),\r\n role,\r\n });\r\n if (error) throw new Error(error.message);\r\n },\r\n\r\n onSuccess: async (data, variables, context) => {\r\n await refreshOrganizationQueries();\r\n await onSuccess?.(data, variables, context);\r\n },\r\n ...rest,\r\n });\r\n}\r\n"],"mappings":";;;;AAUA,SAAgB,oBACd,SACA,OACiE;CACjE,MAAM,EAAE,eAAe,CAAC,SAAS,QAAQ,EAAE,8BAA8B,SAAS,EAAE;CACpF,MAAM,EAAE,WAAW,GAAG,SAAS;CAC/B,MAAM,aAAa,eAAe;CAClC,MAAM,EAAE,4BAA4B,yBAAyB,sBAAsB;EACjF;EACA;EACD,CAAC;AACF,QAAO,YAAY;EACjB,YAAY,OAAO,EAAE,OAAO,WAA0D;GACpF,MAAM,EAAE,UAAU,MAAM,WAAW,aAAa,aAAa;IAC3D,gBAAgB;IAChB,OAAO,MAAM,MAAM;IACnB;IACD,CAAC;AACF,OAAI,MAAO,OAAM,IAAI,MAAM,MAAM,QAAQ;;EAG3C,WAAW,OAAO,MAAM,WAAW,YAAY;AAC7C,SAAM,4BAA4B;AAClC,SAAM,YAAY,MAAM,WAAW,QAAQ;;EAE7C,GAAG;EACJ,CAAC"}
@@ -9,7 +9,7 @@ declare function useOrganizationAccess({
9
9
  managerRoles,
10
10
  onInvalidateScopedQueries
11
11
  }: UseOrganizationAccessProps): {
12
- activeOrganizationId: string;
12
+ activeOrganizationId: any;
13
13
  activeOrganizationRole: string;
14
14
  canManageOrganization: boolean;
15
15
  refreshOrganizationQueries: () => Promise<void>;
@@ -9,7 +9,7 @@ declare function useOrganizationAccess({
9
9
  managerRoles,
10
10
  onInvalidateScopedQueries
11
11
  }: UseOrganizationAccessProps): {
12
- activeOrganizationId: string;
12
+ activeOrganizationId: any;
13
13
  activeOrganizationRole: string;
14
14
  canManageOrganization: boolean;
15
15
  refreshOrganizationQueries: () => Promise<void>;
@@ -1,44 +1,11 @@
1
+ import { AuthSession } from "../auth.context.mjs";
2
+
1
3
  //#region src/modules/auth/hooks/useSession.d.ts
2
4
  declare function useSession(): {
3
5
  isLoading: boolean;
4
- data: ({
5
- user: {
6
- id: string;
7
- createdAt: Date;
8
- updatedAt: Date;
9
- email: string;
10
- emailVerified: boolean;
11
- name: string;
12
- image?: string | null | undefined;
13
- banned: boolean | null | undefined;
14
- role?: string | null | undefined;
15
- banReason?: string | null | undefined;
16
- banExpires?: Date | null | undefined;
17
- metadata?: string | null | undefined;
18
- onboarding?: number | null | undefined;
19
- preferences?: string | null | undefined;
20
- flags?: string | null | undefined;
21
- stripeCustomerId?: string | null | undefined;
22
- };
23
- session: {
24
- id: string;
25
- createdAt: Date;
26
- updatedAt: Date;
27
- userId: string;
28
- expiresAt: Date;
29
- token: string;
30
- ipAddress?: string | null | undefined;
31
- userAgent?: string | null | undefined;
32
- activeOrganizationId?: string | null | undefined;
33
- activeTeamId?: string | null | undefined;
34
- impersonatedBy?: string | null | undefined;
35
- activeTeamRole?: string | null | undefined;
36
- activeOrganizationRole?: string | null | undefined;
37
- activeOrganizationType?: string | null | undefined;
38
- };
39
- } | null) | null;
6
+ data: AuthSession | null;
40
7
  signOut: () => void;
41
- registerSession: (onSuccess: () => void) => void;
8
+ registerSession: (onSuccess?: () => void) => void;
42
9
  };
43
10
  //#endregion
44
11
  export { useSession };
@@ -1 +1 @@
1
- {"version":3,"file":"useSession.d.mts","names":[],"sources":["../../../../../src/modules/auth/hooks/useSession.ts"],"mappings":";iBAGgB,UAAA,CAAA"}
1
+ {"version":3,"file":"useSession.d.mts","names":[],"sources":["../../../../../src/modules/auth/hooks/useSession.ts"],"mappings":";;;iBAGgB,UAAA,CAAA;;QAAU,WAAA"}
@@ -1,44 +1,11 @@
1
+ import { AuthSession } from "../auth.context.js";
2
+
1
3
  //#region src/modules/auth/hooks/useSession.d.ts
2
4
  declare function useSession(): {
3
5
  isLoading: boolean;
4
- data: ({
5
- user: {
6
- id: string;
7
- createdAt: Date;
8
- updatedAt: Date;
9
- email: string;
10
- emailVerified: boolean;
11
- name: string;
12
- image?: string | null | undefined;
13
- banned: boolean | null | undefined;
14
- role?: string | null | undefined;
15
- banReason?: string | null | undefined;
16
- banExpires?: Date | null | undefined;
17
- metadata?: string | null | undefined;
18
- onboarding?: number | null | undefined;
19
- preferences?: string | null | undefined;
20
- flags?: string | null | undefined;
21
- stripeCustomerId?: string | null | undefined;
22
- };
23
- session: {
24
- id: string;
25
- createdAt: Date;
26
- updatedAt: Date;
27
- userId: string;
28
- expiresAt: Date;
29
- token: string;
30
- ipAddress?: string | null | undefined;
31
- userAgent?: string | null | undefined;
32
- activeOrganizationId?: string | null | undefined;
33
- activeTeamId?: string | null | undefined;
34
- impersonatedBy?: string | null | undefined;
35
- activeTeamRole?: string | null | undefined;
36
- activeOrganizationRole?: string | null | undefined;
37
- activeOrganizationType?: string | null | undefined;
38
- };
39
- } | null) | null;
6
+ data: AuthSession | null;
40
7
  signOut: () => void;
41
- registerSession: (onSuccess: () => void) => void;
8
+ registerSession: (onSuccess?: () => void) => void;
42
9
  };
43
10
  //#endregion
44
11
  export { useSession };
@@ -1 +1 @@
1
- {"version":3,"file":"useSession.d.ts","names":[],"sources":["../../../../../src/modules/auth/hooks/useSession.ts"],"mappings":";iBAGgB,UAAA,CAAA"}
1
+ {"version":3,"file":"useSession.d.ts","names":[],"sources":["../../../../../src/modules/auth/hooks/useSession.ts"],"mappings":";;;iBAGgB,UAAA,CAAA;;QAAU,WAAA"}
@@ -1,9 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_src_modules_auth_components_AuthProvider = require("../components/AuthProvider.js");
2
+ const require_src_modules_auth_auth_context = require("../auth.context.js");
3
3
  let react = require("react");
4
4
  //#region src/modules/auth/hooks/useSession.ts
5
5
  function useSession() {
6
- return (0, react.useContext)(require_src_modules_auth_components_AuthProvider.authProviderContext);
6
+ const { authClient: _authClient, ...session } = (0, react.useContext)(require_src_modules_auth_auth_context.authProviderContext);
7
+ return session;
7
8
  }
8
9
  //#endregion
9
10
  exports.useSession = useSession;
@@ -1 +1 @@
1
- {"version":3,"file":"useSession.js","names":["authProviderContext"],"sources":["../../../../../src/modules/auth/hooks/useSession.ts"],"sourcesContent":["import { useContext } from \"react\";\r\nimport { authProviderContext } from \"../components/AuthProvider\";\r\n\r\nexport function useSession() {\r\n return useContext(authProviderContext);\r\n}\r\n"],"mappings":";;;;AAGA,SAAgB,aAAa;AAC3B,SAAA,GAAA,MAAA,YAAkBA,iDAAAA,oBAAoB"}
1
+ {"version":3,"file":"useSession.js","names":["authProviderContext"],"sources":["../../../../../src/modules/auth/hooks/useSession.ts"],"sourcesContent":["import { useContext } from \"react\";\r\nimport { authProviderContext } from \"../auth.context\";\r\n\r\nexport function useSession() {\r\n const { authClient: _authClient, ...session } = useContext(authProviderContext);\r\n return session;\r\n}\r\n"],"mappings":";;;;AAGA,SAAgB,aAAa;CAC3B,MAAM,EAAE,YAAY,aAAa,GAAG,aAAA,GAAA,MAAA,YAAuBA,sCAAAA,oBAAoB;AAC/E,QAAO"}
@@ -1,8 +1,9 @@
1
- import { authProviderContext } from "../components/AuthProvider.mjs";
1
+ import { authProviderContext } from "../auth.context.mjs";
2
2
  import { useContext } from "react";
3
3
  //#region src/modules/auth/hooks/useSession.ts
4
4
  function useSession() {
5
- return useContext(authProviderContext);
5
+ const { authClient: _authClient, ...session } = useContext(authProviderContext);
6
+ return session;
6
7
  }
7
8
  //#endregion
8
9
  export { useSession };
@@ -1 +1 @@
1
- {"version":3,"file":"useSession.mjs","names":[],"sources":["../../../../../src/modules/auth/hooks/useSession.ts"],"sourcesContent":["import { useContext } from \"react\";\r\nimport { authProviderContext } from \"../components/AuthProvider\";\r\n\r\nexport function useSession() {\r\n return useContext(authProviderContext);\r\n}\r\n"],"mappings":";;;AAGA,SAAgB,aAAa;AAC3B,QAAO,WAAW,oBAAoB"}
1
+ {"version":3,"file":"useSession.mjs","names":[],"sources":["../../../../../src/modules/auth/hooks/useSession.ts"],"sourcesContent":["import { useContext } from \"react\";\r\nimport { authProviderContext } from \"../auth.context\";\r\n\r\nexport function useSession() {\r\n const { authClient: _authClient, ...session } = useContext(authProviderContext);\r\n return session;\r\n}\r\n"],"mappings":";;;AAGA,SAAgB,aAAa;CAC3B,MAAM,EAAE,YAAY,aAAa,GAAG,YAAY,WAAW,oBAAoB;AAC/E,QAAO"}
@@ -17,7 +17,7 @@ declare function BillingProvider({
17
17
  loader?: React.ReactNode;
18
18
  planPage: React.ReactNode;
19
19
  skipPlanCheck?: boolean;
20
- }): string | number | bigint | boolean | _$react_jsx_runtime0.JSX.Element | Iterable<_$react.ReactNode> | Promise<string | number | bigint | boolean | _$react.ReactPortal | _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>> | Iterable<_$react.ReactNode> | null | undefined> | null | undefined;
20
+ }): string | number | bigint | boolean | Iterable<_$react.ReactNode> | Promise<string | number | bigint | boolean | _$react.ReactPortal | _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>> | Iterable<_$react.ReactNode> | null | undefined> | _$react_jsx_runtime0.JSX.Element | null | undefined;
21
21
  //#endregion
22
22
  export { BillingProvider, billingProviderContext };
23
23
  //# sourceMappingURL=BillingProvider.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BillingProvider.d.mts","names":[],"sources":["../../../../../src/modules/billing/components/BillingProvider.tsx"],"mappings":";;;;;cAMa,sBAAA,EAEQ,OAAA,CAFc,OAAA;;QAE3B,aAAA;AAAA;AAAA,iBAMQ,eAAA,CAAA;EACd,QAAA;EACA,MAAA;EACA,QAAA;EACA;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,aAAA;AAAA,yCACD,oBAAA,CAAA,GAAA,CAAA,OAAA,GAAA,QAAA,CAAA,OAAA,CAAA,SAAA,IAAA,OAAA,sCAAA,OAAA,CAAA,WAAA,GAAA,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,OAAA,CAAA,SAAA"}
1
+ {"version":3,"file":"BillingProvider.d.mts","names":[],"sources":["../../../../../src/modules/billing/components/BillingProvider.tsx"],"mappings":";;;;;cAMa,sBAAA,EAEQ,OAAA,CAFc,OAAA;;QAE3B,aAAA;AAAA;AAAA,iBAMQ,eAAA,CAAA;EACd,QAAA;EACA,MAAA;EACA,QAAA;EACA;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,aAAA;AAAA,yCACD,QAAA,CAF0B,OAAA,CAE1B,SAAA,IAAA,OAAA,sCAAA,OAAA,CAAA,WAAA,GAAA,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,OAAA,CAAA,SAAA,wBAAA,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -17,7 +17,7 @@ declare function BillingProvider({
17
17
  loader?: React.ReactNode;
18
18
  planPage: React.ReactNode;
19
19
  skipPlanCheck?: boolean;
20
- }): string | number | bigint | boolean | _$react_jsx_runtime0.JSX.Element | Iterable<_$react.ReactNode> | Promise<string | number | bigint | boolean | _$react.ReactPortal | _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>> | Iterable<_$react.ReactNode> | null | undefined> | null | undefined;
20
+ }): string | number | bigint | boolean | Iterable<_$react.ReactNode> | Promise<string | number | bigint | boolean | _$react.ReactPortal | _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>> | Iterable<_$react.ReactNode> | null | undefined> | _$react_jsx_runtime0.JSX.Element | null | undefined;
21
21
  //#endregion
22
22
  export { BillingProvider, billingProviderContext };
23
23
  //# sourceMappingURL=BillingProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BillingProvider.d.ts","names":[],"sources":["../../../../../src/modules/billing/components/BillingProvider.tsx"],"mappings":";;;;;cAMa,sBAAA,EAEQ,OAAA,CAFc,OAAA;;QAE3B,aAAA;AAAA;AAAA,iBAMQ,eAAA,CAAA;EACd,QAAA;EACA,MAAA;EACA,QAAA;EACA;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,aAAA;AAAA,yCACD,oBAAA,CAAA,GAAA,CAAA,OAAA,GAAA,QAAA,CAAA,OAAA,CAAA,SAAA,IAAA,OAAA,sCAAA,OAAA,CAAA,WAAA,GAAA,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,OAAA,CAAA,SAAA"}
1
+ {"version":3,"file":"BillingProvider.d.ts","names":[],"sources":["../../../../../src/modules/billing/components/BillingProvider.tsx"],"mappings":";;;;;cAMa,sBAAA,EAEQ,OAAA,CAFc,OAAA;;QAE3B,aAAA;AAAA;AAAA,iBAMQ,eAAA,CAAA;EACd,QAAA;EACA,MAAA;EACA,QAAA;EACA;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,aAAA;AAAA,yCACD,QAAA,CAF0B,OAAA,CAE1B,SAAA,IAAA,OAAA,sCAAA,OAAA,CAAA,WAAA,GAAA,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,OAAA,CAAA,SAAA,wBAAA,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,7 +1,20 @@
1
1
  //#region src/modules/file/hooks/useS3Upload.d.ts
2
2
  type S3UploadStatus = "idle" | "uploading" | "success" | "error";
3
+ type UploadBlobInput = Blob | {
4
+ uri: string;
5
+ name?: string;
6
+ type?: string;
7
+ size?: number;
8
+ };
9
+ type ResolvedUploadBlob = {
10
+ blob: Blob;
11
+ name: string;
12
+ type: string;
13
+ size: number;
14
+ };
15
+ declare function resolveUploadBlob(file: UploadBlobInput): Promise<ResolvedUploadBlob>;
3
16
  declare function useS3Upload(serverUrlOverride?: string): {
4
- upload: (file: File | Blob, prefix?: string) => Promise<string>;
17
+ upload: (file: UploadBlobInput, prefix?: string) => Promise<string>;
5
18
  progress: number;
6
19
  status: S3UploadStatus;
7
20
  error: string | null;
@@ -9,5 +22,5 @@ declare function useS3Upload(serverUrlOverride?: string): {
9
22
  reset: () => void;
10
23
  };
11
24
  //#endregion
12
- export { S3UploadStatus, useS3Upload };
25
+ export { ResolvedUploadBlob, S3UploadStatus, UploadBlobInput, resolveUploadBlob, useS3Upload };
13
26
  //# sourceMappingURL=useS3Upload.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useS3Upload.d.mts","names":[],"sources":["../../../../../src/modules/file/hooks/useS3Upload.ts"],"mappings":";KAGY,cAAA;AAAA,iBAiBI,WAAA,CAAY,iBAAA;iBASX,IAAA,GAAO,IAAA,EAAI,MAAA,cAAiB,OAAA"}
1
+ {"version":3,"file":"useS3Upload.d.mts","names":[],"sources":["../../../../../src/modules/file/hooks/useS3Upload.ts"],"mappings":";KAGY,cAAA;AAAA,KAEA,eAAA,GACR,IAAA;EAEE,GAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,KAGM,kBAAA;EACV,IAAA,EAAM,IAAA;EACN,IAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,iBAsCoB,iBAAA,CAAkB,IAAA,EAAM,eAAA,GAAkB,OAAA,CAAQ,kBAAA;AAAA,iBAcxD,WAAA,CAAY,iBAAA;iBASX,eAAA,EAAe,MAAA,cAAiB,OAAA"}
@@ -1,7 +1,20 @@
1
1
  //#region src/modules/file/hooks/useS3Upload.d.ts
2
2
  type S3UploadStatus = "idle" | "uploading" | "success" | "error";
3
+ type UploadBlobInput = Blob | {
4
+ uri: string;
5
+ name?: string;
6
+ type?: string;
7
+ size?: number;
8
+ };
9
+ type ResolvedUploadBlob = {
10
+ blob: Blob;
11
+ name: string;
12
+ type: string;
13
+ size: number;
14
+ };
15
+ declare function resolveUploadBlob(file: UploadBlobInput): Promise<ResolvedUploadBlob>;
3
16
  declare function useS3Upload(serverUrlOverride?: string): {
4
- upload: (file: File | Blob, prefix?: string) => Promise<string>;
17
+ upload: (file: UploadBlobInput, prefix?: string) => Promise<string>;
5
18
  progress: number;
6
19
  status: S3UploadStatus;
7
20
  error: string | null;
@@ -9,5 +22,5 @@ declare function useS3Upload(serverUrlOverride?: string): {
9
22
  reset: () => void;
10
23
  };
11
24
  //#endregion
12
- export { S3UploadStatus, useS3Upload };
25
+ export { ResolvedUploadBlob, S3UploadStatus, UploadBlobInput, resolveUploadBlob, useS3Upload };
13
26
  //# sourceMappingURL=useS3Upload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useS3Upload.d.ts","names":[],"sources":["../../../../../src/modules/file/hooks/useS3Upload.ts"],"mappings":";KAGY,cAAA;AAAA,iBAiBI,WAAA,CAAY,iBAAA;iBASX,IAAA,GAAO,IAAA,EAAI,MAAA,cAAiB,OAAA"}
1
+ {"version":3,"file":"useS3Upload.d.ts","names":[],"sources":["../../../../../src/modules/file/hooks/useS3Upload.ts"],"mappings":";KAGY,cAAA;AAAA,KAEA,eAAA,GACR,IAAA;EAEE,GAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,KAGM,kBAAA;EACV,IAAA,EAAM,IAAA;EACN,IAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,iBAsCoB,iBAAA,CAAkB,IAAA,EAAM,eAAA,GAAkB,OAAA,CAAQ,kBAAA;AAAA,iBAcxD,WAAA,CAAY,iBAAA;iBASX,eAAA,EAAe,MAAA,cAAiB,OAAA"}
@@ -14,6 +14,29 @@ async function getPresignedUrl(filename, filetype, serverUrl) {
14
14
  if (!res.ok) throw new Error("Failed to get presigned URL");
15
15
  return (await res.json()).url;
16
16
  }
17
+ function isBlobInput(file) {
18
+ return typeof Blob !== "undefined" && file instanceof Blob;
19
+ }
20
+ function getInputName(file) {
21
+ if (!isBlobInput(file)) return file.name ?? `upload-${Date.now()}`;
22
+ return "name" in file && typeof file.name === "string" ? file.name : `upload-${Date.now()}`;
23
+ }
24
+ function getInputType(file, blob) {
25
+ if (!isBlobInput(file)) return file.type ?? blob.type ?? "application/octet-stream";
26
+ return file.type || "application/octet-stream";
27
+ }
28
+ async function resolveUploadBlob(file) {
29
+ const blob = isBlobInput(file) ? file : await fetch(file.uri).then((response) => response.blob());
30
+ return {
31
+ blob,
32
+ name: getInputName(file),
33
+ type: getInputType(file, blob),
34
+ size: "size" in file && typeof file.size === "number" ? file.size : blob.size
35
+ };
36
+ }
37
+ function createUploadId() {
38
+ return globalThis.crypto?.randomUUID?.() ?? Math.random().toString(36).slice(2, 11);
39
+ }
17
40
  function useS3Upload(serverUrlOverride) {
18
41
  const { serverUrl } = require_src_modules_app_hooks_useAppConfig.useAppConfig();
19
42
  const resolvedServerUrl = serverUrlOverride ?? serverUrl;
@@ -28,10 +51,11 @@ function useS3Upload(serverUrlOverride) {
28
51
  setError(null);
29
52
  setUploadedUrl(null);
30
53
  try {
31
- const extension = (file instanceof File ? file.name : `upload-${Date.now()}`).split(".").pop() || "";
32
- const uuid = crypto.randomUUID();
54
+ const resolvedFile = await resolveUploadBlob(file);
55
+ const extension = resolvedFile.name.split(".").pop() || "";
56
+ const uuid = createUploadId();
33
57
  const filename = prefix ? `${prefix}/${uuid}${extension ? `.${extension}` : ""}` : `${uuid}${extension ? `.${extension}` : ""}`;
34
- const filetype = file instanceof File ? file.type : "application/octet-stream";
58
+ const filetype = resolvedFile.type;
35
59
  const presignedUrl = await getPresignedUrl(filename, filetype, resolvedServerUrl);
36
60
  return await new Promise((resolve, reject) => {
37
61
  const xhr = new XMLHttpRequest();
@@ -57,7 +81,7 @@ function useS3Upload(serverUrlOverride) {
57
81
  setError("Network error during upload");
58
82
  reject(/* @__PURE__ */ new Error("Network error during upload"));
59
83
  };
60
- xhr.send(file);
84
+ xhr.send(resolvedFile.blob);
61
85
  });
62
86
  } catch (err) {
63
87
  setStatus("error");
@@ -78,6 +102,7 @@ function useS3Upload(serverUrlOverride) {
78
102
  };
79
103
  }
80
104
  //#endregion
105
+ exports.resolveUploadBlob = resolveUploadBlob;
81
106
  exports.useS3Upload = useS3Upload;
82
107
 
83
108
  //# sourceMappingURL=useS3Upload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useS3Upload.js","names":["useAppConfig"],"sources":["../../../../../src/modules/file/hooks/useS3Upload.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\nimport { useAppConfig } from \"../../app/hooks/useAppConfig\";\r\n\r\nexport type S3UploadStatus = \"idle\" | \"uploading\" | \"success\" | \"error\";\r\n\r\nasync function getPresignedUrl(\r\n filename: string,\r\n filetype: string,\r\n serverUrl: string\r\n): Promise<string> {\r\n const res = await fetch(`${serverUrl}/upload/s3-presigned-url`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ filename, filetype }),\r\n });\r\n if (!res.ok) throw new Error(\"Failed to get presigned URL\");\r\n const data = (await res.json()) as { url: string };\r\n return data.url;\r\n}\r\n\r\nexport function useS3Upload(serverUrlOverride?: string) {\r\n const { serverUrl } = useAppConfig();\r\n const resolvedServerUrl = serverUrlOverride ?? serverUrl;\r\n const [progress, setProgress] = useState<number>(0);\r\n const [status, setStatus] = useState<S3UploadStatus>(\"idle\");\r\n const [error, setError] = useState<string | null>(null);\r\n const [uploadedUrl, setUploadedUrl] = useState<string | null>(null);\r\n\r\n const upload = useCallback(\r\n async (file: File | Blob, prefix?: string) => {\r\n setProgress(0);\r\n setStatus(\"uploading\");\r\n setError(null);\r\n setUploadedUrl(null);\r\n try {\r\n const originalFilename = file instanceof File ? file.name : `upload-${Date.now()}`;\r\n const extension = originalFilename.split(\".\").pop() || \"\";\r\n const uuid = crypto.randomUUID();\r\n const filename = prefix\r\n ? `${prefix}/${uuid}${extension ? `.${extension}` : \"\"}`\r\n : `${uuid}${extension ? `.${extension}` : \"\"}`;\r\n const filetype = file instanceof File ? file.type : \"application/octet-stream\";\r\n const presignedUrl = await getPresignedUrl(filename, filetype, resolvedServerUrl);\r\n\r\n return await new Promise<string>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"PUT\", presignedUrl);\r\n xhr.setRequestHeader(\"Content-Type\", filetype);\r\n\r\n xhr.upload.onprogress = (event) => {\r\n if (event.lengthComputable) {\r\n setProgress(Math.round((event.loaded * 100) / event.total));\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n setProgress(100);\r\n setStatus(\"success\");\r\n // Remove query params to get the public URL\r\n setUploadedUrl(presignedUrl.split(\"?\")[0]);\r\n resolve(filename);\r\n } else {\r\n setStatus(\"error\");\r\n setError(`Upload failed with status ${xhr.status}`);\r\n reject(new Error(`Upload failed with status ${xhr.status}`));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n setStatus(\"error\");\r\n setError(\"Network error during upload\");\r\n reject(new Error(\"Network error during upload\"));\r\n };\r\n\r\n xhr.send(file);\r\n });\r\n } catch (err: unknown) {\r\n setStatus(\"error\");\r\n setError(err instanceof Error ? err.message : \"Unknown error\");\r\n return Promise.reject(err);\r\n }\r\n },\r\n [resolvedServerUrl]\r\n );\r\n\r\n const reset = useCallback(() => {\r\n setProgress(0);\r\n setStatus(\"idle\");\r\n setError(null);\r\n setUploadedUrl(null);\r\n }, []);\r\n\r\n return { upload, progress, status, error, uploadedUrl, reset };\r\n}\r\n"],"mappings":";;;;AAKA,eAAe,gBACb,UACA,UACA,WACiB;CACjB,MAAM,MAAM,MAAM,MAAM,GAAG,UAAU,2BAA2B;EAC9D,QAAQ;EACR,SAAS,EAAE,gBAAgB,oBAAoB;EAC/C,MAAM,KAAK,UAAU;GAAE;GAAU;GAAU,CAAC;EAC7C,CAAC;AACF,KAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,8BAA8B;AAE3D,SADc,MAAM,IAAI,MAAM,EAClB;;AAGd,SAAgB,YAAY,mBAA4B;CACtD,MAAM,EAAE,cAAcA,2CAAAA,cAAc;CACpC,MAAM,oBAAoB,qBAAqB;CAC/C,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAgC,EAAE;CACnD,MAAM,CAAC,QAAQ,cAAA,GAAA,MAAA,UAAsC,OAAO;CAC5D,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAAoC,KAAK;CACvD,MAAM,CAAC,aAAa,mBAAA,GAAA,MAAA,UAA0C,KAAK;AAmEnE,QAAO;EAAE,SAAA,GAAA,MAAA,aAhEP,OAAO,MAAmB,WAAoB;AAC5C,eAAY,EAAE;AACd,aAAU,YAAY;AACtB,YAAS,KAAK;AACd,kBAAe,KAAK;AACpB,OAAI;IAEF,MAAM,aADmB,gBAAgB,OAAO,KAAK,OAAO,UAAU,KAAK,KAAK,IAC7C,MAAM,IAAI,CAAC,KAAK,IAAI;IACvD,MAAM,OAAO,OAAO,YAAY;IAChC,MAAM,WAAW,SACb,GAAG,OAAO,GAAG,OAAO,YAAY,IAAI,cAAc,OAClD,GAAG,OAAO,YAAY,IAAI,cAAc;IAC5C,MAAM,WAAW,gBAAgB,OAAO,KAAK,OAAO;IACpD,MAAM,eAAe,MAAM,gBAAgB,UAAU,UAAU,kBAAkB;AAEjF,WAAO,MAAM,IAAI,SAAiB,SAAS,WAAW;KACpD,MAAM,MAAM,IAAI,gBAAgB;AAChC,SAAI,KAAK,OAAO,aAAa;AAC7B,SAAI,iBAAiB,gBAAgB,SAAS;AAE9C,SAAI,OAAO,cAAc,UAAU;AACjC,UAAI,MAAM,iBACR,aAAY,KAAK,MAAO,MAAM,SAAS,MAAO,MAAM,MAAM,CAAC;;AAI/D,SAAI,eAAe;AACjB,UAAI,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK;AACzC,mBAAY,IAAI;AAChB,iBAAU,UAAU;AAEpB,sBAAe,aAAa,MAAM,IAAI,CAAC,GAAG;AAC1C,eAAQ,SAAS;aACZ;AACL,iBAAU,QAAQ;AAClB,gBAAS,6BAA6B,IAAI,SAAS;AACnD,8BAAO,IAAI,MAAM,6BAA6B,IAAI,SAAS,CAAC;;;AAIhE,SAAI,gBAAgB;AAClB,gBAAU,QAAQ;AAClB,eAAS,8BAA8B;AACvC,6BAAO,IAAI,MAAM,8BAA8B,CAAC;;AAGlD,SAAI,KAAK,KAAK;MACd;YACK,KAAc;AACrB,cAAU,QAAQ;AAClB,aAAS,eAAe,QAAQ,IAAI,UAAU,gBAAgB;AAC9D,WAAO,QAAQ,OAAO,IAAI;;KAG9B,CAAC,kBAAkB,CACpB;EASgB;EAAU;EAAQ;EAAO;EAAa,QAAA,GAAA,MAAA,mBAPvB;AAC9B,eAAY,EAAE;AACd,aAAU,OAAO;AACjB,YAAS,KAAK;AACd,kBAAe,KAAK;KACnB,EAAE,CAAC;EAEwD"}
1
+ {"version":3,"file":"useS3Upload.js","names":["useAppConfig"],"sources":["../../../../../src/modules/file/hooks/useS3Upload.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\nimport { useAppConfig } from \"../../app/hooks/useAppConfig\";\r\n\r\nexport type S3UploadStatus = \"idle\" | \"uploading\" | \"success\" | \"error\";\r\n\r\nexport type UploadBlobInput =\r\n | Blob\r\n | {\r\n uri: string;\r\n name?: string;\r\n type?: string;\r\n size?: number;\r\n };\r\n\r\nexport type ResolvedUploadBlob = {\r\n blob: Blob;\r\n name: string;\r\n type: string;\r\n size: number;\r\n};\r\n\r\nasync function getPresignedUrl(\r\n filename: string,\r\n filetype: string,\r\n serverUrl: string\r\n): Promise<string> {\r\n const res = await fetch(`${serverUrl}/upload/s3-presigned-url`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ filename, filetype }),\r\n });\r\n if (!res.ok) throw new Error(\"Failed to get presigned URL\");\r\n const data = (await res.json()) as { url: string };\r\n return data.url;\r\n}\r\n\r\nfunction isBlobInput(file: UploadBlobInput): file is Blob {\r\n return typeof Blob !== \"undefined\" && file instanceof Blob;\r\n}\r\n\r\nfunction getInputName(file: UploadBlobInput) {\r\n if (!isBlobInput(file)) {\r\n return file.name ?? `upload-${Date.now()}`;\r\n }\r\n\r\n return \"name\" in file && typeof file.name === \"string\" ? file.name : `upload-${Date.now()}`;\r\n}\r\n\r\nfunction getInputType(file: UploadBlobInput, blob: Blob) {\r\n if (!isBlobInput(file)) {\r\n return file.type ?? blob.type ?? \"application/octet-stream\";\r\n }\r\n\r\n return file.type || \"application/octet-stream\";\r\n}\r\n\r\nexport async function resolveUploadBlob(file: UploadBlobInput): Promise<ResolvedUploadBlob> {\r\n const blob = isBlobInput(file) ? file : await fetch(file.uri).then((response) => response.blob());\r\n return {\r\n blob,\r\n name: getInputName(file),\r\n type: getInputType(file, blob),\r\n size: \"size\" in file && typeof file.size === \"number\" ? file.size : blob.size,\r\n };\r\n}\r\n\r\nfunction createUploadId() {\r\n return globalThis.crypto?.randomUUID?.() ?? Math.random().toString(36).slice(2, 11);\r\n}\r\n\r\nexport function useS3Upload(serverUrlOverride?: string) {\r\n const { serverUrl } = useAppConfig();\r\n const resolvedServerUrl = serverUrlOverride ?? serverUrl;\r\n const [progress, setProgress] = useState<number>(0);\r\n const [status, setStatus] = useState<S3UploadStatus>(\"idle\");\r\n const [error, setError] = useState<string | null>(null);\r\n const [uploadedUrl, setUploadedUrl] = useState<string | null>(null);\r\n\r\n const upload = useCallback(\r\n async (file: UploadBlobInput, prefix?: string) => {\r\n setProgress(0);\r\n setStatus(\"uploading\");\r\n setError(null);\r\n setUploadedUrl(null);\r\n try {\r\n const resolvedFile = await resolveUploadBlob(file);\r\n const originalFilename = resolvedFile.name;\r\n const extension = originalFilename.split(\".\").pop() || \"\";\r\n const uuid = createUploadId();\r\n const filename = prefix\r\n ? `${prefix}/${uuid}${extension ? `.${extension}` : \"\"}`\r\n : `${uuid}${extension ? `.${extension}` : \"\"}`;\r\n const filetype = resolvedFile.type;\r\n const presignedUrl = await getPresignedUrl(filename, filetype, resolvedServerUrl);\r\n\r\n return await new Promise<string>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"PUT\", presignedUrl);\r\n xhr.setRequestHeader(\"Content-Type\", filetype);\r\n\r\n xhr.upload.onprogress = (event) => {\r\n if (event.lengthComputable) {\r\n setProgress(Math.round((event.loaded * 100) / event.total));\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n setProgress(100);\r\n setStatus(\"success\");\r\n // Remove query params to get the public URL\r\n setUploadedUrl(presignedUrl.split(\"?\")[0]);\r\n resolve(filename);\r\n } else {\r\n setStatus(\"error\");\r\n setError(`Upload failed with status ${xhr.status}`);\r\n reject(new Error(`Upload failed with status ${xhr.status}`));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n setStatus(\"error\");\r\n setError(\"Network error during upload\");\r\n reject(new Error(\"Network error during upload\"));\r\n };\r\n\r\n xhr.send(resolvedFile.blob);\r\n });\r\n } catch (err: unknown) {\r\n setStatus(\"error\");\r\n setError(err instanceof Error ? err.message : \"Unknown error\");\r\n return Promise.reject(err);\r\n }\r\n },\r\n [resolvedServerUrl]\r\n );\r\n\r\n const reset = useCallback(() => {\r\n setProgress(0);\r\n setStatus(\"idle\");\r\n setError(null);\r\n setUploadedUrl(null);\r\n }, []);\r\n\r\n return { upload, progress, status, error, uploadedUrl, reset };\r\n}\r\n"],"mappings":";;;;AAqBA,eAAe,gBACb,UACA,UACA,WACiB;CACjB,MAAM,MAAM,MAAM,MAAM,GAAG,UAAU,2BAA2B;EAC9D,QAAQ;EACR,SAAS,EAAE,gBAAgB,oBAAoB;EAC/C,MAAM,KAAK,UAAU;GAAE;GAAU;GAAU,CAAC;EAC7C,CAAC;AACF,KAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,8BAA8B;AAE3D,SADc,MAAM,IAAI,MAAM,EAClB;;AAGd,SAAS,YAAY,MAAqC;AACxD,QAAO,OAAO,SAAS,eAAe,gBAAgB;;AAGxD,SAAS,aAAa,MAAuB;AAC3C,KAAI,CAAC,YAAY,KAAK,CACpB,QAAO,KAAK,QAAQ,UAAU,KAAK,KAAK;AAG1C,QAAO,UAAU,QAAQ,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,UAAU,KAAK,KAAK;;AAG3F,SAAS,aAAa,MAAuB,MAAY;AACvD,KAAI,CAAC,YAAY,KAAK,CACpB,QAAO,KAAK,QAAQ,KAAK,QAAQ;AAGnC,QAAO,KAAK,QAAQ;;AAGtB,eAAsB,kBAAkB,MAAoD;CAC1F,MAAM,OAAO,YAAY,KAAK,GAAG,OAAO,MAAM,MAAM,KAAK,IAAI,CAAC,MAAM,aAAa,SAAS,MAAM,CAAC;AACjG,QAAO;EACL;EACA,MAAM,aAAa,KAAK;EACxB,MAAM,aAAa,MAAM,KAAK;EAC9B,MAAM,UAAU,QAAQ,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,KAAK;EAC1E;;AAGH,SAAS,iBAAiB;AACxB,QAAO,WAAW,QAAQ,cAAc,IAAI,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,GAAG;;AAGrF,SAAgB,YAAY,mBAA4B;CACtD,MAAM,EAAE,cAAcA,2CAAAA,cAAc;CACpC,MAAM,oBAAoB,qBAAqB;CAC/C,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAgC,EAAE;CACnD,MAAM,CAAC,QAAQ,cAAA,GAAA,MAAA,UAAsC,OAAO;CAC5D,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAAoC,KAAK;CACvD,MAAM,CAAC,aAAa,mBAAA,GAAA,MAAA,UAA0C,KAAK;AAoEnE,QAAO;EAAE,SAAA,GAAA,MAAA,aAjEP,OAAO,MAAuB,WAAoB;AAChD,eAAY,EAAE;AACd,aAAU,YAAY;AACtB,YAAS,KAAK;AACd,kBAAe,KAAK;AACpB,OAAI;IACF,MAAM,eAAe,MAAM,kBAAkB,KAAK;IAElD,MAAM,YADmB,aAAa,KACH,MAAM,IAAI,CAAC,KAAK,IAAI;IACvD,MAAM,OAAO,gBAAgB;IAC7B,MAAM,WAAW,SACb,GAAG,OAAO,GAAG,OAAO,YAAY,IAAI,cAAc,OAClD,GAAG,OAAO,YAAY,IAAI,cAAc;IAC5C,MAAM,WAAW,aAAa;IAC9B,MAAM,eAAe,MAAM,gBAAgB,UAAU,UAAU,kBAAkB;AAEjF,WAAO,MAAM,IAAI,SAAiB,SAAS,WAAW;KACpD,MAAM,MAAM,IAAI,gBAAgB;AAChC,SAAI,KAAK,OAAO,aAAa;AAC7B,SAAI,iBAAiB,gBAAgB,SAAS;AAE9C,SAAI,OAAO,cAAc,UAAU;AACjC,UAAI,MAAM,iBACR,aAAY,KAAK,MAAO,MAAM,SAAS,MAAO,MAAM,MAAM,CAAC;;AAI/D,SAAI,eAAe;AACjB,UAAI,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK;AACzC,mBAAY,IAAI;AAChB,iBAAU,UAAU;AAEpB,sBAAe,aAAa,MAAM,IAAI,CAAC,GAAG;AAC1C,eAAQ,SAAS;aACZ;AACL,iBAAU,QAAQ;AAClB,gBAAS,6BAA6B,IAAI,SAAS;AACnD,8BAAO,IAAI,MAAM,6BAA6B,IAAI,SAAS,CAAC;;;AAIhE,SAAI,gBAAgB;AAClB,gBAAU,QAAQ;AAClB,eAAS,8BAA8B;AACvC,6BAAO,IAAI,MAAM,8BAA8B,CAAC;;AAGlD,SAAI,KAAK,aAAa,KAAK;MAC3B;YACK,KAAc;AACrB,cAAU,QAAQ;AAClB,aAAS,eAAe,QAAQ,IAAI,UAAU,gBAAgB;AAC9D,WAAO,QAAQ,OAAO,IAAI;;KAG9B,CAAC,kBAAkB,CACpB;EASgB;EAAU;EAAQ;EAAO;EAAa,QAAA,GAAA,MAAA,mBAPvB;AAC9B,eAAY,EAAE;AACd,aAAU,OAAO;AACjB,YAAS,KAAK;AACd,kBAAe,KAAK;KACnB,EAAE,CAAC;EAEwD"}
@@ -13,6 +13,29 @@ async function getPresignedUrl(filename, filetype, serverUrl) {
13
13
  if (!res.ok) throw new Error("Failed to get presigned URL");
14
14
  return (await res.json()).url;
15
15
  }
16
+ function isBlobInput(file) {
17
+ return typeof Blob !== "undefined" && file instanceof Blob;
18
+ }
19
+ function getInputName(file) {
20
+ if (!isBlobInput(file)) return file.name ?? `upload-${Date.now()}`;
21
+ return "name" in file && typeof file.name === "string" ? file.name : `upload-${Date.now()}`;
22
+ }
23
+ function getInputType(file, blob) {
24
+ if (!isBlobInput(file)) return file.type ?? blob.type ?? "application/octet-stream";
25
+ return file.type || "application/octet-stream";
26
+ }
27
+ async function resolveUploadBlob(file) {
28
+ const blob = isBlobInput(file) ? file : await fetch(file.uri).then((response) => response.blob());
29
+ return {
30
+ blob,
31
+ name: getInputName(file),
32
+ type: getInputType(file, blob),
33
+ size: "size" in file && typeof file.size === "number" ? file.size : blob.size
34
+ };
35
+ }
36
+ function createUploadId() {
37
+ return globalThis.crypto?.randomUUID?.() ?? Math.random().toString(36).slice(2, 11);
38
+ }
16
39
  function useS3Upload(serverUrlOverride) {
17
40
  const { serverUrl } = useAppConfig();
18
41
  const resolvedServerUrl = serverUrlOverride ?? serverUrl;
@@ -27,10 +50,11 @@ function useS3Upload(serverUrlOverride) {
27
50
  setError(null);
28
51
  setUploadedUrl(null);
29
52
  try {
30
- const extension = (file instanceof File ? file.name : `upload-${Date.now()}`).split(".").pop() || "";
31
- const uuid = crypto.randomUUID();
53
+ const resolvedFile = await resolveUploadBlob(file);
54
+ const extension = resolvedFile.name.split(".").pop() || "";
55
+ const uuid = createUploadId();
32
56
  const filename = prefix ? `${prefix}/${uuid}${extension ? `.${extension}` : ""}` : `${uuid}${extension ? `.${extension}` : ""}`;
33
- const filetype = file instanceof File ? file.type : "application/octet-stream";
57
+ const filetype = resolvedFile.type;
34
58
  const presignedUrl = await getPresignedUrl(filename, filetype, resolvedServerUrl);
35
59
  return await new Promise((resolve, reject) => {
36
60
  const xhr = new XMLHttpRequest();
@@ -56,7 +80,7 @@ function useS3Upload(serverUrlOverride) {
56
80
  setError("Network error during upload");
57
81
  reject(/* @__PURE__ */ new Error("Network error during upload"));
58
82
  };
59
- xhr.send(file);
83
+ xhr.send(resolvedFile.blob);
60
84
  });
61
85
  } catch (err) {
62
86
  setStatus("error");
@@ -77,6 +101,6 @@ function useS3Upload(serverUrlOverride) {
77
101
  };
78
102
  }
79
103
  //#endregion
80
- export { useS3Upload };
104
+ export { resolveUploadBlob, useS3Upload };
81
105
 
82
106
  //# sourceMappingURL=useS3Upload.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useS3Upload.mjs","names":[],"sources":["../../../../../src/modules/file/hooks/useS3Upload.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\nimport { useAppConfig } from \"../../app/hooks/useAppConfig\";\r\n\r\nexport type S3UploadStatus = \"idle\" | \"uploading\" | \"success\" | \"error\";\r\n\r\nasync function getPresignedUrl(\r\n filename: string,\r\n filetype: string,\r\n serverUrl: string\r\n): Promise<string> {\r\n const res = await fetch(`${serverUrl}/upload/s3-presigned-url`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ filename, filetype }),\r\n });\r\n if (!res.ok) throw new Error(\"Failed to get presigned URL\");\r\n const data = (await res.json()) as { url: string };\r\n return data.url;\r\n}\r\n\r\nexport function useS3Upload(serverUrlOverride?: string) {\r\n const { serverUrl } = useAppConfig();\r\n const resolvedServerUrl = serverUrlOverride ?? serverUrl;\r\n const [progress, setProgress] = useState<number>(0);\r\n const [status, setStatus] = useState<S3UploadStatus>(\"idle\");\r\n const [error, setError] = useState<string | null>(null);\r\n const [uploadedUrl, setUploadedUrl] = useState<string | null>(null);\r\n\r\n const upload = useCallback(\r\n async (file: File | Blob, prefix?: string) => {\r\n setProgress(0);\r\n setStatus(\"uploading\");\r\n setError(null);\r\n setUploadedUrl(null);\r\n try {\r\n const originalFilename = file instanceof File ? file.name : `upload-${Date.now()}`;\r\n const extension = originalFilename.split(\".\").pop() || \"\";\r\n const uuid = crypto.randomUUID();\r\n const filename = prefix\r\n ? `${prefix}/${uuid}${extension ? `.${extension}` : \"\"}`\r\n : `${uuid}${extension ? `.${extension}` : \"\"}`;\r\n const filetype = file instanceof File ? file.type : \"application/octet-stream\";\r\n const presignedUrl = await getPresignedUrl(filename, filetype, resolvedServerUrl);\r\n\r\n return await new Promise<string>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"PUT\", presignedUrl);\r\n xhr.setRequestHeader(\"Content-Type\", filetype);\r\n\r\n xhr.upload.onprogress = (event) => {\r\n if (event.lengthComputable) {\r\n setProgress(Math.round((event.loaded * 100) / event.total));\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n setProgress(100);\r\n setStatus(\"success\");\r\n // Remove query params to get the public URL\r\n setUploadedUrl(presignedUrl.split(\"?\")[0]);\r\n resolve(filename);\r\n } else {\r\n setStatus(\"error\");\r\n setError(`Upload failed with status ${xhr.status}`);\r\n reject(new Error(`Upload failed with status ${xhr.status}`));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n setStatus(\"error\");\r\n setError(\"Network error during upload\");\r\n reject(new Error(\"Network error during upload\"));\r\n };\r\n\r\n xhr.send(file);\r\n });\r\n } catch (err: unknown) {\r\n setStatus(\"error\");\r\n setError(err instanceof Error ? err.message : \"Unknown error\");\r\n return Promise.reject(err);\r\n }\r\n },\r\n [resolvedServerUrl]\r\n );\r\n\r\n const reset = useCallback(() => {\r\n setProgress(0);\r\n setStatus(\"idle\");\r\n setError(null);\r\n setUploadedUrl(null);\r\n }, []);\r\n\r\n return { upload, progress, status, error, uploadedUrl, reset };\r\n}\r\n"],"mappings":";;;AAKA,eAAe,gBACb,UACA,UACA,WACiB;CACjB,MAAM,MAAM,MAAM,MAAM,GAAG,UAAU,2BAA2B;EAC9D,QAAQ;EACR,SAAS,EAAE,gBAAgB,oBAAoB;EAC/C,MAAM,KAAK,UAAU;GAAE;GAAU;GAAU,CAAC;EAC7C,CAAC;AACF,KAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,8BAA8B;AAE3D,SADc,MAAM,IAAI,MAAM,EAClB;;AAGd,SAAgB,YAAY,mBAA4B;CACtD,MAAM,EAAE,cAAc,cAAc;CACpC,MAAM,oBAAoB,qBAAqB;CAC/C,MAAM,CAAC,UAAU,eAAe,SAAiB,EAAE;CACnD,MAAM,CAAC,QAAQ,aAAa,SAAyB,OAAO;CAC5D,MAAM,CAAC,OAAO,YAAY,SAAwB,KAAK;CACvD,MAAM,CAAC,aAAa,kBAAkB,SAAwB,KAAK;AAmEnE,QAAO;EAAE,QAjEM,YACb,OAAO,MAAmB,WAAoB;AAC5C,eAAY,EAAE;AACd,aAAU,YAAY;AACtB,YAAS,KAAK;AACd,kBAAe,KAAK;AACpB,OAAI;IAEF,MAAM,aADmB,gBAAgB,OAAO,KAAK,OAAO,UAAU,KAAK,KAAK,IAC7C,MAAM,IAAI,CAAC,KAAK,IAAI;IACvD,MAAM,OAAO,OAAO,YAAY;IAChC,MAAM,WAAW,SACb,GAAG,OAAO,GAAG,OAAO,YAAY,IAAI,cAAc,OAClD,GAAG,OAAO,YAAY,IAAI,cAAc;IAC5C,MAAM,WAAW,gBAAgB,OAAO,KAAK,OAAO;IACpD,MAAM,eAAe,MAAM,gBAAgB,UAAU,UAAU,kBAAkB;AAEjF,WAAO,MAAM,IAAI,SAAiB,SAAS,WAAW;KACpD,MAAM,MAAM,IAAI,gBAAgB;AAChC,SAAI,KAAK,OAAO,aAAa;AAC7B,SAAI,iBAAiB,gBAAgB,SAAS;AAE9C,SAAI,OAAO,cAAc,UAAU;AACjC,UAAI,MAAM,iBACR,aAAY,KAAK,MAAO,MAAM,SAAS,MAAO,MAAM,MAAM,CAAC;;AAI/D,SAAI,eAAe;AACjB,UAAI,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK;AACzC,mBAAY,IAAI;AAChB,iBAAU,UAAU;AAEpB,sBAAe,aAAa,MAAM,IAAI,CAAC,GAAG;AAC1C,eAAQ,SAAS;aACZ;AACL,iBAAU,QAAQ;AAClB,gBAAS,6BAA6B,IAAI,SAAS;AACnD,8BAAO,IAAI,MAAM,6BAA6B,IAAI,SAAS,CAAC;;;AAIhE,SAAI,gBAAgB;AAClB,gBAAU,QAAQ;AAClB,eAAS,8BAA8B;AACvC,6BAAO,IAAI,MAAM,8BAA8B,CAAC;;AAGlD,SAAI,KAAK,KAAK;MACd;YACK,KAAc;AACrB,cAAU,QAAQ;AAClB,aAAS,eAAe,QAAQ,IAAI,UAAU,gBAAgB;AAC9D,WAAO,QAAQ,OAAO,IAAI;;KAG9B,CAAC,kBAAkB,CACpB;EASgB;EAAU;EAAQ;EAAO;EAAa,OAPzC,kBAAkB;AAC9B,eAAY,EAAE;AACd,aAAU,OAAO;AACjB,YAAS,KAAK;AACd,kBAAe,KAAK;KACnB,EAAE,CAAC;EAEwD"}
1
+ {"version":3,"file":"useS3Upload.mjs","names":[],"sources":["../../../../../src/modules/file/hooks/useS3Upload.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\r\nimport { useAppConfig } from \"../../app/hooks/useAppConfig\";\r\n\r\nexport type S3UploadStatus = \"idle\" | \"uploading\" | \"success\" | \"error\";\r\n\r\nexport type UploadBlobInput =\r\n | Blob\r\n | {\r\n uri: string;\r\n name?: string;\r\n type?: string;\r\n size?: number;\r\n };\r\n\r\nexport type ResolvedUploadBlob = {\r\n blob: Blob;\r\n name: string;\r\n type: string;\r\n size: number;\r\n};\r\n\r\nasync function getPresignedUrl(\r\n filename: string,\r\n filetype: string,\r\n serverUrl: string\r\n): Promise<string> {\r\n const res = await fetch(`${serverUrl}/upload/s3-presigned-url`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ filename, filetype }),\r\n });\r\n if (!res.ok) throw new Error(\"Failed to get presigned URL\");\r\n const data = (await res.json()) as { url: string };\r\n return data.url;\r\n}\r\n\r\nfunction isBlobInput(file: UploadBlobInput): file is Blob {\r\n return typeof Blob !== \"undefined\" && file instanceof Blob;\r\n}\r\n\r\nfunction getInputName(file: UploadBlobInput) {\r\n if (!isBlobInput(file)) {\r\n return file.name ?? `upload-${Date.now()}`;\r\n }\r\n\r\n return \"name\" in file && typeof file.name === \"string\" ? file.name : `upload-${Date.now()}`;\r\n}\r\n\r\nfunction getInputType(file: UploadBlobInput, blob: Blob) {\r\n if (!isBlobInput(file)) {\r\n return file.type ?? blob.type ?? \"application/octet-stream\";\r\n }\r\n\r\n return file.type || \"application/octet-stream\";\r\n}\r\n\r\nexport async function resolveUploadBlob(file: UploadBlobInput): Promise<ResolvedUploadBlob> {\r\n const blob = isBlobInput(file) ? file : await fetch(file.uri).then((response) => response.blob());\r\n return {\r\n blob,\r\n name: getInputName(file),\r\n type: getInputType(file, blob),\r\n size: \"size\" in file && typeof file.size === \"number\" ? file.size : blob.size,\r\n };\r\n}\r\n\r\nfunction createUploadId() {\r\n return globalThis.crypto?.randomUUID?.() ?? Math.random().toString(36).slice(2, 11);\r\n}\r\n\r\nexport function useS3Upload(serverUrlOverride?: string) {\r\n const { serverUrl } = useAppConfig();\r\n const resolvedServerUrl = serverUrlOverride ?? serverUrl;\r\n const [progress, setProgress] = useState<number>(0);\r\n const [status, setStatus] = useState<S3UploadStatus>(\"idle\");\r\n const [error, setError] = useState<string | null>(null);\r\n const [uploadedUrl, setUploadedUrl] = useState<string | null>(null);\r\n\r\n const upload = useCallback(\r\n async (file: UploadBlobInput, prefix?: string) => {\r\n setProgress(0);\r\n setStatus(\"uploading\");\r\n setError(null);\r\n setUploadedUrl(null);\r\n try {\r\n const resolvedFile = await resolveUploadBlob(file);\r\n const originalFilename = resolvedFile.name;\r\n const extension = originalFilename.split(\".\").pop() || \"\";\r\n const uuid = createUploadId();\r\n const filename = prefix\r\n ? `${prefix}/${uuid}${extension ? `.${extension}` : \"\"}`\r\n : `${uuid}${extension ? `.${extension}` : \"\"}`;\r\n const filetype = resolvedFile.type;\r\n const presignedUrl = await getPresignedUrl(filename, filetype, resolvedServerUrl);\r\n\r\n return await new Promise<string>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"PUT\", presignedUrl);\r\n xhr.setRequestHeader(\"Content-Type\", filetype);\r\n\r\n xhr.upload.onprogress = (event) => {\r\n if (event.lengthComputable) {\r\n setProgress(Math.round((event.loaded * 100) / event.total));\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n setProgress(100);\r\n setStatus(\"success\");\r\n // Remove query params to get the public URL\r\n setUploadedUrl(presignedUrl.split(\"?\")[0]);\r\n resolve(filename);\r\n } else {\r\n setStatus(\"error\");\r\n setError(`Upload failed with status ${xhr.status}`);\r\n reject(new Error(`Upload failed with status ${xhr.status}`));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n setStatus(\"error\");\r\n setError(\"Network error during upload\");\r\n reject(new Error(\"Network error during upload\"));\r\n };\r\n\r\n xhr.send(resolvedFile.blob);\r\n });\r\n } catch (err: unknown) {\r\n setStatus(\"error\");\r\n setError(err instanceof Error ? err.message : \"Unknown error\");\r\n return Promise.reject(err);\r\n }\r\n },\r\n [resolvedServerUrl]\r\n );\r\n\r\n const reset = useCallback(() => {\r\n setProgress(0);\r\n setStatus(\"idle\");\r\n setError(null);\r\n setUploadedUrl(null);\r\n }, []);\r\n\r\n return { upload, progress, status, error, uploadedUrl, reset };\r\n}\r\n"],"mappings":"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"}
@@ -1,8 +1,10 @@
1
+ import { UploadBlobInput } from "./useS3Upload.mjs";
2
+
1
3
  //#region src/modules/file/hooks/useUpload.d.ts
2
4
  type UploadStatus = "pending" | "uploading" | "completed" | "error";
3
5
  interface UploadFileTask {
4
6
  id: string;
5
- file: File;
7
+ file: UploadBlobInput;
6
8
  progress: number;
7
9
  status: UploadStatus;
8
10
  errorMessage?: string;
@@ -10,10 +12,10 @@ interface UploadFileTask {
10
12
  totalBytes: number;
11
13
  }
12
14
  declare function useFileUpload(): {
13
- upload: <T>(type: string, file: File) => Promise<T>;
15
+ upload: <T>(type: string, file: UploadBlobInput) => Promise<T>;
14
16
  reset: () => void;
15
17
  id?: string | undefined;
16
- file?: File | undefined;
18
+ file?: UploadBlobInput | undefined;
17
19
  progress?: number | undefined;
18
20
  status?: UploadStatus | undefined;
19
21
  errorMessage?: string;
@@ -23,7 +25,7 @@ declare function useFileUpload(): {
23
25
  declare function useMultipartUpload(): {
24
26
  uploadQueue: UploadFileTask[];
25
27
  overallProgress: number;
26
- uploadFiles: (type: string, files: File[]) => Promise<void>;
28
+ uploadFiles: (type: string, files: UploadBlobInput[]) => Promise<void>;
27
29
  reset: () => void;
28
30
  getTotalBytes: () => number;
29
31
  getTotalBytesUploaded: () => number;
@@ -1 +1 @@
1
- {"version":3,"file":"useUpload.d.mts","names":[],"sources":["../../../../../src/modules/file/hooks/useUpload.ts"],"mappings":";KAGY,YAAA;AAAA,UAEK,cAAA;EACf,EAAA;EACA,IAAA,EAAM,IAAA;EACN,QAAA;EACA,MAAA,EAAQ,YAAA;EACR,YAAA;EACA,aAAA;EACA,UAAA;AAAA;AAAA,iBAqEc,aAAA,CAAA;cAKJ,IAAA,UAAc,IAAA,EAAQ,IAAA,KAAO,OAAA,CAAQ,CAAA;;;;;;;;;;iBAmDjC,kBAAA,CAAA;;;8BA8DO,KAAA,EAAS,IAAA,OAAM,OAAA"}
1
+ {"version":3,"file":"useUpload.d.mts","names":[],"sources":["../../../../../src/modules/file/hooks/useUpload.ts"],"mappings":";;;KAIY,YAAA;AAAA,UAEK,cAAA;EACf,EAAA;EACA,IAAA,EAAM,eAAA;EACN,QAAA;EACA,MAAA,EAAQ,YAAA;EACR,YAAA;EACA,aAAA;EACA,UAAA;AAAA;AAAA,iBAyEc,aAAA,CAAA;cAKJ,IAAA,UAAc,IAAA,EAAQ,eAAA,KAAkB,OAAA,CAAQ,CAAA;;;;;;;;;;iBAmD5C,kBAAA,CAAA;;;8BA8DO,KAAA,EAAS,eAAA,OAAiB,OAAA"}