@open-loyalty/mcp-server 1.3.1 → 1.3.4

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.
@@ -18,10 +18,11 @@ export const segmentToolDefinitions = [
18
18
  {
19
19
  name: "ol_segment_create",
20
20
  title: "Create Segment",
21
- description: "Create segment to group members. Parts use OR logic (member matches if ANY part matches). Criteria within parts use AND logic (must match ALL criteria in that part). " +
22
- "WORKING criterion types: 'transaction_count' (max auto-filled if omitted). " +
23
- "NOT WORKING: 'tier', 'points_balance' are rejected by the API. " +
24
- "Example - High activity segment: parts: [{ criteria: [{ type: 'transaction_count', min: 5, max: 999999 }] }]",
21
+ description: "Create segment to group members. " +
22
+ "⚠️ ONLY 'transaction_count' criterion type works reliably. 'tier' and 'points_balance' are REJECTED by the API. " +
23
+ "REQUIRED: name, parts array with criteria. " +
24
+ "Example for 5+ purchases: { name: 'Frequent Buyers', parts: [{ criteria: [{ type: 'transaction_count', min: 5 }] }], active: true }. " +
25
+ "Parts use OR logic (ANY part matches), criteria within parts use AND logic (ALL criteria must match).",
25
26
  readOnly: false,
26
27
  inputSchema: SegmentCreateInputSchema,
27
28
  handler: segmentCreate,
@@ -19,17 +19,6 @@ export declare const TierSetCreateInputSchema: {
19
19
  attribute: "activeUnits" | "totalEarnedUnits" | "totalSpending" | "monthsSinceJoiningProgram" | "cumulatedEarnedUnits";
20
20
  walletType?: string | undefined;
21
21
  }>, "many">;
22
- downgrade: z.ZodOptional<z.ZodObject<{
23
- mode: z.ZodEnum<["none", "automatic", "x_days"]>;
24
- days: z.ZodOptional<z.ZodNumber>;
25
- }, "strip", z.ZodTypeAny, {
26
- mode: "none" | "automatic" | "x_days";
27
- days?: number | undefined;
28
- }, {
29
- mode: "none" | "automatic" | "x_days";
30
- days?: number | undefined;
31
- }>>;
32
- active: z.ZodOptional<z.ZodBoolean>;
33
22
  };
34
23
  export declare const TierSetGetInputSchema: {
35
24
  storeCode: z.ZodOptional<z.ZodString>;
@@ -107,11 +96,6 @@ type TierSetCreateInput = {
107
96
  attribute: string;
108
97
  walletType?: string;
109
98
  }[];
110
- downgrade?: {
111
- mode: string;
112
- days?: number;
113
- };
114
- active?: boolean;
115
99
  };
116
100
  type TierSetGetInput = {
117
101
  storeCode?: string;
@@ -169,7 +153,7 @@ export declare function tiersetGetTiers(input: TierSetGetInput): Promise<{
169
153
  export declare const tiersetToolDefinitions: readonly [{
170
154
  readonly name: "ol_tierset_list";
171
155
  readonly title: "List Loyalty Programs";
172
- readonly description: "List all tier sets. Use tierset_get to fetch conditions needed for defining tiers. Returns tierSetId, name, active status, and tier count for each tier set.";
156
+ readonly description: string;
173
157
  readonly readOnly: true;
174
158
  readonly inputSchema: {
175
159
  storeCode: z.ZodOptional<z.ZodString>;
@@ -196,23 +180,12 @@ export declare const tiersetToolDefinitions: readonly [{
196
180
  attribute: "activeUnits" | "totalEarnedUnits" | "totalSpending" | "monthsSinceJoiningProgram" | "cumulatedEarnedUnits";
197
181
  walletType?: string | undefined;
198
182
  }>, "many">;
199
- downgrade: z.ZodOptional<z.ZodObject<{
200
- mode: z.ZodEnum<["none", "automatic", "x_days"]>;
201
- days: z.ZodOptional<z.ZodNumber>;
202
- }, "strip", z.ZodTypeAny, {
203
- mode: "none" | "automatic" | "x_days";
204
- days?: number | undefined;
205
- }, {
206
- mode: "none" | "automatic" | "x_days";
207
- days?: number | undefined;
208
- }>>;
209
- active: z.ZodOptional<z.ZodBoolean>;
210
183
  };
211
184
  readonly handler: typeof tiersetCreate;
212
185
  }, {
213
186
  readonly name: "ol_tierset_get";
214
187
  readonly title: "Get Loyalty Program Details";
215
- readonly description: "Get tier set details including conditionId values needed for tierset_update_tiers. Returns the full tier set with conditions array containing conditionId for each condition.";
188
+ readonly description: string;
216
189
  readonly readOnly: true;
217
190
  readonly inputSchema: {
218
191
  storeCode: z.ZodOptional<z.ZodString>;
@@ -222,7 +195,7 @@ export declare const tiersetToolDefinitions: readonly [{
222
195
  }, {
223
196
  readonly name: "ol_tierset_update";
224
197
  readonly title: "Update Loyalty Program";
225
- readonly description: "Update tier set metadata (name, description, active status, downgrade settings). Does not modify tiers - use tierset_update_tiers for that.";
198
+ readonly description: string;
226
199
  readonly readOnly: false;
227
200
  readonly inputSchema: {
228
201
  storeCode: z.ZodOptional<z.ZodString>;
@@ -14,15 +14,13 @@ export const TierSetCreateInputSchema = {
14
14
  name: z.string().describe("Name of the tier set."),
15
15
  description: z.string().optional().describe("Description of the tier set."),
16
16
  conditions: z.array(z.object({
17
- attribute: TierSetAttributeEnum.describe("The attribute to use for this condition (use `attribute`, not `type`)."),
18
- walletType: z.string().optional().describe("Wallet type CODE (not UUID). Required for unit-based attributes like activeUnits. " +
17
+ attribute: TierSetAttributeEnum.describe("VALID VALUES: 'activeUnits' (current balance), 'totalEarnedUnits' (lifetime points - NOT 'earnedUnits'), " +
18
+ "'totalSpending' (lifetime spend), 'monthsSinceJoiningProgram' (tenure), 'cumulatedEarnedUnits'. " +
19
+ "Use 'totalEarnedUnits' for lifetime points earned."),
20
+ walletType: z.string().optional().describe("Wallet type CODE (not UUID). Required for unit-based attributes (activeUnits, totalEarnedUnits, cumulatedEarnedUnits). " +
19
21
  "Use wallet_type_list to find walletType.code (e.g., 'default')."),
20
- })).describe("Array of conditions that define tier progression criteria. Each condition uses `attribute` + optional `walletType`."),
21
- downgrade: z.object({
22
- mode: DowngradeModeEnum.describe("Downgrade mode."),
23
- days: z.number().optional().describe("Number of days for x_days mode (required if mode is x_days)."),
24
- }).optional().describe("Downgrade configuration for the tier set."),
25
- active: z.boolean().optional().describe("Whether the tier set is active. Defaults to true."),
22
+ })).describe("Array of conditions that define tier progression criteria. IMPORTANT: Use 'totalEarnedUnits' for lifetime points (NOT 'earnedUnits')."),
23
+ // NOTE: downgrade and active are NOT supported at creation time - use tierset_update after creation
26
24
  };
27
25
  export const TierSetGetInputSchema = {
28
26
  storeCode: z.string().optional().describe("Store code for multi-tenant routing. DO NOT pass this parameter - the configured default will be used automatically. Only provide a value if the user explicitly asks to work with a different store."),
@@ -85,23 +83,34 @@ export async function tiersetList(input) {
85
83
  }
86
84
  export async function tiersetCreate(input) {
87
85
  const storeCode = getStoreCode(input.storeCode);
88
- // API requires tierSet wrapper with translations (at least en is required)
89
- const payload = {
90
- tierSet: {
91
- translations: {
92
- en: {
93
- name: input.name,
94
- description: input.description || "",
95
- },
86
+ // API QUIRK: Only accepts specific fields at creation time.
87
+ // Fields NOT supported at creation: tiers, active, downgrade
88
+ // These must be set via tierset_update or tierset_update_tiers after creation.
89
+ //
90
+ // REQUIRED fields:
91
+ // - translations.en.name (string)
92
+ // - conditions (array with attribute, optionally walletType)
93
+ const tierSetPayload = {
94
+ translations: {
95
+ en: {
96
+ name: input.name,
97
+ description: input.description || "",
96
98
  },
97
- conditions: input.conditions,
98
- downgrade: input.downgrade,
99
- active: input.active ?? true,
100
99
  },
100
+ conditions: input.conditions,
101
101
  };
102
+ const payload = { tierSet: tierSetPayload };
102
103
  try {
103
104
  const response = await apiPost(`/${storeCode}/tierSet`, payload);
104
- const validated = TierSetSchema.parse(response);
105
+ // API QUIRK: Create endpoint only returns { tierSetId: string }
106
+ // We need to fetch the full tier set to get the conditionId values
107
+ const createResponse = response;
108
+ if (!createResponse.tierSetId) {
109
+ throw new Error(`Unexpected response format: ${JSON.stringify(response)}`);
110
+ }
111
+ // Fetch the created tier set to get condition IDs
112
+ const tierSetResponse = await apiGet(`/${storeCode}/tierSet/${createResponse.tierSetId}`);
113
+ const validated = TierSetSchema.parse(tierSetResponse);
105
114
  return {
106
115
  tierSetId: validated.tierSetId,
107
116
  conditions: validated.conditions.map((c) => ({
@@ -127,21 +136,36 @@ export async function tiersetGet(input) {
127
136
  }
128
137
  export async function tiersetUpdate(input) {
129
138
  const storeCode = getStoreCode(input.storeCode);
130
- // API requires tierSet wrapper with translations (at least en is required)
131
- const tierSetPayload = {};
132
- // If name or description is provided, wrap in translations
133
- if (input.name !== undefined || input.description !== undefined) {
134
- tierSetPayload.translations = {
139
+ // API requires conditions to be present in PUT requests, even for metadata-only updates.
140
+ // Fetch existing tier set to preserve conditions.
141
+ let existingTierSet;
142
+ try {
143
+ const response = await apiGet(`/${storeCode}/tierSet/${input.tierSetId}`);
144
+ existingTierSet = TierSetSchema.parse(response);
145
+ }
146
+ catch (error) {
147
+ throw formatApiError(error, "ol_tierset_update");
148
+ }
149
+ // Build payload using existing values as defaults
150
+ const tierSetPayload = {
151
+ // Always include conditions - API requires this even for metadata updates
152
+ conditions: existingTierSet.conditions.map((c) => ({
153
+ attribute: c.attribute,
154
+ walletType: c.walletType,
155
+ })),
156
+ // Always include translations
157
+ translations: {
135
158
  en: {
136
- name: input.name || "",
137
- description: input.description || "",
159
+ name: input.name ?? existingTierSet.name,
160
+ description: input.description ?? existingTierSet.description ?? "",
138
161
  },
139
- };
140
- }
141
- if (input.active !== undefined)
142
- tierSetPayload.active = input.active;
143
- if (input.downgrade !== undefined)
162
+ },
163
+ // Preserve active status unless explicitly changed
164
+ active: input.active ?? existingTierSet.active,
165
+ };
166
+ if (input.downgrade !== undefined) {
144
167
  tierSetPayload.downgrade = input.downgrade;
168
+ }
145
169
  try {
146
170
  await apiPut(`/${storeCode}/tierSet/${input.tierSetId}`, { tierSet: tierSetPayload });
147
171
  }
@@ -196,7 +220,9 @@ export const tiersetToolDefinitions = [
196
220
  {
197
221
  name: "ol_tierset_list",
198
222
  title: "List Loyalty Programs",
199
- description: "List all tier sets. Use tierset_get to fetch conditions needed for defining tiers. Returns tierSetId, name, active status, and tier count for each tier set.",
223
+ description: "List all tier sets. RECOMMENDED: Check if tier set already exists before creating a new one. " +
224
+ "If exists, use tierset_get to fetch conditionId needed for defining tiers via tierset_update_tiers. " +
225
+ "Returns tierSetId, name, active status, and tier count for each tier set.",
200
226
  readOnly: true,
201
227
  inputSchema: TierSetListInputSchema,
202
228
  handler: tiersetList,
@@ -204,9 +230,14 @@ export const tiersetToolDefinitions = [
204
230
  {
205
231
  name: "ol_tierset_create",
206
232
  title: "Create Loyalty Program",
207
- description: "Create a new tier set (loyalty program structure). After creation, call tierset_get to obtain conditionId values, then tierset_update_tiers to define tier thresholds. " +
208
- "Conditions define what metrics are used for tier progression (e.g., activeUnits for points balance). " +
209
- "IMPORTANT: conditions use `attribute` (not `type`). For unit-based attributes, set `walletType` to the wallet CODE (e.g., 'default'), not the UUID.",
233
+ description: "Create a new tier set (loyalty program structure). " +
234
+ "⚠️ LIMIT: Maximum 3 ACTIVE tier sets per store. ALWAYS call tierset_list FIRST to check existing tier sets - if one exists that matches your needs, REUSE IT instead of creating a new one. " +
235
+ "WORKFLOW: 1) tierset_list (check existing) 2) tierset_create (only if needed) 3) tierset_get (to get conditionId) 4) tierset_update_tiers (to define thresholds). " +
236
+ "⚠️ API LIMITATION: Only 'name', 'description', and 'conditions' are accepted at creation time. " +
237
+ "Fields like 'active', 'downgrade', 'tiers' are NOT supported at creation - use tierset_update after creation to set these. " +
238
+ "Valid condition attributes: 'totalEarnedUnits' (lifetime points), 'activeUnits' (current balance), 'totalSpending', 'monthsSinceJoiningProgram'. " +
239
+ "COMMON MISTAKE: Use 'totalEarnedUnits' NOT 'earnedUnits' for lifetime points. " +
240
+ "For unit-based attributes, set walletType to 'default'.",
210
241
  readOnly: false,
211
242
  inputSchema: TierSetCreateInputSchema,
212
243
  handler: tiersetCreate,
@@ -214,7 +245,10 @@ export const tiersetToolDefinitions = [
214
245
  {
215
246
  name: "ol_tierset_get",
216
247
  title: "Get Loyalty Program Details",
217
- description: "Get tier set details including conditionId values needed for tierset_update_tiers. Returns the full tier set with conditions array containing conditionId for each condition.",
248
+ description: "Get tier set details including conditionId values needed for tierset_update_tiers. " +
249
+ "CRITICAL: After tierset_create, you MUST call this to get the conditionId from the conditions array. " +
250
+ "The conditionId is then used in tierset_update_tiers to set tier thresholds. " +
251
+ "Response includes conditions[].id (this is the conditionId) and conditions[].attribute.",
218
252
  readOnly: true,
219
253
  inputSchema: TierSetGetInputSchema,
220
254
  handler: tiersetGet,
@@ -222,7 +256,9 @@ export const tiersetToolDefinitions = [
222
256
  {
223
257
  name: "ol_tierset_update",
224
258
  title: "Update Loyalty Program",
225
- description: "Update tier set metadata (name, description, active status, downgrade settings). Does not modify tiers - use tierset_update_tiers for that.",
259
+ description: "Update tier set metadata (name, description, active status, downgrade settings). " +
260
+ "Automatically preserves existing conditions (API requires them in update requests). " +
261
+ "Does not modify tiers - use tierset_update_tiers for that.",
226
262
  readOnly: false,
227
263
  inputSchema: TierSetUpdateInputSchema,
228
264
  handler: tiersetUpdate,
@@ -1,12 +1,5 @@
1
- import { z } from "zod";
2
- import { WalletType } from "../types/schemas/wallet-type.js";
3
- export declare const WalletTypeListInputSchema: {
4
- storeCode: z.ZodOptional<z.ZodString>;
5
- };
6
- export declare const WalletTypeGetInputSchema: {
7
- storeCode: z.ZodOptional<z.ZodString>;
8
- walletTypeId: z.ZodString;
9
- };
1
+ import { WalletType, WalletTypeListInputSchema, WalletTypeGetInputSchema, WalletTypeCreateInputSchema, WalletTypeUpdateInputSchema } from "../types/schemas/wallet-type.js";
2
+ export { WalletTypeListInputSchema, WalletTypeGetInputSchema, WalletTypeCreateInputSchema, WalletTypeUpdateInputSchema, };
10
3
  export declare function walletTypeList(input: {
11
4
  storeCode?: string;
12
5
  }): Promise<WalletType[]>;
@@ -14,23 +7,235 @@ export declare function walletTypeGet(input: {
14
7
  storeCode?: string;
15
8
  walletTypeId: string;
16
9
  }): Promise<WalletType>;
10
+ export declare function walletTypeCreate(input: {
11
+ storeCode?: string;
12
+ translations: {
13
+ en: {
14
+ name: string;
15
+ description?: string;
16
+ };
17
+ };
18
+ unitSingularName: string;
19
+ unitPluralName: string;
20
+ unitDaysExpiryAfter: string;
21
+ code?: string;
22
+ allowNegativeBalance?: boolean;
23
+ unitExpiryDate?: string;
24
+ unitDaysActiveCount?: number;
25
+ unitYearsActiveCount?: number;
26
+ unitDaysLocked?: number;
27
+ allTimeNotLocked?: boolean;
28
+ }): Promise<{
29
+ walletTypeId: string;
30
+ name: string;
31
+ code?: string;
32
+ }>;
33
+ export declare function walletTypeUpdate(input: {
34
+ storeCode?: string;
35
+ walletTypeId: string;
36
+ name?: string;
37
+ description?: string;
38
+ unitSingularName?: string;
39
+ unitPluralName?: string;
40
+ active?: boolean;
41
+ allowNegativeBalance?: boolean;
42
+ limits?: {
43
+ points?: {
44
+ interval?: {
45
+ type: string;
46
+ value: number;
47
+ };
48
+ value: number;
49
+ };
50
+ pointsPerMember?: {
51
+ interval?: {
52
+ type: string;
53
+ value: number;
54
+ };
55
+ value: number;
56
+ };
57
+ };
58
+ unitExpiryDate?: string;
59
+ unitDaysExpiryAfter?: string;
60
+ unitDaysActiveCount?: number;
61
+ unitYearsActiveCount?: number;
62
+ unitDaysLocked?: number;
63
+ allTimeNotLocked?: boolean;
64
+ }): Promise<void>;
17
65
  export declare const walletTypeToolDefinitions: readonly [{
18
66
  readonly name: "ol_wallet_type_list";
19
67
  readonly title: "List Point Currencies";
20
- readonly description: "List all available wallet types (point currencies). Use this to find the walletType CODE (e.g., 'default') for tier conditions. Returns walletTypeId, code, and name for each wallet type.";
68
+ readonly description: string;
21
69
  readonly readOnly: true;
22
70
  readonly inputSchema: {
23
- storeCode: z.ZodOptional<z.ZodString>;
71
+ storeCode: import("zod").ZodOptional<import("zod").ZodString>;
24
72
  };
25
73
  readonly handler: typeof walletTypeList;
26
74
  }, {
27
75
  readonly name: "ol_wallet_type_get";
28
76
  readonly title: "Get Point Currency Details";
29
- readonly description: "Get details for a specific wallet type by ID. Returns the full wallet type configuration including currency names.";
77
+ readonly description: string;
30
78
  readonly readOnly: true;
31
79
  readonly inputSchema: {
32
- storeCode: z.ZodOptional<z.ZodString>;
33
- walletTypeId: z.ZodString;
80
+ storeCode: import("zod").ZodOptional<import("zod").ZodString>;
81
+ walletTypeId: import("zod").ZodString;
34
82
  };
35
83
  readonly handler: typeof walletTypeGet;
84
+ }, {
85
+ readonly name: "ol_wallet_type_create";
86
+ readonly title: "Create Point Currency";
87
+ readonly description: string;
88
+ readonly readOnly: false;
89
+ readonly inputSchema: {
90
+ storeCode: import("zod").ZodOptional<import("zod").ZodString>;
91
+ translations: import("zod").ZodObject<{
92
+ en: import("zod").ZodObject<{
93
+ name: import("zod").ZodString;
94
+ description: import("zod").ZodOptional<import("zod").ZodString>;
95
+ }, "strip", import("zod").ZodTypeAny, {
96
+ name: string;
97
+ description?: string | undefined;
98
+ }, {
99
+ name: string;
100
+ description?: string | undefined;
101
+ }>;
102
+ }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
103
+ en: import("zod").ZodObject<{
104
+ name: import("zod").ZodString;
105
+ description: import("zod").ZodOptional<import("zod").ZodString>;
106
+ }, "strip", import("zod").ZodTypeAny, {
107
+ name: string;
108
+ description?: string | undefined;
109
+ }, {
110
+ name: string;
111
+ description?: string | undefined;
112
+ }>;
113
+ }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
114
+ en: import("zod").ZodObject<{
115
+ name: import("zod").ZodString;
116
+ description: import("zod").ZodOptional<import("zod").ZodString>;
117
+ }, "strip", import("zod").ZodTypeAny, {
118
+ name: string;
119
+ description?: string | undefined;
120
+ }, {
121
+ name: string;
122
+ description?: string | undefined;
123
+ }>;
124
+ }, import("zod").ZodTypeAny, "passthrough">>;
125
+ unitSingularName: import("zod").ZodString;
126
+ unitPluralName: import("zod").ZodString;
127
+ unitDaysExpiryAfter: import("zod").ZodString;
128
+ code: import("zod").ZodOptional<import("zod").ZodString>;
129
+ allowNegativeBalance: import("zod").ZodOptional<import("zod").ZodBoolean>;
130
+ unitExpiryDate: import("zod").ZodOptional<import("zod").ZodString>;
131
+ unitDaysActiveCount: import("zod").ZodOptional<import("zod").ZodNumber>;
132
+ unitYearsActiveCount: import("zod").ZodOptional<import("zod").ZodNumber>;
133
+ unitDaysLocked: import("zod").ZodOptional<import("zod").ZodNumber>;
134
+ allTimeNotLocked: import("zod").ZodOptional<import("zod").ZodBoolean>;
135
+ };
136
+ readonly handler: typeof walletTypeCreate;
137
+ }, {
138
+ readonly name: "ol_wallet_type_update";
139
+ readonly title: "Update Point Currency";
140
+ readonly description: string;
141
+ readonly readOnly: false;
142
+ readonly inputSchema: {
143
+ storeCode: import("zod").ZodOptional<import("zod").ZodString>;
144
+ walletTypeId: import("zod").ZodString;
145
+ name: import("zod").ZodOptional<import("zod").ZodString>;
146
+ description: import("zod").ZodOptional<import("zod").ZodString>;
147
+ unitSingularName: import("zod").ZodOptional<import("zod").ZodString>;
148
+ unitPluralName: import("zod").ZodOptional<import("zod").ZodString>;
149
+ active: import("zod").ZodOptional<import("zod").ZodBoolean>;
150
+ allowNegativeBalance: import("zod").ZodOptional<import("zod").ZodBoolean>;
151
+ limits: import("zod").ZodOptional<import("zod").ZodObject<{
152
+ points: import("zod").ZodOptional<import("zod").ZodObject<{
153
+ interval: import("zod").ZodOptional<import("zod").ZodObject<{
154
+ type: import("zod").ZodEnum<["calendarHours", "calendarDays", "calendarWeeks", "calendarMonths", "calendarYears"]>;
155
+ value: import("zod").ZodNumber;
156
+ }, "strip", import("zod").ZodTypeAny, {
157
+ value: number;
158
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
159
+ }, {
160
+ value: number;
161
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
162
+ }>>;
163
+ value: import("zod").ZodNumber;
164
+ }, "strip", import("zod").ZodTypeAny, {
165
+ value: number;
166
+ interval?: {
167
+ value: number;
168
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
169
+ } | undefined;
170
+ }, {
171
+ value: number;
172
+ interval?: {
173
+ value: number;
174
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
175
+ } | undefined;
176
+ }>>;
177
+ pointsPerMember: import("zod").ZodOptional<import("zod").ZodObject<{
178
+ interval: import("zod").ZodOptional<import("zod").ZodObject<{
179
+ type: import("zod").ZodEnum<["calendarHours", "calendarDays", "calendarWeeks", "calendarMonths", "calendarYears"]>;
180
+ value: import("zod").ZodNumber;
181
+ }, "strip", import("zod").ZodTypeAny, {
182
+ value: number;
183
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
184
+ }, {
185
+ value: number;
186
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
187
+ }>>;
188
+ value: import("zod").ZodNumber;
189
+ }, "strip", import("zod").ZodTypeAny, {
190
+ value: number;
191
+ interval?: {
192
+ value: number;
193
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
194
+ } | undefined;
195
+ }, {
196
+ value: number;
197
+ interval?: {
198
+ value: number;
199
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
200
+ } | undefined;
201
+ }>>;
202
+ }, "strip", import("zod").ZodTypeAny, {
203
+ points?: {
204
+ value: number;
205
+ interval?: {
206
+ value: number;
207
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
208
+ } | undefined;
209
+ } | undefined;
210
+ pointsPerMember?: {
211
+ value: number;
212
+ interval?: {
213
+ value: number;
214
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
215
+ } | undefined;
216
+ } | undefined;
217
+ }, {
218
+ points?: {
219
+ value: number;
220
+ interval?: {
221
+ value: number;
222
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
223
+ } | undefined;
224
+ } | undefined;
225
+ pointsPerMember?: {
226
+ value: number;
227
+ interval?: {
228
+ value: number;
229
+ type: "calendarHours" | "calendarDays" | "calendarWeeks" | "calendarMonths" | "calendarYears";
230
+ } | undefined;
231
+ } | undefined;
232
+ }>>;
233
+ unitExpiryDate: import("zod").ZodOptional<import("zod").ZodString>;
234
+ unitDaysExpiryAfter: import("zod").ZodOptional<import("zod").ZodString>;
235
+ unitDaysActiveCount: import("zod").ZodOptional<import("zod").ZodNumber>;
236
+ unitYearsActiveCount: import("zod").ZodOptional<import("zod").ZodNumber>;
237
+ unitDaysLocked: import("zod").ZodOptional<import("zod").ZodNumber>;
238
+ allTimeNotLocked: import("zod").ZodOptional<import("zod").ZodBoolean>;
239
+ };
240
+ readonly handler: typeof walletTypeUpdate;
36
241
  }];