@pfm-platform/partners-data-access 0.1.1 → 0.2.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.
- package/dist/index.cjs +11 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +24 -82
- package/dist/index.d.ts +24 -82
- package/dist/index.js +13 -21
- package/dist/index.js.map +1 -1
- package/package.json +7 -8
package/dist/index.cjs
CHANGED
|
@@ -2,19 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var reactQuery = require('@tanstack/react-query');
|
|
4
4
|
var shared = require('@pfm-platform/shared');
|
|
5
|
-
var axios = require('axios');
|
|
6
|
-
|
|
7
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
-
|
|
9
|
-
var axios__default = /*#__PURE__*/_interopDefault(axios);
|
|
10
5
|
|
|
11
6
|
// src/queries/useCurrentPartner.ts
|
|
12
|
-
var api = axios__default.default.create({
|
|
13
|
-
baseURL: "/api",
|
|
14
|
-
headers: {
|
|
15
|
-
"Content-Type": "application/json"
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
7
|
|
|
19
8
|
// src/keys.ts
|
|
20
9
|
var partnerKeys = {
|
|
@@ -27,12 +16,9 @@ function useCurrentPartner(options) {
|
|
|
27
16
|
return reactQuery.useQuery({
|
|
28
17
|
queryKey: partnerKeys.current(),
|
|
29
18
|
queryFn: async () => {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
throw new Error("No current partner configuration found");
|
|
34
|
-
}
|
|
35
|
-
return validated.partners[0];
|
|
19
|
+
const { data, error } = await shared.supabase.from("partners").select("*").limit(1).single();
|
|
20
|
+
if (error) throw new Error(error.message);
|
|
21
|
+
return shared.PartnerRowSchema.parse(data);
|
|
36
22
|
},
|
|
37
23
|
staleTime: 1e3 * 60 * 60 * 24,
|
|
38
24
|
// 24 hours (partner config rarely changes)
|
|
@@ -46,8 +32,9 @@ function useCreatePartner(options) {
|
|
|
46
32
|
mutationFn: async ({ data }) => {
|
|
47
33
|
const schema = mode === "admin" ? shared.PartnerCreateSchemaAdmin : shared.PartnerCreateSchemaUser;
|
|
48
34
|
const validated = schema.parse(data);
|
|
49
|
-
const
|
|
50
|
-
|
|
35
|
+
const { data: row, error } = await shared.supabase.from("partners").insert(validated).select().single();
|
|
36
|
+
if (error) throw new Error(error.message);
|
|
37
|
+
return shared.PartnerRowSchema.parse(row);
|
|
51
38
|
},
|
|
52
39
|
onSuccess: () => {
|
|
53
40
|
queryClient.invalidateQueries({
|
|
@@ -64,8 +51,9 @@ function useUpdatePartner(options) {
|
|
|
64
51
|
mutationFn: async ({ partnerId, data }) => {
|
|
65
52
|
const schema = mode === "admin" ? shared.PartnerUpdateSchemaAdmin : shared.PartnerUpdateSchemaUser;
|
|
66
53
|
const validated = schema.parse(data);
|
|
67
|
-
const
|
|
68
|
-
|
|
54
|
+
const { data: row, error } = await shared.supabase.from("partners").update(validated).eq("id", partnerId).select().single();
|
|
55
|
+
if (error) throw new Error(error.message);
|
|
56
|
+
return shared.PartnerRowSchema.parse(row);
|
|
69
57
|
},
|
|
70
58
|
onSuccess: () => {
|
|
71
59
|
queryClient.invalidateQueries({
|
|
@@ -79,8 +67,8 @@ function useDeletePartner(options) {
|
|
|
79
67
|
const queryClient = reactQuery.useQueryClient();
|
|
80
68
|
return reactQuery.useMutation({
|
|
81
69
|
mutationFn: async ({ partnerId }) => {
|
|
82
|
-
const
|
|
83
|
-
|
|
70
|
+
const { error } = await shared.supabase.from("partners").delete().eq("id", partnerId);
|
|
71
|
+
if (error) throw new Error(error.message);
|
|
84
72
|
},
|
|
85
73
|
onSuccess: () => {
|
|
86
74
|
queryClient.invalidateQueries({
|
|
@@ -91,7 +79,6 @@ function useDeletePartner(options) {
|
|
|
91
79
|
});
|
|
92
80
|
}
|
|
93
81
|
|
|
94
|
-
exports.api = api;
|
|
95
82
|
exports.partnerKeys = partnerKeys;
|
|
96
83
|
exports.useCreatePartner = useCreatePartner;
|
|
97
84
|
exports.useCurrentPartner = useCurrentPartner;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/keys.ts","../src/queries/useCurrentPartner.ts","../src/mutations/useCreatePartner.ts","../src/mutations/useUpdatePartner.ts","../src/mutations/useDeletePartner.ts"],"names":["axios","useQuery","PartnersResponseSchema","useQueryClient","useAppMode","useMutation","PartnerCreateSchemaAdmin","PartnerCreateSchemaUser","PartnerSchema","PartnerUpdateSchemaAdmin","PartnerUpdateSchemaUser","PartnerDeleteSchema"],"mappings":"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","file":"index.cjs","sourcesContent":["import axios from 'axios';\n\n/**\n * Axios instance for Partners API\n * Base URL configured through environment variables or defaults to relative path\n */\nexport const api = axios.create({\n baseURL: '/api',\n headers: {\n 'Content-Type': 'application/json',\n },\n});\n","/**\n * Query key factory for Partners domain\n */\nexport const partnerKeys = {\n all: ['partners'] as const,\n current: () => [...partnerKeys.all, 'current'] as const,\n};\n","import { useQuery, UseQueryOptions } from '@tanstack/react-query';\nimport { Partner, PartnersResponseSchema } from '@pfm-platform/shared';\nimport { api } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Fetch current partner configuration\n * GET /partners/current\n *\n * Partners are read-only configuration data\n * Typically returns single partner (current tenant/white-label configuration)\n */\nexport function useCurrentPartner(\n options?: Omit<UseQueryOptions<Partner>, 'queryKey' | 'queryFn'>\n) {\n return useQuery({\n queryKey: partnerKeys.current(),\n queryFn: async () => {\n const response = await api.get('/partners/current');\n const validated = PartnersResponseSchema.parse(response.data);\n // Return first partner (current partner configuration)\n if (validated.partners.length === 0) {\n throw new Error('No current partner configuration found');\n }\n return validated.partners[0];\n },\n staleTime: 1000 * 60 * 60 * 24, // 24 hours (partner config rarely changes)\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport {\n PartnerCreateSchemaAdmin,\n PartnerCreateSchemaUser,\n PartnerSchema,\n useAppMode,\n} from '@pfm-platform/shared';\nimport type { Partner } from '@pfm-platform/shared';\nimport { api } from '../client';\nimport { partnerKeys } from '../keys';\n\n/**\n * Partner create data interface\n */\nexport interface PartnerCreate {\n domain: string;\n product_name: string;\n browser_title: string;\n partner_alerts_enabled?: boolean;\n demo?: boolean;\n modules?: Record<string, unknown>;\n featured_searches?: unknown[];\n}\n\n/**\n * Parameters for useCreatePartner mutation\n */\nexport interface CreatePartnerParams {\n data: PartnerCreate;\n}\n\n/**\n * Mutation hook for creating a new partner\n *\n * Creates a partner manually for testing purposes.\n * Uses mode switching for validation:\n * - Admin mode: Allows manual partner creation for test data\n * - User mode: Blocked (partners are configuration data)\n *\n * @example\n * ```tsx\n * const createPartner = useCreatePartner();\n *\n * createPartner.mutate({\n * data: {\n * domain: 'example.com',\n * product_name: 'Example Product',\n * browser_title: 'Example',\n * demo: true\n * }\n * });\n * ```\n */\nexport function useCreatePartner(\n options?: Omit<UseMutationOptions<Partner, Error, CreatePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n const { mode } = useAppMode();\n\n return useMutation({\n mutationFn: async ({ data }: CreatePartnerParams) => {\n // Select schema based on mode\n const schema =\n mode === 'admin'\n ? PartnerCreateSchemaAdmin\n : PartnerCreateSchemaUser;\n\n // Validate partner data\n const validated = schema.parse(data);\n\n // POST to create new partner\n const response = await api.post('/partners/current', validated);\n\n // Return created partner\n return PartnerSchema.parse(response.data);\n },\n onSuccess: () => {\n // Invalidate partner query to refetch updated data\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport {\n PartnerUpdateSchemaAdmin,\n PartnerUpdateSchemaUser,\n PartnerSchema,\n useAppMode,\n} from '@pfm-platform/shared';\nimport type { Partner } from '@pfm-platform/shared';\nimport { api } from '../client';\nimport { partnerKeys } from '../keys';\n\n/**\n * Partner update data interface\n */\nexport interface PartnerUpdate {\n domain?: string;\n product_name?: string;\n browser_title?: string;\n partner_alerts_enabled?: boolean;\n demo?: boolean;\n modules?: Record<string, unknown>;\n featured_searches?: unknown[];\n}\n\n/**\n * Parameters for useUpdatePartner mutation\n */\nexport interface UpdatePartnerParams {\n partnerId: number;\n data: PartnerUpdate;\n}\n\n/**\n * Mutation hook for updating a partner\n *\n * Updates partner fields for testing purposes.\n * Uses mode switching for validation:\n * - Admin mode: Allows updating partners for test scenarios\n * - User mode: Blocked (partners are configuration data)\n *\n * @example\n * ```tsx\n * const updatePartner = useUpdatePartner();\n *\n * updatePartner.mutate({\n * partnerId: 1,\n * data: {\n * product_name: 'Updated Product Name'\n * }\n * });\n * ```\n */\nexport function useUpdatePartner(\n options?: Omit<UseMutationOptions<Partner, Error, UpdatePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n const { mode } = useAppMode();\n\n return useMutation({\n mutationFn: async ({ partnerId, data }: UpdatePartnerParams) => {\n // Select schema based on mode\n const schema =\n mode === 'admin'\n ? PartnerUpdateSchemaAdmin\n : PartnerUpdateSchemaUser;\n\n // Validate partner update data\n const validated = schema.parse(data);\n\n // PUT to update partner\n const response = await api.put(`/partners/${partnerId}`, validated);\n\n // Return updated partner\n return PartnerSchema.parse(response.data);\n },\n onSuccess: () => {\n // Invalidate partner query to refetch updated data\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport { PartnerDeleteSchema } from '@pfm-platform/shared';\nimport { api } from '../client';\nimport { partnerKeys } from '../keys';\n\n/**\n * Parameters for useDeletePartner mutation\n */\nexport interface DeletePartnerParams {\n partnerId: number;\n}\n\n/**\n * Mutation hook for deleting a partner\n *\n * Deletes a partner from the system.\n * Available in both admin and user modes (for test data cleanup).\n *\n * @example\n * ```tsx\n * const deletePartner = useDeletePartner();\n *\n * deletePartner.mutate({\n * partnerId: 1\n * });\n * ```\n */\nexport function useDeletePartner(\n options?: Omit<UseMutationOptions<void, Error, DeletePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ partnerId }: DeletePartnerParams) => {\n // Validate partner ID\n const validated = PartnerDeleteSchema.parse({ id: partnerId });\n\n // DELETE partner\n await api.delete(`/partners/${validated.id}`);\n },\n onSuccess: () => {\n // Invalidate partner query to refetch updated list\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/keys.ts","../src/queries/useCurrentPartner.ts","../src/mutations/useCreatePartner.ts","../src/mutations/useUpdatePartner.ts","../src/mutations/useDeletePartner.ts"],"names":["useQuery","supabase","PartnerRowSchema","useQueryClient","useAppMode","useMutation","PartnerCreateSchemaAdmin","PartnerCreateSchemaUser","PartnerUpdateSchemaAdmin","PartnerUpdateSchemaUser"],"mappings":";;;;;;;;AAGO,IAAM,WAAA,GAAc;AAAA,EACzB,GAAA,EAAK,CAAC,UAAU,CAAA;AAAA,EAChB,SAAS,MAAM,CAAC,GAAG,WAAA,CAAY,KAAK,SAAS;AAC/C;;;ACIO,SAAS,kBACd,OAAA,EACA;AACA,EAAA,OAAOA,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,YAAY,OAAA,EAAQ;AAAA,IAC9B,SAAS,YAAY;AACnB,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAMC,eAAA,CAC3B,IAAA,CAAK,UAAU,CAAA,CACf,OAAO,GAAG,CAAA,CACV,KAAA,CAAM,CAAC,EACP,MAAA,EAAO;AAEV,MAAA,IAAI,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,MAAM,OAAO,CAAA;AAExC,MAAA,OAAOC,uBAAA,CAAiB,MAAM,IAAI,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,SAAA,EAAW,GAAA,GAAO,EAAA,GAAK,EAAA,GAAK,EAAA;AAAA;AAAA,IAC5B,GAAG;AAAA,GACJ,CAAA;AACH;ACWO,SAAS,iBACd,OAAA,EACA;AACA,EAAA,MAAM,cAAcC,yBAAA,EAAe;AACnC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIC,iBAAA,EAAW;AAE5B,EAAA,OAAOC,sBAAA,CAAY;AAAA,IACjB,UAAA,EAAY,OAAO,EAAE,IAAA,EAAK,KAA2B;AACnD,MAAA,MAAM,MAAA,GACJ,IAAA,KAAS,OAAA,GACLC,+BAAA,GACAC,8BAAA;AAEN,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAEnC,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAK,KAAA,KAAU,MAAMN,eAAA,CAChC,IAAA,CAAK,UAAU,EACf,MAAA,CAAO,SAAqC,CAAA,CAC5C,MAAA,GACA,MAAA,EAAO;AAEV,MAAA,IAAI,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,MAAM,OAAO,CAAA;AAExC,MAAA,OAAOC,uBAAAA,CAAiB,MAAM,GAAG,CAAA;AAAA,IACnC,CAAA;AAAA,IACA,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,QAC5B,QAAA,EAAU,YAAY,OAAA;AAAQ,OAC/B,CAAA;AAAA,IACH,CAAA;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AACH;AC/BO,SAAS,iBACd,OAAA,EACA;AACA,EAAA,MAAM,cAAcC,yBAAAA,EAAe;AACnC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIC,iBAAAA,EAAW;AAE5B,EAAA,OAAOC,sBAAAA,CAAY;AAAA,IACjB,UAAA,EAAY,OAAO,EAAE,SAAA,EAAW,MAAK,KAA2B;AAC9D,MAAA,MAAM,MAAA,GACJ,IAAA,KAAS,OAAA,GACLG,+BAAA,GACAC,8BAAA;AAEN,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAEnC,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAK,OAAM,GAAI,MAAMR,gBAChC,IAAA,CAAK,UAAU,EACf,MAAA,CAAO,SAAqC,EAC5C,EAAA,CAAG,IAAA,EAAM,SAAS,CAAA,CAClB,MAAA,GACA,MAAA,EAAO;AAEV,MAAA,IAAI,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,MAAM,OAAO,CAAA;AAExC,MAAA,OAAOC,uBAAAA,CAAiB,MAAM,GAAG,CAAA;AAAA,IACnC,CAAA;AAAA,IACA,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,QAC5B,QAAA,EAAU,YAAY,OAAA;AAAQ,OAC/B,CAAA;AAAA,IACH,CAAA;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AACH;ACxDO,SAAS,iBACd,OAAA,EACA;AACA,EAAA,MAAM,cAAcC,yBAAAA,EAAe;AAEnC,EAAA,OAAOE,sBAAAA,CAAY;AAAA,IACjB,UAAA,EAAY,OAAO,EAAE,SAAA,EAAU,KAA2B;AACxD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAMJ,eAAA,CACrB,IAAA,CAAK,UAAU,CAAA,CACf,MAAA,EAAO,CACP,EAAA,CAAG,IAAA,EAAM,SAAS,CAAA;AAErB,MAAA,IAAI,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IAC1C,CAAA;AAAA,IACA,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,QAC5B,QAAA,EAAU,YAAY,OAAA;AAAQ,OAC/B,CAAA;AAAA,IACH,CAAA;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AACH","file":"index.cjs","sourcesContent":["/**\n * Query key factory for Partners domain\n */\nexport const partnerKeys = {\n all: ['partners'] as const,\n current: () => [...partnerKeys.all, 'current'] as const,\n};\n","import { useQuery, type UseQueryOptions } from '@tanstack/react-query';\nimport { PartnerRowSchema, type PartnerRow } from '@pfm-platform/shared';\nimport { supabase } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Fetch current partner configuration from Supabase\n * Partners table is read-only (SELECT only RLS)\n * Typically returns single partner (current tenant configuration)\n */\nexport function useCurrentPartner(\n options?: Omit<UseQueryOptions<PartnerRow>, 'queryKey' | 'queryFn'>\n) {\n return useQuery({\n queryKey: partnerKeys.current(),\n queryFn: async () => {\n const { data, error } = await supabase\n .from('partners')\n .select('*')\n .limit(1)\n .single();\n\n if (error) throw new Error(error.message);\n\n return PartnerRowSchema.parse(data);\n },\n staleTime: 1000 * 60 * 60 * 24, // 24 hours (partner config rarely changes)\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport {\n PartnerCreateSchemaAdmin,\n PartnerCreateSchemaUser,\n PartnerRowSchema,\n useAppMode,\n type PartnerRow,\n type TablesInsert,\n} from '@pfm-platform/shared';\nimport { supabase } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Partner create data interface\n */\nexport interface PartnerCreate {\n domain: string;\n product_name: string;\n browser_title: string;\n partner_alerts_enabled?: boolean;\n demo?: boolean;\n modules?: Record<string, unknown>;\n featured_searches?: unknown[];\n}\n\n/**\n * Parameters for useCreatePartner mutation\n */\nexport interface CreatePartnerParams {\n data: PartnerCreate;\n}\n\n/**\n * Create a new partner in Supabase\n * Admin mode only — partners are configuration data\n */\nexport function useCreatePartner(\n options?: Omit<UseMutationOptions<PartnerRow, Error, CreatePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n const { mode } = useAppMode();\n\n return useMutation({\n mutationFn: async ({ data }: CreatePartnerParams) => {\n const schema =\n mode === 'admin'\n ? PartnerCreateSchemaAdmin\n : PartnerCreateSchemaUser;\n\n const validated = schema.parse(data);\n\n const { data: row, error } = await supabase\n .from('partners')\n .insert(validated as TablesInsert<'partners'>)\n .select()\n .single();\n\n if (error) throw new Error(error.message);\n\n return PartnerRowSchema.parse(row);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport {\n PartnerUpdateSchemaAdmin,\n PartnerUpdateSchemaUser,\n PartnerRowSchema,\n useAppMode,\n type PartnerRow,\n type TablesUpdate,\n} from '@pfm-platform/shared';\nimport { supabase } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Partner update data interface\n */\nexport interface PartnerUpdate {\n domain?: string;\n product_name?: string;\n browser_title?: string;\n partner_alerts_enabled?: boolean;\n demo?: boolean;\n modules?: Record<string, unknown>;\n featured_searches?: unknown[];\n}\n\n/**\n * Parameters for useUpdatePartner mutation\n */\nexport interface UpdatePartnerParams {\n partnerId: string;\n data: PartnerUpdate;\n}\n\n/**\n * Update a partner in Supabase\n * Admin mode only — partners are configuration data\n */\nexport function useUpdatePartner(\n options?: Omit<UseMutationOptions<PartnerRow, Error, UpdatePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n const { mode } = useAppMode();\n\n return useMutation({\n mutationFn: async ({ partnerId, data }: UpdatePartnerParams) => {\n const schema =\n mode === 'admin'\n ? PartnerUpdateSchemaAdmin\n : PartnerUpdateSchemaUser;\n\n const validated = schema.parse(data);\n\n const { data: row, error } = await supabase\n .from('partners')\n .update(validated as TablesUpdate<'partners'>)\n .eq('id', partnerId)\n .select()\n .single();\n\n if (error) throw new Error(error.message);\n\n return PartnerRowSchema.parse(row);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport { supabase } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Parameters for useDeletePartner mutation\n */\nexport interface DeletePartnerParams {\n partnerId: string;\n}\n\n/**\n * Delete a partner from Supabase\n */\nexport function useDeletePartner(\n options?: Omit<UseMutationOptions<void, Error, DeletePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ partnerId }: DeletePartnerParams) => {\n const { error } = await supabase\n .from('partners')\n .delete()\n .eq('id', partnerId);\n\n if (error) throw new Error(error.message);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
2
2
|
import { UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
|
|
3
|
-
import {
|
|
4
|
-
import * as axios from 'axios';
|
|
3
|
+
import { PartnerRow } from '@pfm-platform/shared';
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
|
-
* Fetch current partner configuration
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Partners are read-only configuration data
|
|
11
|
-
* Typically returns single partner (current tenant/white-label configuration)
|
|
6
|
+
* Fetch current partner configuration from Supabase
|
|
7
|
+
* Partners table is read-only (SELECT only RLS)
|
|
8
|
+
* Typically returns single partner (current tenant configuration)
|
|
12
9
|
*/
|
|
13
|
-
declare function useCurrentPartner(options?: Omit<UseQueryOptions<
|
|
14
|
-
id:
|
|
10
|
+
declare function useCurrentPartner(options?: Omit<UseQueryOptions<PartnerRow>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<{
|
|
11
|
+
id: string;
|
|
15
12
|
domain: string;
|
|
16
13
|
product_name: string;
|
|
17
14
|
browser_title: string;
|
|
18
15
|
partner_alerts_enabled: boolean;
|
|
19
16
|
demo: boolean;
|
|
20
|
-
modules:
|
|
21
|
-
[x: string]: unknown;
|
|
22
|
-
};
|
|
17
|
+
modules: Record<string, unknown>;
|
|
23
18
|
featured_searches: unknown[];
|
|
19
|
+
created_at: string | null;
|
|
24
20
|
}, Error>;
|
|
25
21
|
|
|
26
22
|
/**
|
|
@@ -42,38 +38,19 @@ interface CreatePartnerParams {
|
|
|
42
38
|
data: PartnerCreate;
|
|
43
39
|
}
|
|
44
40
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* Creates a partner manually for testing purposes.
|
|
48
|
-
* Uses mode switching for validation:
|
|
49
|
-
* - Admin mode: Allows manual partner creation for test data
|
|
50
|
-
* - User mode: Blocked (partners are configuration data)
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```tsx
|
|
54
|
-
* const createPartner = useCreatePartner();
|
|
55
|
-
*
|
|
56
|
-
* createPartner.mutate({
|
|
57
|
-
* data: {
|
|
58
|
-
* domain: 'example.com',
|
|
59
|
-
* product_name: 'Example Product',
|
|
60
|
-
* browser_title: 'Example',
|
|
61
|
-
* demo: true
|
|
62
|
-
* }
|
|
63
|
-
* });
|
|
64
|
-
* ```
|
|
41
|
+
* Create a new partner in Supabase
|
|
42
|
+
* Admin mode only — partners are configuration data
|
|
65
43
|
*/
|
|
66
|
-
declare function useCreatePartner(options?: Omit<UseMutationOptions<
|
|
67
|
-
id:
|
|
44
|
+
declare function useCreatePartner(options?: Omit<UseMutationOptions<PartnerRow, Error, CreatePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<{
|
|
45
|
+
id: string;
|
|
68
46
|
domain: string;
|
|
69
47
|
product_name: string;
|
|
70
48
|
browser_title: string;
|
|
71
49
|
partner_alerts_enabled: boolean;
|
|
72
50
|
demo: boolean;
|
|
73
|
-
modules:
|
|
74
|
-
[x: string]: unknown;
|
|
75
|
-
};
|
|
51
|
+
modules: Record<string, unknown>;
|
|
76
52
|
featured_searches: unknown[];
|
|
53
|
+
created_at: string | null;
|
|
77
54
|
}, Error, CreatePartnerParams, unknown>;
|
|
78
55
|
|
|
79
56
|
/**
|
|
@@ -92,62 +69,33 @@ interface PartnerUpdate {
|
|
|
92
69
|
* Parameters for useUpdatePartner mutation
|
|
93
70
|
*/
|
|
94
71
|
interface UpdatePartnerParams {
|
|
95
|
-
partnerId:
|
|
72
|
+
partnerId: string;
|
|
96
73
|
data: PartnerUpdate;
|
|
97
74
|
}
|
|
98
75
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* Updates partner fields for testing purposes.
|
|
102
|
-
* Uses mode switching for validation:
|
|
103
|
-
* - Admin mode: Allows updating partners for test scenarios
|
|
104
|
-
* - User mode: Blocked (partners are configuration data)
|
|
105
|
-
*
|
|
106
|
-
* @example
|
|
107
|
-
* ```tsx
|
|
108
|
-
* const updatePartner = useUpdatePartner();
|
|
109
|
-
*
|
|
110
|
-
* updatePartner.mutate({
|
|
111
|
-
* partnerId: 1,
|
|
112
|
-
* data: {
|
|
113
|
-
* product_name: 'Updated Product Name'
|
|
114
|
-
* }
|
|
115
|
-
* });
|
|
116
|
-
* ```
|
|
76
|
+
* Update a partner in Supabase
|
|
77
|
+
* Admin mode only — partners are configuration data
|
|
117
78
|
*/
|
|
118
|
-
declare function useUpdatePartner(options?: Omit<UseMutationOptions<
|
|
119
|
-
id:
|
|
79
|
+
declare function useUpdatePartner(options?: Omit<UseMutationOptions<PartnerRow, Error, UpdatePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<{
|
|
80
|
+
id: string;
|
|
120
81
|
domain: string;
|
|
121
82
|
product_name: string;
|
|
122
83
|
browser_title: string;
|
|
123
84
|
partner_alerts_enabled: boolean;
|
|
124
85
|
demo: boolean;
|
|
125
|
-
modules:
|
|
126
|
-
[x: string]: unknown;
|
|
127
|
-
};
|
|
86
|
+
modules: Record<string, unknown>;
|
|
128
87
|
featured_searches: unknown[];
|
|
88
|
+
created_at: string | null;
|
|
129
89
|
}, Error, UpdatePartnerParams, unknown>;
|
|
130
90
|
|
|
131
91
|
/**
|
|
132
92
|
* Parameters for useDeletePartner mutation
|
|
133
93
|
*/
|
|
134
94
|
interface DeletePartnerParams {
|
|
135
|
-
partnerId:
|
|
95
|
+
partnerId: string;
|
|
136
96
|
}
|
|
137
97
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* Deletes a partner from the system.
|
|
141
|
-
* Available in both admin and user modes (for test data cleanup).
|
|
142
|
-
*
|
|
143
|
-
* @example
|
|
144
|
-
* ```tsx
|
|
145
|
-
* const deletePartner = useDeletePartner();
|
|
146
|
-
*
|
|
147
|
-
* deletePartner.mutate({
|
|
148
|
-
* partnerId: 1
|
|
149
|
-
* });
|
|
150
|
-
* ```
|
|
98
|
+
* Delete a partner from Supabase
|
|
151
99
|
*/
|
|
152
100
|
declare function useDeletePartner(options?: Omit<UseMutationOptions<void, Error, DeletePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<void, Error, DeletePartnerParams, unknown>;
|
|
153
101
|
|
|
@@ -159,10 +107,4 @@ declare const partnerKeys: {
|
|
|
159
107
|
current: () => readonly ["partners", "current"];
|
|
160
108
|
};
|
|
161
109
|
|
|
162
|
-
|
|
163
|
-
* Axios instance for Partners API
|
|
164
|
-
* Base URL configured through environment variables or defaults to relative path
|
|
165
|
-
*/
|
|
166
|
-
declare const api: axios.AxiosInstance;
|
|
167
|
-
|
|
168
|
-
export { type CreatePartnerParams, type DeletePartnerParams, type PartnerCreate, type PartnerUpdate, type UpdatePartnerParams, api, partnerKeys, useCreatePartner, useCurrentPartner, useDeletePartner, useUpdatePartner };
|
|
110
|
+
export { type CreatePartnerParams, type DeletePartnerParams, type PartnerCreate, type PartnerUpdate, type UpdatePartnerParams, partnerKeys, useCreatePartner, useCurrentPartner, useDeletePartner, useUpdatePartner };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
2
2
|
import { UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
|
|
3
|
-
import {
|
|
4
|
-
import * as axios from 'axios';
|
|
3
|
+
import { PartnerRow } from '@pfm-platform/shared';
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
|
-
* Fetch current partner configuration
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Partners are read-only configuration data
|
|
11
|
-
* Typically returns single partner (current tenant/white-label configuration)
|
|
6
|
+
* Fetch current partner configuration from Supabase
|
|
7
|
+
* Partners table is read-only (SELECT only RLS)
|
|
8
|
+
* Typically returns single partner (current tenant configuration)
|
|
12
9
|
*/
|
|
13
|
-
declare function useCurrentPartner(options?: Omit<UseQueryOptions<
|
|
14
|
-
id:
|
|
10
|
+
declare function useCurrentPartner(options?: Omit<UseQueryOptions<PartnerRow>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<{
|
|
11
|
+
id: string;
|
|
15
12
|
domain: string;
|
|
16
13
|
product_name: string;
|
|
17
14
|
browser_title: string;
|
|
18
15
|
partner_alerts_enabled: boolean;
|
|
19
16
|
demo: boolean;
|
|
20
|
-
modules:
|
|
21
|
-
[x: string]: unknown;
|
|
22
|
-
};
|
|
17
|
+
modules: Record<string, unknown>;
|
|
23
18
|
featured_searches: unknown[];
|
|
19
|
+
created_at: string | null;
|
|
24
20
|
}, Error>;
|
|
25
21
|
|
|
26
22
|
/**
|
|
@@ -42,38 +38,19 @@ interface CreatePartnerParams {
|
|
|
42
38
|
data: PartnerCreate;
|
|
43
39
|
}
|
|
44
40
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* Creates a partner manually for testing purposes.
|
|
48
|
-
* Uses mode switching for validation:
|
|
49
|
-
* - Admin mode: Allows manual partner creation for test data
|
|
50
|
-
* - User mode: Blocked (partners are configuration data)
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```tsx
|
|
54
|
-
* const createPartner = useCreatePartner();
|
|
55
|
-
*
|
|
56
|
-
* createPartner.mutate({
|
|
57
|
-
* data: {
|
|
58
|
-
* domain: 'example.com',
|
|
59
|
-
* product_name: 'Example Product',
|
|
60
|
-
* browser_title: 'Example',
|
|
61
|
-
* demo: true
|
|
62
|
-
* }
|
|
63
|
-
* });
|
|
64
|
-
* ```
|
|
41
|
+
* Create a new partner in Supabase
|
|
42
|
+
* Admin mode only — partners are configuration data
|
|
65
43
|
*/
|
|
66
|
-
declare function useCreatePartner(options?: Omit<UseMutationOptions<
|
|
67
|
-
id:
|
|
44
|
+
declare function useCreatePartner(options?: Omit<UseMutationOptions<PartnerRow, Error, CreatePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<{
|
|
45
|
+
id: string;
|
|
68
46
|
domain: string;
|
|
69
47
|
product_name: string;
|
|
70
48
|
browser_title: string;
|
|
71
49
|
partner_alerts_enabled: boolean;
|
|
72
50
|
demo: boolean;
|
|
73
|
-
modules:
|
|
74
|
-
[x: string]: unknown;
|
|
75
|
-
};
|
|
51
|
+
modules: Record<string, unknown>;
|
|
76
52
|
featured_searches: unknown[];
|
|
53
|
+
created_at: string | null;
|
|
77
54
|
}, Error, CreatePartnerParams, unknown>;
|
|
78
55
|
|
|
79
56
|
/**
|
|
@@ -92,62 +69,33 @@ interface PartnerUpdate {
|
|
|
92
69
|
* Parameters for useUpdatePartner mutation
|
|
93
70
|
*/
|
|
94
71
|
interface UpdatePartnerParams {
|
|
95
|
-
partnerId:
|
|
72
|
+
partnerId: string;
|
|
96
73
|
data: PartnerUpdate;
|
|
97
74
|
}
|
|
98
75
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* Updates partner fields for testing purposes.
|
|
102
|
-
* Uses mode switching for validation:
|
|
103
|
-
* - Admin mode: Allows updating partners for test scenarios
|
|
104
|
-
* - User mode: Blocked (partners are configuration data)
|
|
105
|
-
*
|
|
106
|
-
* @example
|
|
107
|
-
* ```tsx
|
|
108
|
-
* const updatePartner = useUpdatePartner();
|
|
109
|
-
*
|
|
110
|
-
* updatePartner.mutate({
|
|
111
|
-
* partnerId: 1,
|
|
112
|
-
* data: {
|
|
113
|
-
* product_name: 'Updated Product Name'
|
|
114
|
-
* }
|
|
115
|
-
* });
|
|
116
|
-
* ```
|
|
76
|
+
* Update a partner in Supabase
|
|
77
|
+
* Admin mode only — partners are configuration data
|
|
117
78
|
*/
|
|
118
|
-
declare function useUpdatePartner(options?: Omit<UseMutationOptions<
|
|
119
|
-
id:
|
|
79
|
+
declare function useUpdatePartner(options?: Omit<UseMutationOptions<PartnerRow, Error, UpdatePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<{
|
|
80
|
+
id: string;
|
|
120
81
|
domain: string;
|
|
121
82
|
product_name: string;
|
|
122
83
|
browser_title: string;
|
|
123
84
|
partner_alerts_enabled: boolean;
|
|
124
85
|
demo: boolean;
|
|
125
|
-
modules:
|
|
126
|
-
[x: string]: unknown;
|
|
127
|
-
};
|
|
86
|
+
modules: Record<string, unknown>;
|
|
128
87
|
featured_searches: unknown[];
|
|
88
|
+
created_at: string | null;
|
|
129
89
|
}, Error, UpdatePartnerParams, unknown>;
|
|
130
90
|
|
|
131
91
|
/**
|
|
132
92
|
* Parameters for useDeletePartner mutation
|
|
133
93
|
*/
|
|
134
94
|
interface DeletePartnerParams {
|
|
135
|
-
partnerId:
|
|
95
|
+
partnerId: string;
|
|
136
96
|
}
|
|
137
97
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* Deletes a partner from the system.
|
|
141
|
-
* Available in both admin and user modes (for test data cleanup).
|
|
142
|
-
*
|
|
143
|
-
* @example
|
|
144
|
-
* ```tsx
|
|
145
|
-
* const deletePartner = useDeletePartner();
|
|
146
|
-
*
|
|
147
|
-
* deletePartner.mutate({
|
|
148
|
-
* partnerId: 1
|
|
149
|
-
* });
|
|
150
|
-
* ```
|
|
98
|
+
* Delete a partner from Supabase
|
|
151
99
|
*/
|
|
152
100
|
declare function useDeletePartner(options?: Omit<UseMutationOptions<void, Error, DeletePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<void, Error, DeletePartnerParams, unknown>;
|
|
153
101
|
|
|
@@ -159,10 +107,4 @@ declare const partnerKeys: {
|
|
|
159
107
|
current: () => readonly ["partners", "current"];
|
|
160
108
|
};
|
|
161
109
|
|
|
162
|
-
|
|
163
|
-
* Axios instance for Partners API
|
|
164
|
-
* Base URL configured through environment variables or defaults to relative path
|
|
165
|
-
*/
|
|
166
|
-
declare const api: axios.AxiosInstance;
|
|
167
|
-
|
|
168
|
-
export { type CreatePartnerParams, type DeletePartnerParams, type PartnerCreate, type PartnerUpdate, type UpdatePartnerParams, api, partnerKeys, useCreatePartner, useCurrentPartner, useDeletePartner, useUpdatePartner };
|
|
110
|
+
export { type CreatePartnerParams, type DeletePartnerParams, type PartnerCreate, type PartnerUpdate, type UpdatePartnerParams, partnerKeys, useCreatePartner, useCurrentPartner, useDeletePartner, useUpdatePartner };
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
|
|
2
|
-
import {
|
|
3
|
-
import axios from 'axios';
|
|
2
|
+
import { supabase, PartnerRowSchema, useAppMode, PartnerCreateSchemaAdmin, PartnerCreateSchemaUser, PartnerUpdateSchemaAdmin, PartnerUpdateSchemaUser } from '@pfm-platform/shared';
|
|
4
3
|
|
|
5
4
|
// src/queries/useCurrentPartner.ts
|
|
6
|
-
var api = axios.create({
|
|
7
|
-
baseURL: "/api",
|
|
8
|
-
headers: {
|
|
9
|
-
"Content-Type": "application/json"
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
5
|
|
|
13
6
|
// src/keys.ts
|
|
14
7
|
var partnerKeys = {
|
|
@@ -21,12 +14,9 @@ function useCurrentPartner(options) {
|
|
|
21
14
|
return useQuery({
|
|
22
15
|
queryKey: partnerKeys.current(),
|
|
23
16
|
queryFn: async () => {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
throw new Error("No current partner configuration found");
|
|
28
|
-
}
|
|
29
|
-
return validated.partners[0];
|
|
17
|
+
const { data, error } = await supabase.from("partners").select("*").limit(1).single();
|
|
18
|
+
if (error) throw new Error(error.message);
|
|
19
|
+
return PartnerRowSchema.parse(data);
|
|
30
20
|
},
|
|
31
21
|
staleTime: 1e3 * 60 * 60 * 24,
|
|
32
22
|
// 24 hours (partner config rarely changes)
|
|
@@ -40,8 +30,9 @@ function useCreatePartner(options) {
|
|
|
40
30
|
mutationFn: async ({ data }) => {
|
|
41
31
|
const schema = mode === "admin" ? PartnerCreateSchemaAdmin : PartnerCreateSchemaUser;
|
|
42
32
|
const validated = schema.parse(data);
|
|
43
|
-
const
|
|
44
|
-
|
|
33
|
+
const { data: row, error } = await supabase.from("partners").insert(validated).select().single();
|
|
34
|
+
if (error) throw new Error(error.message);
|
|
35
|
+
return PartnerRowSchema.parse(row);
|
|
45
36
|
},
|
|
46
37
|
onSuccess: () => {
|
|
47
38
|
queryClient.invalidateQueries({
|
|
@@ -58,8 +49,9 @@ function useUpdatePartner(options) {
|
|
|
58
49
|
mutationFn: async ({ partnerId, data }) => {
|
|
59
50
|
const schema = mode === "admin" ? PartnerUpdateSchemaAdmin : PartnerUpdateSchemaUser;
|
|
60
51
|
const validated = schema.parse(data);
|
|
61
|
-
const
|
|
62
|
-
|
|
52
|
+
const { data: row, error } = await supabase.from("partners").update(validated).eq("id", partnerId).select().single();
|
|
53
|
+
if (error) throw new Error(error.message);
|
|
54
|
+
return PartnerRowSchema.parse(row);
|
|
63
55
|
},
|
|
64
56
|
onSuccess: () => {
|
|
65
57
|
queryClient.invalidateQueries({
|
|
@@ -73,8 +65,8 @@ function useDeletePartner(options) {
|
|
|
73
65
|
const queryClient = useQueryClient();
|
|
74
66
|
return useMutation({
|
|
75
67
|
mutationFn: async ({ partnerId }) => {
|
|
76
|
-
const
|
|
77
|
-
|
|
68
|
+
const { error } = await supabase.from("partners").delete().eq("id", partnerId);
|
|
69
|
+
if (error) throw new Error(error.message);
|
|
78
70
|
},
|
|
79
71
|
onSuccess: () => {
|
|
80
72
|
queryClient.invalidateQueries({
|
|
@@ -85,6 +77,6 @@ function useDeletePartner(options) {
|
|
|
85
77
|
});
|
|
86
78
|
}
|
|
87
79
|
|
|
88
|
-
export {
|
|
80
|
+
export { partnerKeys, useCreatePartner, useCurrentPartner, useDeletePartner, useUpdatePartner };
|
|
89
81
|
//# sourceMappingURL=index.js.map
|
|
90
82
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/keys.ts","../src/queries/useCurrentPartner.ts","../src/mutations/useCreatePartner.ts","../src/mutations/useUpdatePartner.ts","../src/mutations/useDeletePartner.ts"],"names":["useQueryClient","useAppMode","useMutation","PartnerSchema"],"mappings":"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","file":"index.js","sourcesContent":["import axios from 'axios';\n\n/**\n * Axios instance for Partners API\n * Base URL configured through environment variables or defaults to relative path\n */\nexport const api = axios.create({\n baseURL: '/api',\n headers: {\n 'Content-Type': 'application/json',\n },\n});\n","/**\n * Query key factory for Partners domain\n */\nexport const partnerKeys = {\n all: ['partners'] as const,\n current: () => [...partnerKeys.all, 'current'] as const,\n};\n","import { useQuery, UseQueryOptions } from '@tanstack/react-query';\nimport { Partner, PartnersResponseSchema } from '@pfm-platform/shared';\nimport { api } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Fetch current partner configuration\n * GET /partners/current\n *\n * Partners are read-only configuration data\n * Typically returns single partner (current tenant/white-label configuration)\n */\nexport function useCurrentPartner(\n options?: Omit<UseQueryOptions<Partner>, 'queryKey' | 'queryFn'>\n) {\n return useQuery({\n queryKey: partnerKeys.current(),\n queryFn: async () => {\n const response = await api.get('/partners/current');\n const validated = PartnersResponseSchema.parse(response.data);\n // Return first partner (current partner configuration)\n if (validated.partners.length === 0) {\n throw new Error('No current partner configuration found');\n }\n return validated.partners[0];\n },\n staleTime: 1000 * 60 * 60 * 24, // 24 hours (partner config rarely changes)\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport {\n PartnerCreateSchemaAdmin,\n PartnerCreateSchemaUser,\n PartnerSchema,\n useAppMode,\n} from '@pfm-platform/shared';\nimport type { Partner } from '@pfm-platform/shared';\nimport { api } from '../client';\nimport { partnerKeys } from '../keys';\n\n/**\n * Partner create data interface\n */\nexport interface PartnerCreate {\n domain: string;\n product_name: string;\n browser_title: string;\n partner_alerts_enabled?: boolean;\n demo?: boolean;\n modules?: Record<string, unknown>;\n featured_searches?: unknown[];\n}\n\n/**\n * Parameters for useCreatePartner mutation\n */\nexport interface CreatePartnerParams {\n data: PartnerCreate;\n}\n\n/**\n * Mutation hook for creating a new partner\n *\n * Creates a partner manually for testing purposes.\n * Uses mode switching for validation:\n * - Admin mode: Allows manual partner creation for test data\n * - User mode: Blocked (partners are configuration data)\n *\n * @example\n * ```tsx\n * const createPartner = useCreatePartner();\n *\n * createPartner.mutate({\n * data: {\n * domain: 'example.com',\n * product_name: 'Example Product',\n * browser_title: 'Example',\n * demo: true\n * }\n * });\n * ```\n */\nexport function useCreatePartner(\n options?: Omit<UseMutationOptions<Partner, Error, CreatePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n const { mode } = useAppMode();\n\n return useMutation({\n mutationFn: async ({ data }: CreatePartnerParams) => {\n // Select schema based on mode\n const schema =\n mode === 'admin'\n ? PartnerCreateSchemaAdmin\n : PartnerCreateSchemaUser;\n\n // Validate partner data\n const validated = schema.parse(data);\n\n // POST to create new partner\n const response = await api.post('/partners/current', validated);\n\n // Return created partner\n return PartnerSchema.parse(response.data);\n },\n onSuccess: () => {\n // Invalidate partner query to refetch updated data\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport {\n PartnerUpdateSchemaAdmin,\n PartnerUpdateSchemaUser,\n PartnerSchema,\n useAppMode,\n} from '@pfm-platform/shared';\nimport type { Partner } from '@pfm-platform/shared';\nimport { api } from '../client';\nimport { partnerKeys } from '../keys';\n\n/**\n * Partner update data interface\n */\nexport interface PartnerUpdate {\n domain?: string;\n product_name?: string;\n browser_title?: string;\n partner_alerts_enabled?: boolean;\n demo?: boolean;\n modules?: Record<string, unknown>;\n featured_searches?: unknown[];\n}\n\n/**\n * Parameters for useUpdatePartner mutation\n */\nexport interface UpdatePartnerParams {\n partnerId: number;\n data: PartnerUpdate;\n}\n\n/**\n * Mutation hook for updating a partner\n *\n * Updates partner fields for testing purposes.\n * Uses mode switching for validation:\n * - Admin mode: Allows updating partners for test scenarios\n * - User mode: Blocked (partners are configuration data)\n *\n * @example\n * ```tsx\n * const updatePartner = useUpdatePartner();\n *\n * updatePartner.mutate({\n * partnerId: 1,\n * data: {\n * product_name: 'Updated Product Name'\n * }\n * });\n * ```\n */\nexport function useUpdatePartner(\n options?: Omit<UseMutationOptions<Partner, Error, UpdatePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n const { mode } = useAppMode();\n\n return useMutation({\n mutationFn: async ({ partnerId, data }: UpdatePartnerParams) => {\n // Select schema based on mode\n const schema =\n mode === 'admin'\n ? PartnerUpdateSchemaAdmin\n : PartnerUpdateSchemaUser;\n\n // Validate partner update data\n const validated = schema.parse(data);\n\n // PUT to update partner\n const response = await api.put(`/partners/${partnerId}`, validated);\n\n // Return updated partner\n return PartnerSchema.parse(response.data);\n },\n onSuccess: () => {\n // Invalidate partner query to refetch updated data\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport { PartnerDeleteSchema } from '@pfm-platform/shared';\nimport { api } from '../client';\nimport { partnerKeys } from '../keys';\n\n/**\n * Parameters for useDeletePartner mutation\n */\nexport interface DeletePartnerParams {\n partnerId: number;\n}\n\n/**\n * Mutation hook for deleting a partner\n *\n * Deletes a partner from the system.\n * Available in both admin and user modes (for test data cleanup).\n *\n * @example\n * ```tsx\n * const deletePartner = useDeletePartner();\n *\n * deletePartner.mutate({\n * partnerId: 1\n * });\n * ```\n */\nexport function useDeletePartner(\n options?: Omit<UseMutationOptions<void, Error, DeletePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ partnerId }: DeletePartnerParams) => {\n // Validate partner ID\n const validated = PartnerDeleteSchema.parse({ id: partnerId });\n\n // DELETE partner\n await api.delete(`/partners/${validated.id}`);\n },\n onSuccess: () => {\n // Invalidate partner query to refetch updated list\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/keys.ts","../src/queries/useCurrentPartner.ts","../src/mutations/useCreatePartner.ts","../src/mutations/useUpdatePartner.ts","../src/mutations/useDeletePartner.ts"],"names":["PartnerRowSchema","useQueryClient","useAppMode","useMutation"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Query key factory for Partners domain\n */\nexport const partnerKeys = {\n all: ['partners'] as const,\n current: () => [...partnerKeys.all, 'current'] as const,\n};\n","import { useQuery, type UseQueryOptions } from '@tanstack/react-query';\nimport { PartnerRowSchema, type PartnerRow } from '@pfm-platform/shared';\nimport { supabase } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Fetch current partner configuration from Supabase\n * Partners table is read-only (SELECT only RLS)\n * Typically returns single partner (current tenant configuration)\n */\nexport function useCurrentPartner(\n options?: Omit<UseQueryOptions<PartnerRow>, 'queryKey' | 'queryFn'>\n) {\n return useQuery({\n queryKey: partnerKeys.current(),\n queryFn: async () => {\n const { data, error } = await supabase\n .from('partners')\n .select('*')\n .limit(1)\n .single();\n\n if (error) throw new Error(error.message);\n\n return PartnerRowSchema.parse(data);\n },\n staleTime: 1000 * 60 * 60 * 24, // 24 hours (partner config rarely changes)\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport {\n PartnerCreateSchemaAdmin,\n PartnerCreateSchemaUser,\n PartnerRowSchema,\n useAppMode,\n type PartnerRow,\n type TablesInsert,\n} from '@pfm-platform/shared';\nimport { supabase } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Partner create data interface\n */\nexport interface PartnerCreate {\n domain: string;\n product_name: string;\n browser_title: string;\n partner_alerts_enabled?: boolean;\n demo?: boolean;\n modules?: Record<string, unknown>;\n featured_searches?: unknown[];\n}\n\n/**\n * Parameters for useCreatePartner mutation\n */\nexport interface CreatePartnerParams {\n data: PartnerCreate;\n}\n\n/**\n * Create a new partner in Supabase\n * Admin mode only — partners are configuration data\n */\nexport function useCreatePartner(\n options?: Omit<UseMutationOptions<PartnerRow, Error, CreatePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n const { mode } = useAppMode();\n\n return useMutation({\n mutationFn: async ({ data }: CreatePartnerParams) => {\n const schema =\n mode === 'admin'\n ? PartnerCreateSchemaAdmin\n : PartnerCreateSchemaUser;\n\n const validated = schema.parse(data);\n\n const { data: row, error } = await supabase\n .from('partners')\n .insert(validated as TablesInsert<'partners'>)\n .select()\n .single();\n\n if (error) throw new Error(error.message);\n\n return PartnerRowSchema.parse(row);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport {\n PartnerUpdateSchemaAdmin,\n PartnerUpdateSchemaUser,\n PartnerRowSchema,\n useAppMode,\n type PartnerRow,\n type TablesUpdate,\n} from '@pfm-platform/shared';\nimport { supabase } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Partner update data interface\n */\nexport interface PartnerUpdate {\n domain?: string;\n product_name?: string;\n browser_title?: string;\n partner_alerts_enabled?: boolean;\n demo?: boolean;\n modules?: Record<string, unknown>;\n featured_searches?: unknown[];\n}\n\n/**\n * Parameters for useUpdatePartner mutation\n */\nexport interface UpdatePartnerParams {\n partnerId: string;\n data: PartnerUpdate;\n}\n\n/**\n * Update a partner in Supabase\n * Admin mode only — partners are configuration data\n */\nexport function useUpdatePartner(\n options?: Omit<UseMutationOptions<PartnerRow, Error, UpdatePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n const { mode } = useAppMode();\n\n return useMutation({\n mutationFn: async ({ partnerId, data }: UpdatePartnerParams) => {\n const schema =\n mode === 'admin'\n ? PartnerUpdateSchemaAdmin\n : PartnerUpdateSchemaUser;\n\n const validated = schema.parse(data);\n\n const { data: row, error } = await supabase\n .from('partners')\n .update(validated as TablesUpdate<'partners'>)\n .eq('id', partnerId)\n .select()\n .single();\n\n if (error) throw new Error(error.message);\n\n return PartnerRowSchema.parse(row);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n","import {\n useMutation,\n useQueryClient,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport { supabase } from '../client.js';\nimport { partnerKeys } from '../keys.js';\n\n/**\n * Parameters for useDeletePartner mutation\n */\nexport interface DeletePartnerParams {\n partnerId: string;\n}\n\n/**\n * Delete a partner from Supabase\n */\nexport function useDeletePartner(\n options?: Omit<UseMutationOptions<void, Error, DeletePartnerParams>, 'mutationFn'>\n) {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ partnerId }: DeletePartnerParams) => {\n const { error } = await supabase\n .from('partners')\n .delete()\n .eq('id', partnerId);\n\n if (error) throw new Error(error.message);\n },\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: partnerKeys.current(),\n });\n },\n ...options,\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pfm-platform/partners-data-access",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"axios": "^1.13.2",
|
|
8
7
|
"zod": "4.1.12",
|
|
9
|
-
"@pfm-platform/shared": "0.
|
|
8
|
+
"@pfm-platform/shared": "0.2.1"
|
|
10
9
|
},
|
|
11
10
|
"devDependencies": {
|
|
12
|
-
"@testing-library/react": "^16.3.
|
|
13
|
-
"@vitejs/plugin-react": "^5.1.
|
|
14
|
-
"@vitest/coverage-v8": "^4.0.
|
|
11
|
+
"@testing-library/react": "^16.3.2",
|
|
12
|
+
"@vitejs/plugin-react": "^5.1.4",
|
|
13
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
15
14
|
"jsdom": "^27.2.0",
|
|
16
|
-
"react-dom": "19.2.
|
|
15
|
+
"react-dom": "19.2.4",
|
|
17
16
|
"typescript": "5.9.3",
|
|
18
|
-
"vitest": "4.0.
|
|
17
|
+
"vitest": "4.0.18"
|
|
19
18
|
},
|
|
20
19
|
"module": "./dist/index.js",
|
|
21
20
|
"types": "./dist/index.d.ts",
|