@fairu/sdk 1.0.1

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 (150) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +447 -0
  3. package/dist/FairuClient-BUObk5LJ.cjs +91 -0
  4. package/dist/FairuClient-BUObk5LJ.cjs.map +1 -0
  5. package/dist/FairuClient-CT-IPh8i.js +92 -0
  6. package/dist/FairuClient-CT-IPh8i.js.map +1 -0
  7. package/dist/FairuError-D8sSmRAa.js +214 -0
  8. package/dist/FairuError-D8sSmRAa.js.map +1 -0
  9. package/dist/FairuError-DWH_Nwk0.cjs +213 -0
  10. package/dist/FairuError-DWH_Nwk0.cjs.map +1 -0
  11. package/dist/FairuProvider-BRpRddCI.cjs +51 -0
  12. package/dist/FairuProvider-BRpRddCI.cjs.map +1 -0
  13. package/dist/FairuProvider-Tc0vFo5L.js +52 -0
  14. package/dist/FairuProvider-Tc0vFo5L.js.map +1 -0
  15. package/dist/FileProxyBuilder-D-jZpAtd.cjs +269 -0
  16. package/dist/FileProxyBuilder-D-jZpAtd.cjs.map +1 -0
  17. package/dist/FileProxyBuilder-vHw1zBpJ.js +270 -0
  18. package/dist/FileProxyBuilder-vHw1zBpJ.js.map +1 -0
  19. package/dist/FragmentBuilder-BinoxeVS.js +194 -0
  20. package/dist/FragmentBuilder-BinoxeVS.js.map +1 -0
  21. package/dist/FragmentBuilder-BuvIC0aT.cjs +193 -0
  22. package/dist/FragmentBuilder-BuvIC0aT.cjs.map +1 -0
  23. package/dist/UploadError-CHBJuChw.cjs +81 -0
  24. package/dist/UploadError-CHBJuChw.cjs.map +1 -0
  25. package/dist/UploadError-_gEcJqSS.js +82 -0
  26. package/dist/UploadError-_gEcJqSS.js.map +1 -0
  27. package/dist/client/FairuClient.d.ts +8 -0
  28. package/dist/client/FairuClient.d.ts.map +1 -0
  29. package/dist/client/FairuProvider.d.ts +78 -0
  30. package/dist/client/FairuProvider.d.ts.map +1 -0
  31. package/dist/client/cache.d.ts +6 -0
  32. package/dist/client/cache.d.ts.map +1 -0
  33. package/dist/client/config.d.ts +77 -0
  34. package/dist/client/config.d.ts.map +1 -0
  35. package/dist/client/index.d.ts +5 -0
  36. package/dist/client/index.d.ts.map +1 -0
  37. package/dist/errors/FairuError.d.ts +107 -0
  38. package/dist/errors/FairuError.d.ts.map +1 -0
  39. package/dist/errors/UploadError.d.ts +54 -0
  40. package/dist/errors/UploadError.d.ts.map +1 -0
  41. package/dist/errors/index.d.ts +3 -0
  42. package/dist/errors/index.d.ts.map +1 -0
  43. package/dist/fileproxy/FileProxyBuilder.d.ts +141 -0
  44. package/dist/fileproxy/FileProxyBuilder.d.ts.map +1 -0
  45. package/dist/fileproxy/index.d.ts +4 -0
  46. package/dist/fileproxy/index.d.ts.map +1 -0
  47. package/dist/fileproxy/types.d.ts +79 -0
  48. package/dist/fileproxy/types.d.ts.map +1 -0
  49. package/dist/fileproxy/useFileProxyUrl.d.ts +91 -0
  50. package/dist/fileproxy/useFileProxyUrl.d.ts.map +1 -0
  51. package/dist/fileproxy.cjs +10 -0
  52. package/dist/fileproxy.cjs.map +1 -0
  53. package/dist/fileproxy.d.ts +2 -0
  54. package/dist/fileproxy.js +10 -0
  55. package/dist/fileproxy.js.map +1 -0
  56. package/dist/fragments/FragmentBuilder.d.ts +107 -0
  57. package/dist/fragments/FragmentBuilder.d.ts.map +1 -0
  58. package/dist/fragments/FragmentRegistry.d.ts +93 -0
  59. package/dist/fragments/FragmentRegistry.d.ts.map +1 -0
  60. package/dist/fragments/index.d.ts +5 -0
  61. package/dist/fragments/index.d.ts.map +1 -0
  62. package/dist/fragments/predefined/assetFragments.d.ts +39 -0
  63. package/dist/fragments/predefined/assetFragments.d.ts.map +1 -0
  64. package/dist/fragments/predefined/copyrightFragments.d.ts +12 -0
  65. package/dist/fragments/predefined/copyrightFragments.d.ts.map +1 -0
  66. package/dist/fragments/predefined/folderFragments.d.ts +28 -0
  67. package/dist/fragments/predefined/folderFragments.d.ts.map +1 -0
  68. package/dist/fragments/predefined/galleryFragments.d.ts +24 -0
  69. package/dist/fragments/predefined/galleryFragments.d.ts.map +1 -0
  70. package/dist/fragments/predefined/index.d.ts +6 -0
  71. package/dist/fragments/predefined/index.d.ts.map +1 -0
  72. package/dist/fragments/predefined/licenseFragments.d.ts +12 -0
  73. package/dist/fragments/predefined/licenseFragments.d.ts.map +1 -0
  74. package/dist/fragments/types.d.ts +46 -0
  75. package/dist/fragments/types.d.ts.map +1 -0
  76. package/dist/fragments.cjs +403 -0
  77. package/dist/fragments.cjs.map +1 -0
  78. package/dist/fragments.d.ts +2 -0
  79. package/dist/fragments.js +403 -0
  80. package/dist/fragments.js.map +1 -0
  81. package/dist/generated/graphql.d.ts +3464 -0
  82. package/dist/generated/graphql.d.ts.map +1 -0
  83. package/dist/hooks/index.d.ts +3 -0
  84. package/dist/hooks/index.d.ts.map +1 -0
  85. package/dist/hooks/mutations/index.d.ts +5 -0
  86. package/dist/hooks/mutations/index.d.ts.map +1 -0
  87. package/dist/hooks/mutations/useAssetMutations.d.ts +66 -0
  88. package/dist/hooks/mutations/useAssetMutations.d.ts.map +1 -0
  89. package/dist/hooks/mutations/useFolderMutations.d.ts +69 -0
  90. package/dist/hooks/mutations/useFolderMutations.d.ts.map +1 -0
  91. package/dist/hooks/mutations/useGalleryMutations.d.ts +39 -0
  92. package/dist/hooks/mutations/useGalleryMutations.d.ts.map +1 -0
  93. package/dist/hooks/mutations/useUpdateAsset.d.ts +50 -0
  94. package/dist/hooks/mutations/useUpdateAsset.d.ts.map +1 -0
  95. package/dist/hooks/queries/index.d.ts +8 -0
  96. package/dist/hooks/queries/index.d.ts.map +1 -0
  97. package/dist/hooks/queries/useAsset.d.ts +46 -0
  98. package/dist/hooks/queries/useAsset.d.ts.map +1 -0
  99. package/dist/hooks/queries/useAssets.d.ts +58 -0
  100. package/dist/hooks/queries/useAssets.d.ts.map +1 -0
  101. package/dist/hooks/queries/useCopyright.d.ts +51 -0
  102. package/dist/hooks/queries/useCopyright.d.ts.map +1 -0
  103. package/dist/hooks/queries/useFolder.d.ts +93 -0
  104. package/dist/hooks/queries/useFolder.d.ts.map +1 -0
  105. package/dist/hooks/queries/useGallery.d.ts +101 -0
  106. package/dist/hooks/queries/useGallery.d.ts.map +1 -0
  107. package/dist/hooks/queries/useLicense.d.ts +63 -0
  108. package/dist/hooks/queries/useLicense.d.ts.map +1 -0
  109. package/dist/hooks/queries/useTenant.d.ts +89 -0
  110. package/dist/hooks/queries/useTenant.d.ts.map +1 -0
  111. package/dist/index.cjs +244 -0
  112. package/dist/index.cjs.map +1 -0
  113. package/dist/index.d.ts +18 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +244 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/react.cjs +596 -0
  118. package/dist/react.cjs.map +1 -0
  119. package/dist/react.d.ts +22 -0
  120. package/dist/react.d.ts.map +1 -0
  121. package/dist/react.js +596 -0
  122. package/dist/react.js.map +1 -0
  123. package/dist/upload/index.d.ts +4 -0
  124. package/dist/upload/index.d.ts.map +1 -0
  125. package/dist/upload/types.d.ts +96 -0
  126. package/dist/upload/types.d.ts.map +1 -0
  127. package/dist/upload/useMultipartUpload.d.ts +67 -0
  128. package/dist/upload/useMultipartUpload.d.ts.map +1 -0
  129. package/dist/upload/useUpload.d.ts +64 -0
  130. package/dist/upload/useUpload.d.ts.map +1 -0
  131. package/dist/upload.cjs +6 -0
  132. package/dist/upload.cjs.map +1 -0
  133. package/dist/upload.d.ts +2 -0
  134. package/dist/upload.js +6 -0
  135. package/dist/upload.js.map +1 -0
  136. package/dist/useFileProxyUrl-BCcux6re.cjs +87 -0
  137. package/dist/useFileProxyUrl-BCcux6re.cjs.map +1 -0
  138. package/dist/useFileProxyUrl-D_S1R_7O.js +88 -0
  139. package/dist/useFileProxyUrl-D_S1R_7O.js.map +1 -0
  140. package/dist/useMultipartUpload-BKnDbl8h.cjs +423 -0
  141. package/dist/useMultipartUpload-BKnDbl8h.cjs.map +1 -0
  142. package/dist/useMultipartUpload-CPK_PgUU.js +424 -0
  143. package/dist/useMultipartUpload-CPK_PgUU.js.map +1 -0
  144. package/dist/vanilla.cjs +219 -0
  145. package/dist/vanilla.cjs.map +1 -0
  146. package/dist/vanilla.d.ts +94 -0
  147. package/dist/vanilla.d.ts.map +1 -0
  148. package/dist/vanilla.js +220 -0
  149. package/dist/vanilla.js.map +1 -0
  150. package/package.json +177 -0
@@ -0,0 +1,214 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ class FairuError extends Error {
5
+ constructor(message, code, originalError) {
6
+ super(message);
7
+ __publicField(this, "code");
8
+ __publicField(this, "originalError");
9
+ this.name = "FairuError";
10
+ this.code = code;
11
+ this.originalError = originalError;
12
+ if (Error.captureStackTrace) {
13
+ Error.captureStackTrace(this, FairuError);
14
+ }
15
+ }
16
+ /**
17
+ * Create a FairuError from a urql CombinedError.
18
+ */
19
+ static fromCombinedError(error) {
20
+ var _a, _b;
21
+ if (error.graphQLErrors.length > 0) {
22
+ const graphqlError = error.graphQLErrors[0];
23
+ const category = (_a = graphqlError.extensions) == null ? void 0 : _a.category;
24
+ if (category === "validation") {
25
+ return new ValidationError(
26
+ graphqlError.message,
27
+ (_b = graphqlError.extensions) == null ? void 0 : _b.validation
28
+ );
29
+ }
30
+ if (category === "authentication") {
31
+ return new AuthenticationError(graphqlError.message);
32
+ }
33
+ return new GraphQLError(error.graphQLErrors);
34
+ }
35
+ if (error.networkError) {
36
+ return new FairuError(
37
+ `Network error: ${error.networkError.message}`,
38
+ "NETWORK_ERROR",
39
+ error.networkError
40
+ );
41
+ }
42
+ return new FairuError(error.message);
43
+ }
44
+ /**
45
+ * Check if this error is a network error.
46
+ */
47
+ isNetworkError() {
48
+ return this.code === "NETWORK_ERROR";
49
+ }
50
+ /**
51
+ * Convert error to a plain object for serialization.
52
+ */
53
+ toJSON() {
54
+ return {
55
+ name: this.name,
56
+ message: this.message,
57
+ code: this.code
58
+ };
59
+ }
60
+ }
61
+ class ValidationError extends FairuError {
62
+ constructor(message, validationErrors = {}) {
63
+ super(message, "VALIDATION_ERROR");
64
+ __publicField(this, "validationErrors");
65
+ this.name = "ValidationError";
66
+ this.validationErrors = validationErrors;
67
+ }
68
+ /**
69
+ * Get errors for a specific field.
70
+ */
71
+ getFieldErrors(field) {
72
+ return this.validationErrors[field] ?? [];
73
+ }
74
+ /**
75
+ * Check if a specific field has errors.
76
+ */
77
+ hasFieldError(field) {
78
+ return field in this.validationErrors;
79
+ }
80
+ /**
81
+ * Get all field names with errors.
82
+ */
83
+ getFields() {
84
+ return Object.keys(this.validationErrors);
85
+ }
86
+ /**
87
+ * Get the first error message for a field.
88
+ */
89
+ getFirstFieldError(field) {
90
+ var _a;
91
+ return (_a = this.validationErrors[field]) == null ? void 0 : _a[0];
92
+ }
93
+ /**
94
+ * Get all error messages as a flat array.
95
+ */
96
+ getAllMessages() {
97
+ return Object.values(this.validationErrors).flat();
98
+ }
99
+ /**
100
+ * Check if there are any validation errors.
101
+ */
102
+ hasErrors() {
103
+ return Object.keys(this.validationErrors).length > 0;
104
+ }
105
+ /**
106
+ * Convert to JSON for serialization.
107
+ */
108
+ toJSON() {
109
+ return {
110
+ ...super.toJSON(),
111
+ validationErrors: this.validationErrors
112
+ };
113
+ }
114
+ }
115
+ class AuthenticationError extends FairuError {
116
+ constructor(message = "Invalid or missing API token") {
117
+ super(message, "AUTHENTICATION_ERROR");
118
+ this.name = "AuthenticationError";
119
+ }
120
+ /**
121
+ * Check if this is an expired token error.
122
+ */
123
+ isTokenExpired() {
124
+ return this.message.toLowerCase().includes("expired");
125
+ }
126
+ /**
127
+ * Check if this is a missing token error.
128
+ */
129
+ isMissingToken() {
130
+ return this.message.toLowerCase().includes("missing");
131
+ }
132
+ }
133
+ class GraphQLError extends FairuError {
134
+ constructor(errors) {
135
+ const messages = errors.map((e) => e.message).join("; ");
136
+ super(messages, "GRAPHQL_ERROR");
137
+ __publicField(this, "graphqlErrors");
138
+ this.name = "GraphQLError";
139
+ this.graphqlErrors = errors;
140
+ }
141
+ /**
142
+ * Get the first GraphQL error.
143
+ */
144
+ getFirstError() {
145
+ return this.graphqlErrors[0];
146
+ }
147
+ /**
148
+ * Get all GraphQL errors.
149
+ */
150
+ getErrors() {
151
+ return this.graphqlErrors;
152
+ }
153
+ /**
154
+ * Check if any errors are validation errors.
155
+ */
156
+ hasValidationErrors() {
157
+ return this.graphqlErrors.some(
158
+ (e) => {
159
+ var _a;
160
+ return ((_a = e.extensions) == null ? void 0 : _a.category) === "validation";
161
+ }
162
+ );
163
+ }
164
+ /**
165
+ * Get validation errors as a record of field names to error messages.
166
+ */
167
+ getValidationErrors() {
168
+ var _a;
169
+ const validationErrors = {};
170
+ for (const error of this.graphqlErrors) {
171
+ if ((_a = error.extensions) == null ? void 0 : _a.validation) {
172
+ Object.assign(validationErrors, error.extensions.validation);
173
+ }
174
+ }
175
+ return validationErrors;
176
+ }
177
+ /**
178
+ * Check if any errors are authentication errors.
179
+ */
180
+ hasAuthenticationErrors() {
181
+ return this.graphqlErrors.some(
182
+ (e) => {
183
+ var _a;
184
+ return ((_a = e.extensions) == null ? void 0 : _a.category) === "authentication";
185
+ }
186
+ );
187
+ }
188
+ /**
189
+ * Get error paths.
190
+ */
191
+ getPaths() {
192
+ return this.graphqlErrors.map((e) => e.path);
193
+ }
194
+ /**
195
+ * Convert to JSON for serialization.
196
+ */
197
+ toJSON() {
198
+ return {
199
+ ...super.toJSON(),
200
+ errors: this.graphqlErrors.map((e) => ({
201
+ message: e.message,
202
+ path: e.path,
203
+ extensions: e.extensions
204
+ }))
205
+ };
206
+ }
207
+ }
208
+ export {
209
+ AuthenticationError as A,
210
+ FairuError as F,
211
+ GraphQLError as G,
212
+ ValidationError as V
213
+ };
214
+ //# sourceMappingURL=FairuError-D8sSmRAa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FairuError-D8sSmRAa.js","sources":["../src/errors/FairuError.ts"],"sourcesContent":["import type { CombinedError } from '@urql/core';\nimport type { GraphQLError as BaseGraphQLError } from 'graphql';\n\n/**\n * Base error class for all Fairu SDK errors.\n */\nexport class FairuError extends Error {\n public readonly code?: string;\n public readonly originalError?: Error;\n\n constructor(message: string, code?: string, originalError?: Error) {\n super(message);\n this.name = 'FairuError';\n this.code = code;\n this.originalError = originalError;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FairuError);\n }\n }\n\n /**\n * Create a FairuError from a urql CombinedError.\n */\n static fromCombinedError(error: CombinedError): FairuError {\n // Check for GraphQL errors first\n if (error.graphQLErrors.length > 0) {\n const graphqlError = error.graphQLErrors[0];\n const category = graphqlError.extensions?.category as string | undefined;\n\n // Handle validation errors\n if (category === 'validation') {\n return new ValidationError(\n graphqlError.message,\n graphqlError.extensions?.validation as Record<string, string[]>\n );\n }\n\n // Handle authentication errors\n if (category === 'authentication') {\n return new AuthenticationError(graphqlError.message);\n }\n\n // Return generic GraphQL error\n return new GraphQLError(error.graphQLErrors);\n }\n\n // Handle network errors\n if (error.networkError) {\n return new FairuError(\n `Network error: ${error.networkError.message}`,\n 'NETWORK_ERROR',\n error.networkError\n );\n }\n\n // Fallback to generic error\n return new FairuError(error.message);\n }\n\n /**\n * Check if this error is a network error.\n */\n isNetworkError(): boolean {\n return this.code === 'NETWORK_ERROR';\n }\n\n /**\n * Convert error to a plain object for serialization.\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n };\n }\n}\n\n/**\n * Error class for validation failures.\n */\nexport class ValidationError extends FairuError {\n public readonly validationErrors: Record<string, string[]>;\n\n constructor(\n message: string,\n validationErrors: Record<string, string[]> = {}\n ) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n this.validationErrors = validationErrors;\n }\n\n /**\n * Get errors for a specific field.\n */\n getFieldErrors(field: string): string[] {\n return this.validationErrors[field] ?? [];\n }\n\n /**\n * Check if a specific field has errors.\n */\n hasFieldError(field: string): boolean {\n return field in this.validationErrors;\n }\n\n /**\n * Get all field names with errors.\n */\n getFields(): string[] {\n return Object.keys(this.validationErrors);\n }\n\n /**\n * Get the first error message for a field.\n */\n getFirstFieldError(field: string): string | undefined {\n return this.validationErrors[field]?.[0];\n }\n\n /**\n * Get all error messages as a flat array.\n */\n getAllMessages(): string[] {\n return Object.values(this.validationErrors).flat();\n }\n\n /**\n * Check if there are any validation errors.\n */\n hasErrors(): boolean {\n return Object.keys(this.validationErrors).length > 0;\n }\n\n /**\n * Convert to JSON for serialization.\n */\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n validationErrors: this.validationErrors,\n };\n }\n}\n\n/**\n * Error class for authentication failures.\n */\nexport class AuthenticationError extends FairuError {\n constructor(message: string = 'Invalid or missing API token') {\n super(message, 'AUTHENTICATION_ERROR');\n this.name = 'AuthenticationError';\n }\n\n /**\n * Check if this is an expired token error.\n */\n isTokenExpired(): boolean {\n return this.message.toLowerCase().includes('expired');\n }\n\n /**\n * Check if this is a missing token error.\n */\n isMissingToken(): boolean {\n return this.message.toLowerCase().includes('missing');\n }\n}\n\n/**\n * Error class for GraphQL-specific errors.\n */\nexport class GraphQLError extends FairuError {\n public readonly graphqlErrors: readonly BaseGraphQLError[];\n\n constructor(errors: readonly BaseGraphQLError[]) {\n const messages = errors.map((e) => e.message).join('; ');\n super(messages, 'GRAPHQL_ERROR');\n this.name = 'GraphQLError';\n this.graphqlErrors = errors;\n }\n\n /**\n * Get the first GraphQL error.\n */\n getFirstError(): BaseGraphQLError | undefined {\n return this.graphqlErrors[0];\n }\n\n /**\n * Get all GraphQL errors.\n */\n getErrors(): readonly BaseGraphQLError[] {\n return this.graphqlErrors;\n }\n\n /**\n * Check if any errors are validation errors.\n */\n hasValidationErrors(): boolean {\n return this.graphqlErrors.some(\n (e) => e.extensions?.category === 'validation'\n );\n }\n\n /**\n * Get validation errors as a record of field names to error messages.\n */\n getValidationErrors(): Record<string, string[]> {\n const validationErrors: Record<string, string[]> = {};\n\n for (const error of this.graphqlErrors) {\n if (error.extensions?.validation) {\n Object.assign(validationErrors, error.extensions.validation);\n }\n }\n\n return validationErrors;\n }\n\n /**\n * Check if any errors are authentication errors.\n */\n hasAuthenticationErrors(): boolean {\n return this.graphqlErrors.some(\n (e) => e.extensions?.category === 'authentication'\n );\n }\n\n /**\n * Get error paths.\n */\n getPaths(): (readonly (string | number)[] | undefined)[] {\n return this.graphqlErrors.map((e) => e.path);\n }\n\n /**\n * Convert to JSON for serialization.\n */\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n errors: this.graphqlErrors.map((e) => ({\n message: e.message,\n path: e.path,\n extensions: e.extensions,\n })),\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ class FairuError extends Error {
6
+ constructor(message, code, originalError) {
7
+ super(message);
8
+ __publicField(this, "code");
9
+ __publicField(this, "originalError");
10
+ this.name = "FairuError";
11
+ this.code = code;
12
+ this.originalError = originalError;
13
+ if (Error.captureStackTrace) {
14
+ Error.captureStackTrace(this, FairuError);
15
+ }
16
+ }
17
+ /**
18
+ * Create a FairuError from a urql CombinedError.
19
+ */
20
+ static fromCombinedError(error) {
21
+ var _a, _b;
22
+ if (error.graphQLErrors.length > 0) {
23
+ const graphqlError = error.graphQLErrors[0];
24
+ const category = (_a = graphqlError.extensions) == null ? void 0 : _a.category;
25
+ if (category === "validation") {
26
+ return new ValidationError(
27
+ graphqlError.message,
28
+ (_b = graphqlError.extensions) == null ? void 0 : _b.validation
29
+ );
30
+ }
31
+ if (category === "authentication") {
32
+ return new AuthenticationError(graphqlError.message);
33
+ }
34
+ return new GraphQLError(error.graphQLErrors);
35
+ }
36
+ if (error.networkError) {
37
+ return new FairuError(
38
+ `Network error: ${error.networkError.message}`,
39
+ "NETWORK_ERROR",
40
+ error.networkError
41
+ );
42
+ }
43
+ return new FairuError(error.message);
44
+ }
45
+ /**
46
+ * Check if this error is a network error.
47
+ */
48
+ isNetworkError() {
49
+ return this.code === "NETWORK_ERROR";
50
+ }
51
+ /**
52
+ * Convert error to a plain object for serialization.
53
+ */
54
+ toJSON() {
55
+ return {
56
+ name: this.name,
57
+ message: this.message,
58
+ code: this.code
59
+ };
60
+ }
61
+ }
62
+ class ValidationError extends FairuError {
63
+ constructor(message, validationErrors = {}) {
64
+ super(message, "VALIDATION_ERROR");
65
+ __publicField(this, "validationErrors");
66
+ this.name = "ValidationError";
67
+ this.validationErrors = validationErrors;
68
+ }
69
+ /**
70
+ * Get errors for a specific field.
71
+ */
72
+ getFieldErrors(field) {
73
+ return this.validationErrors[field] ?? [];
74
+ }
75
+ /**
76
+ * Check if a specific field has errors.
77
+ */
78
+ hasFieldError(field) {
79
+ return field in this.validationErrors;
80
+ }
81
+ /**
82
+ * Get all field names with errors.
83
+ */
84
+ getFields() {
85
+ return Object.keys(this.validationErrors);
86
+ }
87
+ /**
88
+ * Get the first error message for a field.
89
+ */
90
+ getFirstFieldError(field) {
91
+ var _a;
92
+ return (_a = this.validationErrors[field]) == null ? void 0 : _a[0];
93
+ }
94
+ /**
95
+ * Get all error messages as a flat array.
96
+ */
97
+ getAllMessages() {
98
+ return Object.values(this.validationErrors).flat();
99
+ }
100
+ /**
101
+ * Check if there are any validation errors.
102
+ */
103
+ hasErrors() {
104
+ return Object.keys(this.validationErrors).length > 0;
105
+ }
106
+ /**
107
+ * Convert to JSON for serialization.
108
+ */
109
+ toJSON() {
110
+ return {
111
+ ...super.toJSON(),
112
+ validationErrors: this.validationErrors
113
+ };
114
+ }
115
+ }
116
+ class AuthenticationError extends FairuError {
117
+ constructor(message = "Invalid or missing API token") {
118
+ super(message, "AUTHENTICATION_ERROR");
119
+ this.name = "AuthenticationError";
120
+ }
121
+ /**
122
+ * Check if this is an expired token error.
123
+ */
124
+ isTokenExpired() {
125
+ return this.message.toLowerCase().includes("expired");
126
+ }
127
+ /**
128
+ * Check if this is a missing token error.
129
+ */
130
+ isMissingToken() {
131
+ return this.message.toLowerCase().includes("missing");
132
+ }
133
+ }
134
+ class GraphQLError extends FairuError {
135
+ constructor(errors) {
136
+ const messages = errors.map((e) => e.message).join("; ");
137
+ super(messages, "GRAPHQL_ERROR");
138
+ __publicField(this, "graphqlErrors");
139
+ this.name = "GraphQLError";
140
+ this.graphqlErrors = errors;
141
+ }
142
+ /**
143
+ * Get the first GraphQL error.
144
+ */
145
+ getFirstError() {
146
+ return this.graphqlErrors[0];
147
+ }
148
+ /**
149
+ * Get all GraphQL errors.
150
+ */
151
+ getErrors() {
152
+ return this.graphqlErrors;
153
+ }
154
+ /**
155
+ * Check if any errors are validation errors.
156
+ */
157
+ hasValidationErrors() {
158
+ return this.graphqlErrors.some(
159
+ (e) => {
160
+ var _a;
161
+ return ((_a = e.extensions) == null ? void 0 : _a.category) === "validation";
162
+ }
163
+ );
164
+ }
165
+ /**
166
+ * Get validation errors as a record of field names to error messages.
167
+ */
168
+ getValidationErrors() {
169
+ var _a;
170
+ const validationErrors = {};
171
+ for (const error of this.graphqlErrors) {
172
+ if ((_a = error.extensions) == null ? void 0 : _a.validation) {
173
+ Object.assign(validationErrors, error.extensions.validation);
174
+ }
175
+ }
176
+ return validationErrors;
177
+ }
178
+ /**
179
+ * Check if any errors are authentication errors.
180
+ */
181
+ hasAuthenticationErrors() {
182
+ return this.graphqlErrors.some(
183
+ (e) => {
184
+ var _a;
185
+ return ((_a = e.extensions) == null ? void 0 : _a.category) === "authentication";
186
+ }
187
+ );
188
+ }
189
+ /**
190
+ * Get error paths.
191
+ */
192
+ getPaths() {
193
+ return this.graphqlErrors.map((e) => e.path);
194
+ }
195
+ /**
196
+ * Convert to JSON for serialization.
197
+ */
198
+ toJSON() {
199
+ return {
200
+ ...super.toJSON(),
201
+ errors: this.graphqlErrors.map((e) => ({
202
+ message: e.message,
203
+ path: e.path,
204
+ extensions: e.extensions
205
+ }))
206
+ };
207
+ }
208
+ }
209
+ exports.AuthenticationError = AuthenticationError;
210
+ exports.FairuError = FairuError;
211
+ exports.GraphQLError = GraphQLError;
212
+ exports.ValidationError = ValidationError;
213
+ //# sourceMappingURL=FairuError-DWH_Nwk0.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FairuError-DWH_Nwk0.cjs","sources":["../src/errors/FairuError.ts"],"sourcesContent":["import type { CombinedError } from '@urql/core';\nimport type { GraphQLError as BaseGraphQLError } from 'graphql';\n\n/**\n * Base error class for all Fairu SDK errors.\n */\nexport class FairuError extends Error {\n public readonly code?: string;\n public readonly originalError?: Error;\n\n constructor(message: string, code?: string, originalError?: Error) {\n super(message);\n this.name = 'FairuError';\n this.code = code;\n this.originalError = originalError;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FairuError);\n }\n }\n\n /**\n * Create a FairuError from a urql CombinedError.\n */\n static fromCombinedError(error: CombinedError): FairuError {\n // Check for GraphQL errors first\n if (error.graphQLErrors.length > 0) {\n const graphqlError = error.graphQLErrors[0];\n const category = graphqlError.extensions?.category as string | undefined;\n\n // Handle validation errors\n if (category === 'validation') {\n return new ValidationError(\n graphqlError.message,\n graphqlError.extensions?.validation as Record<string, string[]>\n );\n }\n\n // Handle authentication errors\n if (category === 'authentication') {\n return new AuthenticationError(graphqlError.message);\n }\n\n // Return generic GraphQL error\n return new GraphQLError(error.graphQLErrors);\n }\n\n // Handle network errors\n if (error.networkError) {\n return new FairuError(\n `Network error: ${error.networkError.message}`,\n 'NETWORK_ERROR',\n error.networkError\n );\n }\n\n // Fallback to generic error\n return new FairuError(error.message);\n }\n\n /**\n * Check if this error is a network error.\n */\n isNetworkError(): boolean {\n return this.code === 'NETWORK_ERROR';\n }\n\n /**\n * Convert error to a plain object for serialization.\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n };\n }\n}\n\n/**\n * Error class for validation failures.\n */\nexport class ValidationError extends FairuError {\n public readonly validationErrors: Record<string, string[]>;\n\n constructor(\n message: string,\n validationErrors: Record<string, string[]> = {}\n ) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n this.validationErrors = validationErrors;\n }\n\n /**\n * Get errors for a specific field.\n */\n getFieldErrors(field: string): string[] {\n return this.validationErrors[field] ?? [];\n }\n\n /**\n * Check if a specific field has errors.\n */\n hasFieldError(field: string): boolean {\n return field in this.validationErrors;\n }\n\n /**\n * Get all field names with errors.\n */\n getFields(): string[] {\n return Object.keys(this.validationErrors);\n }\n\n /**\n * Get the first error message for a field.\n */\n getFirstFieldError(field: string): string | undefined {\n return this.validationErrors[field]?.[0];\n }\n\n /**\n * Get all error messages as a flat array.\n */\n getAllMessages(): string[] {\n return Object.values(this.validationErrors).flat();\n }\n\n /**\n * Check if there are any validation errors.\n */\n hasErrors(): boolean {\n return Object.keys(this.validationErrors).length > 0;\n }\n\n /**\n * Convert to JSON for serialization.\n */\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n validationErrors: this.validationErrors,\n };\n }\n}\n\n/**\n * Error class for authentication failures.\n */\nexport class AuthenticationError extends FairuError {\n constructor(message: string = 'Invalid or missing API token') {\n super(message, 'AUTHENTICATION_ERROR');\n this.name = 'AuthenticationError';\n }\n\n /**\n * Check if this is an expired token error.\n */\n isTokenExpired(): boolean {\n return this.message.toLowerCase().includes('expired');\n }\n\n /**\n * Check if this is a missing token error.\n */\n isMissingToken(): boolean {\n return this.message.toLowerCase().includes('missing');\n }\n}\n\n/**\n * Error class for GraphQL-specific errors.\n */\nexport class GraphQLError extends FairuError {\n public readonly graphqlErrors: readonly BaseGraphQLError[];\n\n constructor(errors: readonly BaseGraphQLError[]) {\n const messages = errors.map((e) => e.message).join('; ');\n super(messages, 'GRAPHQL_ERROR');\n this.name = 'GraphQLError';\n this.graphqlErrors = errors;\n }\n\n /**\n * Get the first GraphQL error.\n */\n getFirstError(): BaseGraphQLError | undefined {\n return this.graphqlErrors[0];\n }\n\n /**\n * Get all GraphQL errors.\n */\n getErrors(): readonly BaseGraphQLError[] {\n return this.graphqlErrors;\n }\n\n /**\n * Check if any errors are validation errors.\n */\n hasValidationErrors(): boolean {\n return this.graphqlErrors.some(\n (e) => e.extensions?.category === 'validation'\n );\n }\n\n /**\n * Get validation errors as a record of field names to error messages.\n */\n getValidationErrors(): Record<string, string[]> {\n const validationErrors: Record<string, string[]> = {};\n\n for (const error of this.graphqlErrors) {\n if (error.extensions?.validation) {\n Object.assign(validationErrors, error.extensions.validation);\n }\n }\n\n return validationErrors;\n }\n\n /**\n * Check if any errors are authentication errors.\n */\n hasAuthenticationErrors(): boolean {\n return this.graphqlErrors.some(\n (e) => e.extensions?.category === 'authentication'\n );\n }\n\n /**\n * Get error paths.\n */\n getPaths(): (readonly (string | number)[] | undefined)[] {\n return this.graphqlErrors.map((e) => e.path);\n }\n\n /**\n * Convert to JSON for serialization.\n */\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n errors: this.graphqlErrors.map((e) => ({\n message: e.message,\n path: e.path,\n extensions: e.extensions,\n })),\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ const jsxRuntime = require("react/jsx-runtime");
3
+ const react = require("react");
4
+ const urql = require("urql");
5
+ const FairuClient = require("./FairuClient-BUObk5LJ.cjs");
6
+ const FairuContext = react.createContext(null);
7
+ function FairuProvider({
8
+ children,
9
+ fragmentRegistry,
10
+ client: existingClient,
11
+ ...clientConfig
12
+ }) {
13
+ const client = react.useMemo(() => {
14
+ if (existingClient) {
15
+ return existingClient;
16
+ }
17
+ return FairuClient.createFairuClient(clientConfig);
18
+ }, [existingClient, clientConfig.url, clientConfig.token]);
19
+ const fileProxyUrl = clientConfig.fileProxyUrl ?? FairuClient.DEFAULT_CONFIG.fileProxyUrl;
20
+ const contextValue = react.useMemo(
21
+ () => ({
22
+ client,
23
+ fragments: fragmentRegistry ?? null,
24
+ fileProxyUrl
25
+ }),
26
+ [client, fragmentRegistry, fileProxyUrl]
27
+ );
28
+ return /* @__PURE__ */ jsxRuntime.jsx(FairuContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(urql.Provider, { value: client, children }) });
29
+ }
30
+ function useFairuContext() {
31
+ const context = react.useContext(FairuContext);
32
+ if (!context) {
33
+ throw new Error("useFairuContext must be used within a FairuProvider");
34
+ }
35
+ return context;
36
+ }
37
+ function useFragments() {
38
+ return useFairuContext().fragments;
39
+ }
40
+ function useFileProxyUrl() {
41
+ return useFairuContext().fileProxyUrl;
42
+ }
43
+ function useFairuClient() {
44
+ return useFairuContext().client;
45
+ }
46
+ exports.FairuProvider = FairuProvider;
47
+ exports.useFairuClient = useFairuClient;
48
+ exports.useFairuContext = useFairuContext;
49
+ exports.useFileProxyUrl = useFileProxyUrl;
50
+ exports.useFragments = useFragments;
51
+ //# sourceMappingURL=FairuProvider-BRpRddCI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FairuProvider-BRpRddCI.cjs","sources":["../src/client/FairuProvider.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { Provider, type Client } from 'urql';\nimport { createFairuClient } from './FairuClient';\nimport { DEFAULT_CONFIG, type FairuClientConfig } from './config';\nimport type { FragmentRegistry } from '../fragments/FragmentRegistry';\n\n/**\n * Context value for Fairu SDK.\n */\ninterface FairuContextValue {\n /**\n * The urql client instance.\n */\n client: Client;\n\n /**\n * Fragment registry for custom and predefined fragments.\n */\n fragments: FragmentRegistry | null;\n\n /**\n * FileProxy base URL.\n */\n fileProxyUrl: string;\n}\n\nconst FairuContext = createContext<FairuContextValue | null>(null);\n\n/**\n * Props for the FairuProvider component.\n */\nexport interface FairuProviderProps extends FairuClientConfig {\n /**\n * Child components.\n */\n children: ReactNode;\n\n /**\n * Custom fragment registry instance.\n */\n fragmentRegistry?: FragmentRegistry;\n\n /**\n * Existing urql client to use instead of creating a new one.\n */\n client?: Client;\n}\n\n/**\n * React provider for Fairu SDK functionality.\n *\n * @example\n * ```tsx\n * import { FairuProvider } from '@fairu/sdk/react';\n *\n * function App() {\n * return (\n * <FairuProvider\n * url=\"https://fairu.app/graphql\"\n * token={process.env.FAIRU_TOKEN}\n * >\n * <YourApp />\n * </FairuProvider>\n * );\n * }\n * ```\n */\nexport function FairuProvider({\n children,\n fragmentRegistry,\n client: existingClient,\n ...clientConfig\n}: FairuProviderProps) {\n // Create or use existing client\n const client = useMemo(() => {\n if (existingClient) {\n return existingClient;\n }\n return createFairuClient(clientConfig);\n }, [existingClient, clientConfig.url, clientConfig.token]);\n\n // Get fileProxy URL\n const fileProxyUrl =\n clientConfig.fileProxyUrl ?? DEFAULT_CONFIG.fileProxyUrl;\n\n // Context value\n const contextValue: FairuContextValue = useMemo(\n () => ({\n client,\n fragments: fragmentRegistry ?? null,\n fileProxyUrl,\n }),\n [client, fragmentRegistry, fileProxyUrl]\n );\n\n return (\n <FairuContext.Provider value={contextValue}>\n <Provider value={client}>{children}</Provider>\n </FairuContext.Provider>\n );\n}\n\n/**\n * Hook to access the Fairu context.\n *\n * @throws Error if used outside of FairuProvider\n */\nexport function useFairuContext(): FairuContextValue {\n const context = useContext(FairuContext);\n\n if (!context) {\n throw new Error('useFairuContext must be used within a FairuProvider');\n }\n\n return context;\n}\n\n/**\n * Hook to access the fragment registry.\n */\nexport function useFragments(): FragmentRegistry | null {\n return useFairuContext().fragments;\n}\n\n/**\n * Hook to get the FileProxy base URL.\n */\nexport function useFileProxyUrl(): string {\n return useFairuContext().fileProxyUrl;\n}\n\n/**\n * Hook to access the urql client directly.\n */\nexport function useFairuClient(): Client {\n return useFairuContext().client;\n}\n"],"names":["createContext","useMemo","createFairuClient","DEFAULT_CONFIG","jsx","Provider","useContext"],"mappings":";;;;;AA+BA,MAAM,eAAeA,MAAAA,cAAwC,IAAI;AAyC1D,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,GAAG;AACL,GAAuB;AAErB,QAAM,SAASC,MAAAA,QAAQ,MAAM;AAC3B,QAAI,gBAAgB;AAClB,aAAO;AAAA,IACT;AACA,WAAOC,YAAAA,kBAAkB,YAAY;AAAA,EACvC,GAAG,CAAC,gBAAgB,aAAa,KAAK,aAAa,KAAK,CAAC;AAGzD,QAAM,eACJ,aAAa,gBAAgBC,YAAAA,eAAe;AAG9C,QAAM,eAAkCF,MAAAA;AAAAA,IACtC,OAAO;AAAA,MACL;AAAA,MACA,WAAW,oBAAoB;AAAA,MAC/B;AAAA,IAAA;AAAA,IAEF,CAAC,QAAQ,kBAAkB,YAAY;AAAA,EAAA;AAGzC,SACEG,2BAAAA,IAAC,aAAa,UAAb,EAAsB,OAAO,cAC5B,UAAAA,2BAAAA,IAACC,KAAAA,UAAA,EAAS,OAAO,QAAS,SAAA,CAAS,EAAA,CACrC;AAEJ;AAOO,SAAS,kBAAqC;AACnD,QAAM,UAAUC,MAAAA,WAAW,YAAY;AAEvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAEA,SAAO;AACT;AAKO,SAAS,eAAwC;AACtD,SAAO,kBAAkB;AAC3B;AAKO,SAAS,kBAA0B;AACxC,SAAO,kBAAkB;AAC3B;AAKO,SAAS,iBAAyB;AACvC,SAAO,kBAAkB;AAC3B;;;;;;"}
@@ -0,0 +1,52 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useMemo, createContext, useContext } from "react";
3
+ import { Provider } from "urql";
4
+ import { c as createFairuClient, D as DEFAULT_CONFIG } from "./FairuClient-CT-IPh8i.js";
5
+ const FairuContext = createContext(null);
6
+ function FairuProvider({
7
+ children,
8
+ fragmentRegistry,
9
+ client: existingClient,
10
+ ...clientConfig
11
+ }) {
12
+ const client = useMemo(() => {
13
+ if (existingClient) {
14
+ return existingClient;
15
+ }
16
+ return createFairuClient(clientConfig);
17
+ }, [existingClient, clientConfig.url, clientConfig.token]);
18
+ const fileProxyUrl = clientConfig.fileProxyUrl ?? DEFAULT_CONFIG.fileProxyUrl;
19
+ const contextValue = useMemo(
20
+ () => ({
21
+ client,
22
+ fragments: fragmentRegistry ?? null,
23
+ fileProxyUrl
24
+ }),
25
+ [client, fragmentRegistry, fileProxyUrl]
26
+ );
27
+ return /* @__PURE__ */ jsx(FairuContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(Provider, { value: client, children }) });
28
+ }
29
+ function useFairuContext() {
30
+ const context = useContext(FairuContext);
31
+ if (!context) {
32
+ throw new Error("useFairuContext must be used within a FairuProvider");
33
+ }
34
+ return context;
35
+ }
36
+ function useFragments() {
37
+ return useFairuContext().fragments;
38
+ }
39
+ function useFileProxyUrl() {
40
+ return useFairuContext().fileProxyUrl;
41
+ }
42
+ function useFairuClient() {
43
+ return useFairuContext().client;
44
+ }
45
+ export {
46
+ FairuProvider as F,
47
+ useFairuClient as a,
48
+ useFragments as b,
49
+ useFileProxyUrl as c,
50
+ useFairuContext as u
51
+ };
52
+ //# sourceMappingURL=FairuProvider-Tc0vFo5L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FairuProvider-Tc0vFo5L.js","sources":["../src/client/FairuProvider.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { Provider, type Client } from 'urql';\nimport { createFairuClient } from './FairuClient';\nimport { DEFAULT_CONFIG, type FairuClientConfig } from './config';\nimport type { FragmentRegistry } from '../fragments/FragmentRegistry';\n\n/**\n * Context value for Fairu SDK.\n */\ninterface FairuContextValue {\n /**\n * The urql client instance.\n */\n client: Client;\n\n /**\n * Fragment registry for custom and predefined fragments.\n */\n fragments: FragmentRegistry | null;\n\n /**\n * FileProxy base URL.\n */\n fileProxyUrl: string;\n}\n\nconst FairuContext = createContext<FairuContextValue | null>(null);\n\n/**\n * Props for the FairuProvider component.\n */\nexport interface FairuProviderProps extends FairuClientConfig {\n /**\n * Child components.\n */\n children: ReactNode;\n\n /**\n * Custom fragment registry instance.\n */\n fragmentRegistry?: FragmentRegistry;\n\n /**\n * Existing urql client to use instead of creating a new one.\n */\n client?: Client;\n}\n\n/**\n * React provider for Fairu SDK functionality.\n *\n * @example\n * ```tsx\n * import { FairuProvider } from '@fairu/sdk/react';\n *\n * function App() {\n * return (\n * <FairuProvider\n * url=\"https://fairu.app/graphql\"\n * token={process.env.FAIRU_TOKEN}\n * >\n * <YourApp />\n * </FairuProvider>\n * );\n * }\n * ```\n */\nexport function FairuProvider({\n children,\n fragmentRegistry,\n client: existingClient,\n ...clientConfig\n}: FairuProviderProps) {\n // Create or use existing client\n const client = useMemo(() => {\n if (existingClient) {\n return existingClient;\n }\n return createFairuClient(clientConfig);\n }, [existingClient, clientConfig.url, clientConfig.token]);\n\n // Get fileProxy URL\n const fileProxyUrl =\n clientConfig.fileProxyUrl ?? DEFAULT_CONFIG.fileProxyUrl;\n\n // Context value\n const contextValue: FairuContextValue = useMemo(\n () => ({\n client,\n fragments: fragmentRegistry ?? null,\n fileProxyUrl,\n }),\n [client, fragmentRegistry, fileProxyUrl]\n );\n\n return (\n <FairuContext.Provider value={contextValue}>\n <Provider value={client}>{children}</Provider>\n </FairuContext.Provider>\n );\n}\n\n/**\n * Hook to access the Fairu context.\n *\n * @throws Error if used outside of FairuProvider\n */\nexport function useFairuContext(): FairuContextValue {\n const context = useContext(FairuContext);\n\n if (!context) {\n throw new Error('useFairuContext must be used within a FairuProvider');\n }\n\n return context;\n}\n\n/**\n * Hook to access the fragment registry.\n */\nexport function useFragments(): FragmentRegistry | null {\n return useFairuContext().fragments;\n}\n\n/**\n * Hook to get the FileProxy base URL.\n */\nexport function useFileProxyUrl(): string {\n return useFairuContext().fileProxyUrl;\n}\n\n/**\n * Hook to access the urql client directly.\n */\nexport function useFairuClient(): Client {\n return useFairuContext().client;\n}\n"],"names":[],"mappings":";;;;AA+BA,MAAM,eAAe,cAAwC,IAAI;AAyC1D,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,GAAG;AACL,GAAuB;AAErB,QAAM,SAAS,QAAQ,MAAM;AAC3B,QAAI,gBAAgB;AAClB,aAAO;AAAA,IACT;AACA,WAAO,kBAAkB,YAAY;AAAA,EACvC,GAAG,CAAC,gBAAgB,aAAa,KAAK,aAAa,KAAK,CAAC;AAGzD,QAAM,eACJ,aAAa,gBAAgB,eAAe;AAG9C,QAAM,eAAkC;AAAA,IACtC,OAAO;AAAA,MACL;AAAA,MACA,WAAW,oBAAoB;AAAA,MAC/B;AAAA,IAAA;AAAA,IAEF,CAAC,QAAQ,kBAAkB,YAAY;AAAA,EAAA;AAGzC,SACE,oBAAC,aAAa,UAAb,EAAsB,OAAO,cAC5B,UAAA,oBAAC,UAAA,EAAS,OAAO,QAAS,SAAA,CAAS,EAAA,CACrC;AAEJ;AAOO,SAAS,kBAAqC;AACnD,QAAM,UAAU,WAAW,YAAY;AAEvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAEA,SAAO;AACT;AAKO,SAAS,eAAwC;AACtD,SAAO,kBAAkB;AAC3B;AAKO,SAAS,kBAA0B;AACxC,SAAO,kBAAkB;AAC3B;AAKO,SAAS,iBAAyB;AACvC,SAAO,kBAAkB;AAC3B;"}