@bates-solutions/squareup 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +154 -0
- package/README.md.backup +292 -0
- package/dist/angular/__tests__/setup.d.ts +1 -0
- package/dist/angular/__tests__/setup.d.ts.map +1 -0
- package/dist/angular/__tests__/setup.js +5 -0
- package/dist/angular/__tests__/setup.js.map +1 -0
- package/dist/angular/components/index.d.ts +2 -0
- package/dist/angular/components/index.d.ts.map +1 -0
- package/dist/angular/components/index.js +2 -0
- package/dist/angular/components/index.js.map +1 -0
- package/dist/angular/components/payment-button.component.d.ts +49 -0
- package/dist/angular/components/payment-button.component.d.ts.map +1 -0
- package/dist/angular/components/payment-button.component.js +176 -0
- package/dist/angular/components/payment-button.component.js.map +1 -0
- package/dist/angular/directives/index.d.ts +2 -0
- package/dist/angular/directives/index.d.ts.map +1 -0
- package/dist/angular/directives/index.js +2 -0
- package/dist/angular/directives/index.js.map +1 -0
- package/dist/angular/directives/square-card.directive.d.ts +52 -0
- package/dist/angular/directives/square-card.directive.d.ts.map +1 -0
- package/dist/angular/directives/square-card.directive.js +98 -0
- package/dist/angular/directives/square-card.directive.js.map +1 -0
- package/dist/angular/index.d.ts +42 -0
- package/dist/angular/index.d.ts.map +1 -0
- package/dist/angular/index.js +45 -0
- package/dist/angular/index.js.map +1 -0
- package/dist/angular/services/index.d.ts +6 -0
- package/dist/angular/services/index.d.ts.map +1 -0
- package/dist/angular/services/index.js +6 -0
- package/dist/angular/services/index.js.map +1 -0
- package/dist/angular/services/square-catalog.service.d.ts +60 -0
- package/dist/angular/services/square-catalog.service.d.ts.map +1 -0
- package/dist/angular/services/square-catalog.service.js +152 -0
- package/dist/angular/services/square-catalog.service.js.map +1 -0
- package/dist/angular/services/square-customers.service.d.ts +77 -0
- package/dist/angular/services/square-customers.service.d.ts.map +1 -0
- package/dist/angular/services/square-customers.service.js +187 -0
- package/dist/angular/services/square-customers.service.js.map +1 -0
- package/dist/angular/services/square-orders.service.d.ts +66 -0
- package/dist/angular/services/square-orders.service.d.ts.map +1 -0
- package/dist/angular/services/square-orders.service.js +170 -0
- package/dist/angular/services/square-orders.service.js.map +1 -0
- package/dist/angular/services/square-payments.service.d.ts +73 -0
- package/dist/angular/services/square-payments.service.d.ts.map +1 -0
- package/dist/angular/services/square-payments.service.js +167 -0
- package/dist/angular/services/square-payments.service.js.map +1 -0
- package/dist/angular/services/square-sdk.service.d.ts +45 -0
- package/dist/angular/services/square-sdk.service.d.ts.map +1 -0
- package/dist/angular/services/square-sdk.service.js +133 -0
- package/dist/angular/services/square-sdk.service.js.map +1 -0
- package/dist/angular/square.module.d.ts +36 -0
- package/dist/angular/square.module.d.ts.map +1 -0
- package/dist/angular/square.module.js +75 -0
- package/dist/angular/square.module.js.map +1 -0
- package/dist/angular/types.d.ts +189 -0
- package/dist/angular/types.d.ts.map +1 -0
- package/dist/angular/types.js +8 -0
- package/dist/angular/types.js.map +1 -0
- package/dist/core/builders/order.builder.d.ts +140 -0
- package/dist/core/builders/order.builder.d.ts.map +1 -0
- package/dist/core/builders/order.builder.js +185 -0
- package/dist/core/builders/order.builder.js.map +1 -0
- package/dist/core/client.d.ts +93 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +99 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/errors.d.ts +55 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +118 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/services/catalog.service.d.ts +218 -0
- package/dist/core/services/catalog.service.d.ts.map +1 -0
- package/dist/core/services/catalog.service.js +274 -0
- package/dist/core/services/catalog.service.js.map +1 -0
- package/dist/core/services/customers.service.d.ts +197 -0
- package/dist/core/services/customers.service.d.ts.map +1 -0
- package/dist/core/services/customers.service.js +246 -0
- package/dist/core/services/customers.service.js.map +1 -0
- package/dist/core/services/inventory.service.d.ts +196 -0
- package/dist/core/services/inventory.service.d.ts.map +1 -0
- package/dist/core/services/inventory.service.js +266 -0
- package/dist/core/services/inventory.service.js.map +1 -0
- package/dist/core/services/invoices.service.d.ts +211 -0
- package/dist/core/services/invoices.service.d.ts.map +1 -0
- package/dist/core/services/invoices.service.js +297 -0
- package/dist/core/services/invoices.service.js.map +1 -0
- package/dist/core/services/loyalty.service.d.ts +282 -0
- package/dist/core/services/loyalty.service.d.ts.map +1 -0
- package/dist/core/services/loyalty.service.js +340 -0
- package/dist/core/services/loyalty.service.js.map +1 -0
- package/dist/core/services/orders.service.d.ts +121 -0
- package/dist/core/services/orders.service.d.ts.map +1 -0
- package/dist/core/services/orders.service.js +208 -0
- package/dist/core/services/orders.service.js.map +1 -0
- package/dist/core/services/payments.service.d.ts +121 -0
- package/dist/core/services/payments.service.d.ts.map +1 -0
- package/dist/core/services/payments.service.js +189 -0
- package/dist/core/services/payments.service.js.map +1 -0
- package/dist/core/services/subscriptions.service.d.ts +205 -0
- package/dist/core/services/subscriptions.service.d.ts.map +1 -0
- package/dist/core/services/subscriptions.service.js +265 -0
- package/dist/core/services/subscriptions.service.js.map +1 -0
- package/dist/core/types/index.d.ts +68 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +2 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/utils.d.ts +74 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +96 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/react/SquareProvider.d.ts +50 -0
- package/dist/react/SquareProvider.d.ts.map +1 -0
- package/dist/react/SquareProvider.js +134 -0
- package/dist/react/SquareProvider.js.map +1 -0
- package/dist/react/__tests__/CardInput.test.d.ts +2 -0
- package/dist/react/__tests__/CardInput.test.d.ts.map +1 -0
- package/dist/react/__tests__/CardInput.test.js +218 -0
- package/dist/react/__tests__/CardInput.test.js.map +1 -0
- package/dist/react/__tests__/PaymentButton.test.d.ts +2 -0
- package/dist/react/__tests__/PaymentButton.test.d.ts.map +1 -0
- package/dist/react/__tests__/PaymentButton.test.js +400 -0
- package/dist/react/__tests__/PaymentButton.test.js.map +1 -0
- package/dist/react/__tests__/SquareProvider.test.d.ts +2 -0
- package/dist/react/__tests__/SquareProvider.test.d.ts.map +1 -0
- package/dist/react/__tests__/SquareProvider.test.js +126 -0
- package/dist/react/__tests__/SquareProvider.test.js.map +1 -0
- package/dist/react/__tests__/setup.d.ts +2 -0
- package/dist/react/__tests__/setup.d.ts.map +1 -0
- package/dist/react/__tests__/setup.js +3 -0
- package/dist/react/__tests__/setup.js.map +1 -0
- package/dist/react/__tests__/useCatalog.test.d.ts +2 -0
- package/dist/react/__tests__/useCatalog.test.d.ts.map +1 -0
- package/dist/react/__tests__/useCatalog.test.js +277 -0
- package/dist/react/__tests__/useCatalog.test.js.map +1 -0
- package/dist/react/__tests__/useCustomers.test.d.ts +2 -0
- package/dist/react/__tests__/useCustomers.test.d.ts.map +1 -0
- package/dist/react/__tests__/useCustomers.test.js +312 -0
- package/dist/react/__tests__/useCustomers.test.js.map +1 -0
- package/dist/react/__tests__/useOrders.test.d.ts +2 -0
- package/dist/react/__tests__/useOrders.test.d.ts.map +1 -0
- package/dist/react/__tests__/useOrders.test.js +216 -0
- package/dist/react/__tests__/useOrders.test.js.map +1 -0
- package/dist/react/__tests__/usePayments.test.d.ts +2 -0
- package/dist/react/__tests__/usePayments.test.d.ts.map +1 -0
- package/dist/react/__tests__/usePayments.test.js +235 -0
- package/dist/react/__tests__/usePayments.test.js.map +1 -0
- package/dist/react/__tests__/useSquarePayment.test.d.ts +2 -0
- package/dist/react/__tests__/useSquarePayment.test.d.ts.map +1 -0
- package/dist/react/__tests__/useSquarePayment.test.js +447 -0
- package/dist/react/__tests__/useSquarePayment.test.js.map +1 -0
- package/dist/react/components/CardInput.d.ts +69 -0
- package/dist/react/components/CardInput.d.ts.map +1 -0
- package/dist/react/components/CardInput.js +58 -0
- package/dist/react/components/CardInput.js.map +1 -0
- package/dist/react/components/PaymentButton.d.ts +71 -0
- package/dist/react/components/PaymentButton.d.ts.map +1 -0
- package/dist/react/components/PaymentButton.js +140 -0
- package/dist/react/components/PaymentButton.js.map +1 -0
- package/dist/react/components/index.d.ts +5 -0
- package/dist/react/components/index.d.ts.map +1 -0
- package/dist/react/components/index.js +3 -0
- package/dist/react/components/index.js.map +1 -0
- package/dist/react/hooks/index.d.ts +11 -0
- package/dist/react/hooks/index.d.ts.map +1 -0
- package/dist/react/hooks/index.js +6 -0
- package/dist/react/hooks/index.js.map +1 -0
- package/dist/react/hooks/useCatalog.d.ts +98 -0
- package/dist/react/hooks/useCatalog.d.ts.map +1 -0
- package/dist/react/hooks/useCatalog.js +134 -0
- package/dist/react/hooks/useCatalog.js.map +1 -0
- package/dist/react/hooks/useCustomers.d.ts +105 -0
- package/dist/react/hooks/useCustomers.d.ts.map +1 -0
- package/dist/react/hooks/useCustomers.js +174 -0
- package/dist/react/hooks/useCustomers.js.map +1 -0
- package/dist/react/hooks/useOrders.d.ts +112 -0
- package/dist/react/hooks/useOrders.d.ts.map +1 -0
- package/dist/react/hooks/useOrders.js +115 -0
- package/dist/react/hooks/useOrders.js.map +1 -0
- package/dist/react/hooks/usePayments.d.ts +98 -0
- package/dist/react/hooks/usePayments.d.ts.map +1 -0
- package/dist/react/hooks/usePayments.js +89 -0
- package/dist/react/hooks/usePayments.js.map +1 -0
- package/dist/react/hooks/useSquarePayment.d.ts +52 -0
- package/dist/react/hooks/useSquarePayment.d.ts.map +1 -0
- package/dist/react/hooks/useSquarePayment.js +146 -0
- package/dist/react/hooks/useSquarePayment.js.map +1 -0
- package/dist/react/index.d.ts +8 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +7 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/types.d.ts +183 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react/types.js +2 -0
- package/dist/react/types.js.map +1 -0
- package/dist/server/index.d.ts +43 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +45 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middleware/express.d.ts +77 -0
- package/dist/server/middleware/express.d.ts.map +1 -0
- package/dist/server/middleware/express.js +123 -0
- package/dist/server/middleware/express.js.map +1 -0
- package/dist/server/middleware/nextjs.d.ts +118 -0
- package/dist/server/middleware/nextjs.d.ts.map +1 -0
- package/dist/server/middleware/nextjs.js +172 -0
- package/dist/server/middleware/nextjs.js.map +1 -0
- package/dist/server/types.d.ts +89 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +7 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/webhook.d.ts +114 -0
- package/dist/server/webhook.d.ts.map +1 -0
- package/dist/server/webhook.js +190 -0
- package/dist/server/webhook.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { parseSquareError, SquareValidationError } from '../errors.js';
|
|
2
|
+
import { createIdempotencyKey } from '../utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Loyalty service for managing Square loyalty programs
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // Create a loyalty account
|
|
9
|
+
* const account = await square.loyalty.createAccount({
|
|
10
|
+
* programId: 'PROG_123',
|
|
11
|
+
* phoneNumber: '+15551234567',
|
|
12
|
+
* });
|
|
13
|
+
*
|
|
14
|
+
* // Add points
|
|
15
|
+
* await square.loyalty.accumulatePoints(account.id, {
|
|
16
|
+
* points: 100,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // Redeem a reward
|
|
20
|
+
* await square.loyalty.redeemReward(account.id, 'REWARD_123');
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export class LoyaltyService {
|
|
24
|
+
client;
|
|
25
|
+
defaultLocationId;
|
|
26
|
+
constructor(client, defaultLocationId) {
|
|
27
|
+
this.client = client;
|
|
28
|
+
this.defaultLocationId = defaultLocationId;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the loyalty program for the current location
|
|
32
|
+
*
|
|
33
|
+
* @param programId - Optional program ID (uses main program if not provided)
|
|
34
|
+
* @returns Loyalty program details
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const program = await square.loyalty.getProgram();
|
|
39
|
+
* console.log(`Points name: ${program.terminology?.other}`);
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
async getProgram(programId) {
|
|
43
|
+
try {
|
|
44
|
+
if (programId) {
|
|
45
|
+
const response = await this.client.loyalty.programs.get({ programId });
|
|
46
|
+
if (!response.program) {
|
|
47
|
+
throw new Error('Loyalty program not found');
|
|
48
|
+
}
|
|
49
|
+
return response.program;
|
|
50
|
+
}
|
|
51
|
+
// Get the main program
|
|
52
|
+
const response = await this.client.loyalty.programs.list();
|
|
53
|
+
const programs = response.programs ?? [];
|
|
54
|
+
if (programs.length === 0) {
|
|
55
|
+
throw new Error('No loyalty program found');
|
|
56
|
+
}
|
|
57
|
+
return programs[0];
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
throw parseSquareError(error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a new loyalty account
|
|
65
|
+
*
|
|
66
|
+
* @param options - Account creation options
|
|
67
|
+
* @returns Created loyalty account
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const account = await square.loyalty.createAccount({
|
|
72
|
+
* programId: 'PROG_123',
|
|
73
|
+
* phoneNumber: '+15551234567',
|
|
74
|
+
* });
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
async createAccount(options) {
|
|
78
|
+
if (!options.programId) {
|
|
79
|
+
throw new SquareValidationError('programId is required', 'programId');
|
|
80
|
+
}
|
|
81
|
+
if (!options.phoneNumber && !options.customerId) {
|
|
82
|
+
throw new SquareValidationError('Either phoneNumber or customerId is required', 'phoneNumber');
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const response = await this.client.loyalty.accounts.create({
|
|
86
|
+
loyaltyAccount: {
|
|
87
|
+
programId: options.programId,
|
|
88
|
+
mapping: options.phoneNumber
|
|
89
|
+
? {
|
|
90
|
+
phoneNumber: options.phoneNumber,
|
|
91
|
+
}
|
|
92
|
+
: undefined,
|
|
93
|
+
customerId: options.customerId,
|
|
94
|
+
},
|
|
95
|
+
idempotencyKey: options.idempotencyKey ?? createIdempotencyKey(),
|
|
96
|
+
});
|
|
97
|
+
if (!response.loyaltyAccount) {
|
|
98
|
+
throw new Error('Loyalty account was not created');
|
|
99
|
+
}
|
|
100
|
+
return response.loyaltyAccount;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
throw parseSquareError(error);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get a loyalty account by ID
|
|
108
|
+
*
|
|
109
|
+
* @param accountId - Loyalty account ID
|
|
110
|
+
* @returns Loyalty account details
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* const account = await square.loyalty.getAccount('ACCT_123');
|
|
115
|
+
* console.log(`Balance: ${account.balance} points`);
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
async getAccount(accountId) {
|
|
119
|
+
try {
|
|
120
|
+
const response = await this.client.loyalty.accounts.get({ accountId });
|
|
121
|
+
if (!response.loyaltyAccount) {
|
|
122
|
+
throw new Error('Loyalty account not found');
|
|
123
|
+
}
|
|
124
|
+
return response.loyaltyAccount;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
throw parseSquareError(error);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Search for loyalty accounts
|
|
132
|
+
*
|
|
133
|
+
* @param options - Search options
|
|
134
|
+
* @returns Matching loyalty accounts
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* // Find by phone number
|
|
139
|
+
* const accounts = await square.loyalty.searchAccounts({
|
|
140
|
+
* phoneNumber: '+15551234567',
|
|
141
|
+
* });
|
|
142
|
+
*
|
|
143
|
+
* // Find by customer ID
|
|
144
|
+
* const accounts = await square.loyalty.searchAccounts({
|
|
145
|
+
* customerId: 'CUST_123',
|
|
146
|
+
* });
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
async searchAccounts(options) {
|
|
150
|
+
try {
|
|
151
|
+
const mappings = [];
|
|
152
|
+
const customerIds = [];
|
|
153
|
+
if (options?.phoneNumber) {
|
|
154
|
+
mappings.push({ phoneNumber: options.phoneNumber });
|
|
155
|
+
}
|
|
156
|
+
if (options?.customerId) {
|
|
157
|
+
customerIds.push(options.customerId);
|
|
158
|
+
}
|
|
159
|
+
const response = await this.client.loyalty.accounts.search({
|
|
160
|
+
cursor: options?.cursor,
|
|
161
|
+
limit: options?.limit,
|
|
162
|
+
query: mappings.length > 0 || customerIds.length > 0
|
|
163
|
+
? {
|
|
164
|
+
mappings: mappings.length > 0 ? mappings : undefined,
|
|
165
|
+
customerIds: customerIds.length > 0 ? customerIds : undefined,
|
|
166
|
+
}
|
|
167
|
+
: undefined,
|
|
168
|
+
});
|
|
169
|
+
return {
|
|
170
|
+
data: (response.loyaltyAccounts ?? []),
|
|
171
|
+
cursor: response.cursor,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
throw parseSquareError(error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Accumulate (add) points to a loyalty account
|
|
180
|
+
*
|
|
181
|
+
* @param accountId - Loyalty account ID
|
|
182
|
+
* @param options - Accumulation options
|
|
183
|
+
* @returns Loyalty event
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* // Add points from an order
|
|
188
|
+
* await square.loyalty.accumulatePoints('ACCT_123', {
|
|
189
|
+
* orderId: 'ORDER_456',
|
|
190
|
+
* });
|
|
191
|
+
*
|
|
192
|
+
* // Add points manually
|
|
193
|
+
* await square.loyalty.accumulatePoints('ACCT_123', {
|
|
194
|
+
* points: 50,
|
|
195
|
+
* });
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
async accumulatePoints(accountId, options) {
|
|
199
|
+
const locationId = this.defaultLocationId;
|
|
200
|
+
if (!locationId) {
|
|
201
|
+
throw new SquareValidationError('locationId is required. Set it in client config.', 'locationId');
|
|
202
|
+
}
|
|
203
|
+
if (!options.orderId && !options.points) {
|
|
204
|
+
throw new SquareValidationError('Either orderId or points is required');
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
const response = await this.client.loyalty.accounts.accumulatePoints({
|
|
208
|
+
accountId,
|
|
209
|
+
accumulatePoints: {
|
|
210
|
+
orderId: options.orderId,
|
|
211
|
+
points: options.points,
|
|
212
|
+
},
|
|
213
|
+
locationId,
|
|
214
|
+
idempotencyKey: options.idempotencyKey ?? createIdempotencyKey(),
|
|
215
|
+
});
|
|
216
|
+
if (!response.event) {
|
|
217
|
+
throw new Error('Points accumulation failed');
|
|
218
|
+
}
|
|
219
|
+
return response.event;
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
throw parseSquareError(error);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Adjust points on a loyalty account (add or subtract)
|
|
227
|
+
*
|
|
228
|
+
* @param accountId - Loyalty account ID
|
|
229
|
+
* @param points - Points to add (positive) or subtract (negative)
|
|
230
|
+
* @param reason - Reason for adjustment
|
|
231
|
+
* @returns Loyalty event
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```typescript
|
|
235
|
+
* // Add bonus points
|
|
236
|
+
* await square.loyalty.adjustPoints('ACCT_123', 100, 'Birthday bonus');
|
|
237
|
+
*
|
|
238
|
+
* // Remove points
|
|
239
|
+
* await square.loyalty.adjustPoints('ACCT_123', -50, 'Points correction');
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
async adjustPoints(accountId, points, reason, idempotencyKey) {
|
|
243
|
+
try {
|
|
244
|
+
const response = await this.client.loyalty.accounts.adjust({
|
|
245
|
+
accountId,
|
|
246
|
+
adjustPoints: {
|
|
247
|
+
points,
|
|
248
|
+
reason,
|
|
249
|
+
},
|
|
250
|
+
idempotencyKey: idempotencyKey ?? createIdempotencyKey(),
|
|
251
|
+
});
|
|
252
|
+
if (!response.event) {
|
|
253
|
+
throw new Error('Points adjustment failed');
|
|
254
|
+
}
|
|
255
|
+
return response.event;
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
throw parseSquareError(error);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Redeem a reward
|
|
263
|
+
*
|
|
264
|
+
* @param accountId - Loyalty account ID
|
|
265
|
+
* @param rewardTierId - Reward tier ID to redeem
|
|
266
|
+
* @param orderId - Optional order ID to apply reward to
|
|
267
|
+
* @returns Created reward
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```typescript
|
|
271
|
+
* const reward = await square.loyalty.redeemReward(
|
|
272
|
+
* 'ACCT_123',
|
|
273
|
+
* 'TIER_123',
|
|
274
|
+
* 'ORDER_456'
|
|
275
|
+
* );
|
|
276
|
+
* ```
|
|
277
|
+
*/
|
|
278
|
+
async redeemReward(accountId, rewardTierId, orderId, idempotencyKey) {
|
|
279
|
+
const locationId = this.defaultLocationId;
|
|
280
|
+
if (!locationId) {
|
|
281
|
+
throw new SquareValidationError('locationId is required. Set it in client config.', 'locationId');
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
const response = await this.client.loyalty.rewards.create({
|
|
285
|
+
reward: {
|
|
286
|
+
loyaltyAccountId: accountId,
|
|
287
|
+
rewardTierId,
|
|
288
|
+
orderId,
|
|
289
|
+
},
|
|
290
|
+
idempotencyKey: idempotencyKey ?? createIdempotencyKey(),
|
|
291
|
+
});
|
|
292
|
+
if (!response.reward?.id) {
|
|
293
|
+
throw new Error('Reward creation failed');
|
|
294
|
+
}
|
|
295
|
+
const rewardId = response.reward.id;
|
|
296
|
+
// Redeem the reward
|
|
297
|
+
const redeemResponse = await this.client.loyalty.rewards.redeem({
|
|
298
|
+
rewardId,
|
|
299
|
+
locationId,
|
|
300
|
+
idempotencyKey: createIdempotencyKey(),
|
|
301
|
+
});
|
|
302
|
+
if (!redeemResponse.event) {
|
|
303
|
+
throw new Error('Reward redemption failed');
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
id: rewardId,
|
|
307
|
+
status: 'REDEEMED',
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
throw parseSquareError(error);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Calculate points that would be earned for an order
|
|
316
|
+
*
|
|
317
|
+
* @param programId - Loyalty program ID
|
|
318
|
+
* @param orderId - Order ID to calculate points for
|
|
319
|
+
* @returns Points that would be earned
|
|
320
|
+
*
|
|
321
|
+
* @example
|
|
322
|
+
* ```typescript
|
|
323
|
+
* const points = await square.loyalty.calculatePoints('PROG_123', 'ORDER_123');
|
|
324
|
+
* console.log(`This order earns ${points} points`);
|
|
325
|
+
* ```
|
|
326
|
+
*/
|
|
327
|
+
async calculatePoints(programId, orderId) {
|
|
328
|
+
try {
|
|
329
|
+
const response = await this.client.loyalty.programs.calculate({
|
|
330
|
+
programId,
|
|
331
|
+
orderId,
|
|
332
|
+
});
|
|
333
|
+
return response.points ?? 0;
|
|
334
|
+
}
|
|
335
|
+
catch (error) {
|
|
336
|
+
throw parseSquareError(error);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=loyalty.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loyalty.service.js","sourceRoot":"","sources":["../../../src/core/services/loyalty.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { SquareClient } from 'square';
|
|
2
|
+
import type { CreateOrderOptions } from '../types/index.js';
|
|
3
|
+
import { OrderBuilder, type Order } from '../builders/order.builder.js';
|
|
4
|
+
/**
|
|
5
|
+
* Orders service for managing Square orders
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Using the builder (recommended)
|
|
10
|
+
* const order = await square.orders
|
|
11
|
+
* .builder()
|
|
12
|
+
* .addItem({ name: 'Latte', amount: 450 })
|
|
13
|
+
* .withCustomer('CUST_123')
|
|
14
|
+
* .build();
|
|
15
|
+
*
|
|
16
|
+
* // Or create directly
|
|
17
|
+
* const order = await square.orders.create({
|
|
18
|
+
* lineItems: [{ name: 'Latte', amount: 450 }],
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class OrdersService {
|
|
23
|
+
private readonly client;
|
|
24
|
+
private readonly defaultLocationId?;
|
|
25
|
+
constructor(client: SquareClient, defaultLocationId?: string | undefined);
|
|
26
|
+
/**
|
|
27
|
+
* Create a new order builder
|
|
28
|
+
*
|
|
29
|
+
* @param locationId - Optional location ID (uses default if not provided)
|
|
30
|
+
* @returns Order builder instance
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const order = await square.orders
|
|
35
|
+
* .builder()
|
|
36
|
+
* .addItem({ name: 'Coffee', amount: 350 })
|
|
37
|
+
* .addItem({ name: 'Muffin', amount: 250 })
|
|
38
|
+
* .withTip(100)
|
|
39
|
+
* .build();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
builder(locationId?: string): OrderBuilder;
|
|
43
|
+
/**
|
|
44
|
+
* Create an order directly (without builder)
|
|
45
|
+
*
|
|
46
|
+
* @param options - Order creation options
|
|
47
|
+
* @param locationId - Optional location ID
|
|
48
|
+
* @returns Created order
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const order = await square.orders.create({
|
|
53
|
+
* lineItems: [
|
|
54
|
+
* { name: 'Coffee', amount: 350 },
|
|
55
|
+
* { catalogObjectId: 'ITEM_123', quantity: 2 },
|
|
56
|
+
* ],
|
|
57
|
+
* customerId: 'CUST_123',
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
create(options: CreateOrderOptions, locationId?: string): Promise<Order>;
|
|
62
|
+
/**
|
|
63
|
+
* Get an order by ID
|
|
64
|
+
*
|
|
65
|
+
* @param orderId - Order ID
|
|
66
|
+
* @returns Order details
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const order = await square.orders.get('ORDER_123');
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
get(orderId: string): Promise<Order>;
|
|
74
|
+
/**
|
|
75
|
+
* Update an order
|
|
76
|
+
*
|
|
77
|
+
* @param orderId - Order ID to update
|
|
78
|
+
* @param updates - Update fields
|
|
79
|
+
* @returns Updated order
|
|
80
|
+
*/
|
|
81
|
+
update(orderId: string, updates: {
|
|
82
|
+
version: number;
|
|
83
|
+
referenceId?: string;
|
|
84
|
+
}, locationId?: string): Promise<Order>;
|
|
85
|
+
/**
|
|
86
|
+
* Pay for an order
|
|
87
|
+
*
|
|
88
|
+
* @param orderId - Order ID
|
|
89
|
+
* @param paymentIds - Payment IDs to apply
|
|
90
|
+
* @returns Updated order
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const order = await square.orders.pay('ORDER_123', ['PAYMENT_456']);
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
pay(orderId: string, paymentIds: string[]): Promise<Order>;
|
|
98
|
+
/**
|
|
99
|
+
* Search for orders
|
|
100
|
+
*
|
|
101
|
+
* @param options - Search options
|
|
102
|
+
* @returns Paginated list of orders
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* const { data, cursor } = await square.orders.search({
|
|
107
|
+
* locationIds: ['LXXX'],
|
|
108
|
+
* limit: 10,
|
|
109
|
+
* });
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
search(options?: {
|
|
113
|
+
locationIds?: string[];
|
|
114
|
+
cursor?: string;
|
|
115
|
+
limit?: number;
|
|
116
|
+
}): Promise<{
|
|
117
|
+
data: Order[];
|
|
118
|
+
cursor?: string;
|
|
119
|
+
}>;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=orders.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orders.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/orders.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAExE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBADlB,MAAM,EAAE,YAAY,EACpB,iBAAiB,CAAC,EAAE,MAAM,YAAA;IAG7C;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY;IAW1C;;;;;;;;;;;;;;;;;OAiBG;IACG,MAAM,CAAC,OAAO,EAAE,kBAAkB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IA+B9E;;;;;;;;;;OAUG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAc1C;;;;;;OAMG;IACG,MAAM,CACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,EACD,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC;IA8BjB;;;;;;;;;;;OAWG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAkBhE;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE;QACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAsBhD"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { parseSquareError, SquareValidationError } from '../errors.js';
|
|
2
|
+
import { createIdempotencyKey } from '../utils.js';
|
|
3
|
+
import { OrderBuilder } from '../builders/order.builder.js';
|
|
4
|
+
/**
|
|
5
|
+
* Orders service for managing Square orders
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Using the builder (recommended)
|
|
10
|
+
* const order = await square.orders
|
|
11
|
+
* .builder()
|
|
12
|
+
* .addItem({ name: 'Latte', amount: 450 })
|
|
13
|
+
* .withCustomer('CUST_123')
|
|
14
|
+
* .build();
|
|
15
|
+
*
|
|
16
|
+
* // Or create directly
|
|
17
|
+
* const order = await square.orders.create({
|
|
18
|
+
* lineItems: [{ name: 'Latte', amount: 450 }],
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export class OrdersService {
|
|
23
|
+
client;
|
|
24
|
+
defaultLocationId;
|
|
25
|
+
constructor(client, defaultLocationId) {
|
|
26
|
+
this.client = client;
|
|
27
|
+
this.defaultLocationId = defaultLocationId;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a new order builder
|
|
31
|
+
*
|
|
32
|
+
* @param locationId - Optional location ID (uses default if not provided)
|
|
33
|
+
* @returns Order builder instance
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const order = await square.orders
|
|
38
|
+
* .builder()
|
|
39
|
+
* .addItem({ name: 'Coffee', amount: 350 })
|
|
40
|
+
* .addItem({ name: 'Muffin', amount: 250 })
|
|
41
|
+
* .withTip(100)
|
|
42
|
+
* .build();
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
builder(locationId) {
|
|
46
|
+
const location = locationId ?? this.defaultLocationId;
|
|
47
|
+
if (!location) {
|
|
48
|
+
throw new SquareValidationError('locationId is required. Set it in client config or provide it explicitly.', 'locationId');
|
|
49
|
+
}
|
|
50
|
+
return new OrderBuilder(this.client, location);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create an order directly (without builder)
|
|
54
|
+
*
|
|
55
|
+
* @param options - Order creation options
|
|
56
|
+
* @param locationId - Optional location ID
|
|
57
|
+
* @returns Created order
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const order = await square.orders.create({
|
|
62
|
+
* lineItems: [
|
|
63
|
+
* { name: 'Coffee', amount: 350 },
|
|
64
|
+
* { catalogObjectId: 'ITEM_123', quantity: 2 },
|
|
65
|
+
* ],
|
|
66
|
+
* customerId: 'CUST_123',
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
async create(options, locationId) {
|
|
71
|
+
const location = locationId ?? this.defaultLocationId;
|
|
72
|
+
if (!location) {
|
|
73
|
+
throw new SquareValidationError('locationId is required. Set it in client config or provide it explicitly.', 'locationId');
|
|
74
|
+
}
|
|
75
|
+
if (options.lineItems.length === 0) {
|
|
76
|
+
throw new SquareValidationError('Order must have at least one line item', 'lineItems');
|
|
77
|
+
}
|
|
78
|
+
// Use builder internally for consistent validation
|
|
79
|
+
const builder = new OrderBuilder(this.client, location);
|
|
80
|
+
for (const item of options.lineItems) {
|
|
81
|
+
builder.addItem(item);
|
|
82
|
+
}
|
|
83
|
+
if (options.customerId) {
|
|
84
|
+
builder.withCustomer(options.customerId);
|
|
85
|
+
}
|
|
86
|
+
if (options.referenceId) {
|
|
87
|
+
builder.withReference(options.referenceId);
|
|
88
|
+
}
|
|
89
|
+
return builder.build();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get an order by ID
|
|
93
|
+
*
|
|
94
|
+
* @param orderId - Order ID
|
|
95
|
+
* @returns Order details
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const order = await square.orders.get('ORDER_123');
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
async get(orderId) {
|
|
103
|
+
try {
|
|
104
|
+
const response = await this.client.orders.get({ orderId });
|
|
105
|
+
if (!response.order) {
|
|
106
|
+
throw new Error('Order not found');
|
|
107
|
+
}
|
|
108
|
+
return response.order;
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
throw parseSquareError(error);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Update an order
|
|
116
|
+
*
|
|
117
|
+
* @param orderId - Order ID to update
|
|
118
|
+
* @param updates - Update fields
|
|
119
|
+
* @returns Updated order
|
|
120
|
+
*/
|
|
121
|
+
async update(orderId, updates, locationId) {
|
|
122
|
+
const location = locationId ?? this.defaultLocationId;
|
|
123
|
+
if (!location) {
|
|
124
|
+
throw new SquareValidationError('locationId is required. Set it in client config or provide it explicitly.', 'locationId');
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const response = await this.client.orders.update({
|
|
128
|
+
orderId,
|
|
129
|
+
order: {
|
|
130
|
+
locationId: location,
|
|
131
|
+
version: updates.version,
|
|
132
|
+
referenceId: updates.referenceId,
|
|
133
|
+
},
|
|
134
|
+
idempotencyKey: createIdempotencyKey(),
|
|
135
|
+
});
|
|
136
|
+
if (!response.order) {
|
|
137
|
+
throw new Error('Order update failed');
|
|
138
|
+
}
|
|
139
|
+
return response.order;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
throw parseSquareError(error);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Pay for an order
|
|
147
|
+
*
|
|
148
|
+
* @param orderId - Order ID
|
|
149
|
+
* @param paymentIds - Payment IDs to apply
|
|
150
|
+
* @returns Updated order
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* const order = await square.orders.pay('ORDER_123', ['PAYMENT_456']);
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
async pay(orderId, paymentIds) {
|
|
158
|
+
try {
|
|
159
|
+
const response = await this.client.orders.pay({
|
|
160
|
+
orderId,
|
|
161
|
+
idempotencyKey: createIdempotencyKey(),
|
|
162
|
+
paymentIds,
|
|
163
|
+
});
|
|
164
|
+
if (!response.order) {
|
|
165
|
+
throw new Error('Order payment failed');
|
|
166
|
+
}
|
|
167
|
+
return response.order;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
throw parseSquareError(error);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Search for orders
|
|
175
|
+
*
|
|
176
|
+
* @param options - Search options
|
|
177
|
+
* @returns Paginated list of orders
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* const { data, cursor } = await square.orders.search({
|
|
182
|
+
* locationIds: ['LXXX'],
|
|
183
|
+
* limit: 10,
|
|
184
|
+
* });
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
async search(options) {
|
|
188
|
+
try {
|
|
189
|
+
const locationIds = options?.locationIds ?? (this.defaultLocationId ? [this.defaultLocationId] : []);
|
|
190
|
+
if (locationIds.length === 0) {
|
|
191
|
+
throw new SquareValidationError('At least one locationId is required for search');
|
|
192
|
+
}
|
|
193
|
+
const response = await this.client.orders.search({
|
|
194
|
+
locationIds,
|
|
195
|
+
cursor: options?.cursor,
|
|
196
|
+
limit: options?.limit,
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
data: (response.orders ?? []),
|
|
200
|
+
cursor: response.cursor,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
throw parseSquareError(error);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=orders.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orders.service.js","sourceRoot":"","sources":["../../../src/core/services/orders.service.ts"],"names":[],"mappings":"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"}
|