@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 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 response = await api.get("/partners/current");
31
- const validated = shared.PartnersResponseSchema.parse(response.data);
32
- if (validated.partners.length === 0) {
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 response = await api.post("/partners/current", validated);
50
- return shared.PartnerSchema.parse(response.data);
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 response = await api.put(`/partners/${partnerId}`, validated);
68
- return shared.PartnerSchema.parse(response.data);
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 validated = shared.PartnerDeleteSchema.parse({ id: partnerId });
83
- await api.delete(`/partners/${validated.id}`);
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;
@@ -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 { Partner } from '@pfm-platform/shared';
4
- import * as axios from 'axios';
3
+ import { PartnerRow } from '@pfm-platform/shared';
5
4
 
6
5
  /**
7
- * Fetch current partner configuration
8
- * GET /partners/current
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<Partner>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<{
14
- id: number;
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
- * Mutation hook for creating a new partner
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<Partner, Error, CreatePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<{
67
- id: number;
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: number;
72
+ partnerId: string;
96
73
  data: PartnerUpdate;
97
74
  }
98
75
  /**
99
- * Mutation hook for updating a partner
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<Partner, Error, UpdatePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<{
119
- id: number;
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: number;
95
+ partnerId: string;
136
96
  }
137
97
  /**
138
- * Mutation hook for deleting a partner
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 { Partner } from '@pfm-platform/shared';
4
- import * as axios from 'axios';
3
+ import { PartnerRow } from '@pfm-platform/shared';
5
4
 
6
5
  /**
7
- * Fetch current partner configuration
8
- * GET /partners/current
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<Partner>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<{
14
- id: number;
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
- * Mutation hook for creating a new partner
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<Partner, Error, CreatePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<{
67
- id: number;
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: number;
72
+ partnerId: string;
96
73
  data: PartnerUpdate;
97
74
  }
98
75
  /**
99
- * Mutation hook for updating a partner
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<Partner, Error, UpdatePartnerParams>, 'mutationFn'>): _tanstack_react_query.UseMutationResult<{
119
- id: number;
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: number;
95
+ partnerId: string;
136
96
  }
137
97
  /**
138
- * Mutation hook for deleting a partner
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 { PartnersResponseSchema, useAppMode, PartnerCreateSchemaAdmin, PartnerCreateSchemaUser, PartnerSchema, PartnerUpdateSchemaAdmin, PartnerUpdateSchemaUser, PartnerDeleteSchema } from '@pfm-platform/shared';
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 response = await api.get("/partners/current");
25
- const validated = PartnersResponseSchema.parse(response.data);
26
- if (validated.partners.length === 0) {
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 response = await api.post("/partners/current", validated);
44
- return PartnerSchema.parse(response.data);
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 response = await api.put(`/partners/${partnerId}`, validated);
62
- return PartnerSchema.parse(response.data);
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 validated = PartnerDeleteSchema.parse({ id: partnerId });
77
- await api.delete(`/partners/${validated.id}`);
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 { api, partnerKeys, useCreatePartner, useCurrentPartner, useDeletePartner, useUpdatePartner };
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.1.1",
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.0.1"
8
+ "@pfm-platform/shared": "0.2.1"
10
9
  },
11
10
  "devDependencies": {
12
- "@testing-library/react": "^16.3.0",
13
- "@vitejs/plugin-react": "^5.1.1",
14
- "@vitest/coverage-v8": "^4.0.9",
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.0",
15
+ "react-dom": "19.2.4",
17
16
  "typescript": "5.9.3",
18
- "vitest": "4.0.9"
17
+ "vitest": "4.0.18"
19
18
  },
20
19
  "module": "./dist/index.js",
21
20
  "types": "./dist/index.d.ts",