@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,265 @@
|
|
|
1
|
+
import { parseSquareError, SquareValidationError } from '../errors.js';
|
|
2
|
+
import { createIdempotencyKey } from '../utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Subscriptions service for managing Square subscriptions
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // Create a subscription
|
|
9
|
+
* const subscription = await square.subscriptions.create({
|
|
10
|
+
* customerId: 'CUST_123',
|
|
11
|
+
* planVariationId: 'PLAN_VAR_123',
|
|
12
|
+
* });
|
|
13
|
+
*
|
|
14
|
+
* // Cancel a subscription
|
|
15
|
+
* await square.subscriptions.cancel('SUB_123');
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class SubscriptionsService {
|
|
19
|
+
client;
|
|
20
|
+
defaultLocationId;
|
|
21
|
+
constructor(client, defaultLocationId) {
|
|
22
|
+
this.client = client;
|
|
23
|
+
this.defaultLocationId = defaultLocationId;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a new subscription
|
|
27
|
+
*
|
|
28
|
+
* @param options - Subscription creation options
|
|
29
|
+
* @returns Created subscription
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const subscription = await square.subscriptions.create({
|
|
34
|
+
* customerId: 'CUST_123',
|
|
35
|
+
* planVariationId: 'PLAN_VAR_123',
|
|
36
|
+
* startDate: '2024-02-01',
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
async create(options) {
|
|
41
|
+
const locationId = options.locationId ?? this.defaultLocationId;
|
|
42
|
+
if (!locationId) {
|
|
43
|
+
throw new SquareValidationError('locationId is required. Set it in client config or provide it explicitly.', 'locationId');
|
|
44
|
+
}
|
|
45
|
+
if (!options.customerId) {
|
|
46
|
+
throw new SquareValidationError('customerId is required', 'customerId');
|
|
47
|
+
}
|
|
48
|
+
if (!options.planVariationId) {
|
|
49
|
+
throw new SquareValidationError('planVariationId is required', 'planVariationId');
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const response = await this.client.subscriptions.create({
|
|
53
|
+
idempotencyKey: options.idempotencyKey ?? createIdempotencyKey(),
|
|
54
|
+
locationId,
|
|
55
|
+
customerId: options.customerId,
|
|
56
|
+
planVariationId: options.planVariationId,
|
|
57
|
+
startDate: options.startDate,
|
|
58
|
+
cardId: options.cardId,
|
|
59
|
+
timezone: options.timezone,
|
|
60
|
+
priceOverrideMoney: options.priceOverride
|
|
61
|
+
? {
|
|
62
|
+
amount: BigInt(options.priceOverride),
|
|
63
|
+
currency: 'USD',
|
|
64
|
+
}
|
|
65
|
+
: undefined,
|
|
66
|
+
taxPercentage: options.taxPercentage,
|
|
67
|
+
});
|
|
68
|
+
if (!response.subscription) {
|
|
69
|
+
throw new Error('Subscription was not created');
|
|
70
|
+
}
|
|
71
|
+
return response.subscription;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
throw parseSquareError(error);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get a subscription by ID
|
|
79
|
+
*
|
|
80
|
+
* @param subscriptionId - Subscription ID
|
|
81
|
+
* @returns Subscription details
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* const subscription = await square.subscriptions.get('SUB_123');
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
async get(subscriptionId) {
|
|
89
|
+
try {
|
|
90
|
+
const response = await this.client.subscriptions.get({ subscriptionId });
|
|
91
|
+
if (!response.subscription) {
|
|
92
|
+
throw new Error('Subscription not found');
|
|
93
|
+
}
|
|
94
|
+
return response.subscription;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
throw parseSquareError(error);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Update a subscription
|
|
102
|
+
*
|
|
103
|
+
* @param subscriptionId - Subscription ID
|
|
104
|
+
* @param options - Update options
|
|
105
|
+
* @returns Updated subscription
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* const subscription = await square.subscriptions.update('SUB_123', {
|
|
110
|
+
* priceOverride: 1500,
|
|
111
|
+
* });
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
async update(subscriptionId, options) {
|
|
115
|
+
try {
|
|
116
|
+
const response = await this.client.subscriptions.update({
|
|
117
|
+
subscriptionId,
|
|
118
|
+
subscription: {
|
|
119
|
+
priceOverrideMoney: options.priceOverride
|
|
120
|
+
? {
|
|
121
|
+
amount: BigInt(options.priceOverride),
|
|
122
|
+
currency: 'USD',
|
|
123
|
+
}
|
|
124
|
+
: undefined,
|
|
125
|
+
cardId: options.cardId,
|
|
126
|
+
taxPercentage: options.taxPercentage,
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
if (!response.subscription) {
|
|
130
|
+
throw new Error('Subscription update failed');
|
|
131
|
+
}
|
|
132
|
+
return response.subscription;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
throw parseSquareError(error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Cancel a subscription
|
|
140
|
+
*
|
|
141
|
+
* @param subscriptionId - Subscription ID to cancel
|
|
142
|
+
* @returns Cancelled subscription
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* const subscription = await square.subscriptions.cancel('SUB_123');
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
async cancel(subscriptionId) {
|
|
150
|
+
try {
|
|
151
|
+
const response = await this.client.subscriptions.cancel({ subscriptionId });
|
|
152
|
+
if (!response.subscription) {
|
|
153
|
+
throw new Error('Subscription cancellation failed');
|
|
154
|
+
}
|
|
155
|
+
return response.subscription;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
throw parseSquareError(error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Pause a subscription
|
|
163
|
+
*
|
|
164
|
+
* @param subscriptionId - Subscription ID to pause
|
|
165
|
+
* @param options - Pause options
|
|
166
|
+
* @returns Paused subscription
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const subscription = await square.subscriptions.pause('SUB_123', {
|
|
171
|
+
* pauseEffectiveDate: '2024-03-01',
|
|
172
|
+
* });
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
async pause(subscriptionId, options) {
|
|
176
|
+
try {
|
|
177
|
+
const response = await this.client.subscriptions.pause({
|
|
178
|
+
subscriptionId,
|
|
179
|
+
pauseEffectiveDate: options?.pauseEffectiveDate,
|
|
180
|
+
pauseCycleDuration: options?.pauseCycleDuration
|
|
181
|
+
? BigInt(options.pauseCycleDuration)
|
|
182
|
+
: undefined,
|
|
183
|
+
});
|
|
184
|
+
if (!response.subscription) {
|
|
185
|
+
throw new Error('Subscription pause failed');
|
|
186
|
+
}
|
|
187
|
+
return response.subscription;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
throw parseSquareError(error);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Resume a paused subscription
|
|
195
|
+
*
|
|
196
|
+
* @param subscriptionId - Subscription ID to resume
|
|
197
|
+
* @param resumeEffectiveDate - Optional date to resume
|
|
198
|
+
* @returns Resumed subscription
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* const subscription = await square.subscriptions.resume('SUB_123');
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
async resume(subscriptionId, resumeEffectiveDate) {
|
|
206
|
+
try {
|
|
207
|
+
const response = await this.client.subscriptions.resume({
|
|
208
|
+
subscriptionId,
|
|
209
|
+
resumeEffectiveDate,
|
|
210
|
+
});
|
|
211
|
+
if (!response.subscription) {
|
|
212
|
+
throw new Error('Subscription resume failed');
|
|
213
|
+
}
|
|
214
|
+
return response.subscription;
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
throw parseSquareError(error);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Search for subscriptions
|
|
222
|
+
*
|
|
223
|
+
* @param options - Search options
|
|
224
|
+
* @returns Matching subscriptions with pagination
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* const results = await square.subscriptions.search({
|
|
229
|
+
* customerId: 'CUST_123',
|
|
230
|
+
* });
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
233
|
+
async search(options) {
|
|
234
|
+
try {
|
|
235
|
+
const filters = [];
|
|
236
|
+
if (options?.customerId) {
|
|
237
|
+
filters.push({
|
|
238
|
+
customerIds: [options.customerId],
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
if (options?.locationIds) {
|
|
242
|
+
filters.push({
|
|
243
|
+
locationIds: options.locationIds,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
const response = await this.client.subscriptions.search({
|
|
247
|
+
cursor: options?.cursor,
|
|
248
|
+
limit: options?.limit,
|
|
249
|
+
query: filters.length > 0
|
|
250
|
+
? {
|
|
251
|
+
filter: filters.reduce((acc, f) => ({ ...acc, ...f }), {}),
|
|
252
|
+
}
|
|
253
|
+
: undefined,
|
|
254
|
+
});
|
|
255
|
+
return {
|
|
256
|
+
data: (response.subscriptions ?? []),
|
|
257
|
+
cursor: response.cursor,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
throw parseSquareError(error);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=subscriptions.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.service.js","sourceRoot":"","sources":["../../../src/core/services/subscriptions.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Square environment configuration
|
|
3
|
+
*/
|
|
4
|
+
export type SquareEnvironment = 'sandbox' | 'production';
|
|
5
|
+
/**
|
|
6
|
+
* Currency codes supported by Square
|
|
7
|
+
*/
|
|
8
|
+
export type CurrencyCode = 'USD' | 'CAD' | 'GBP' | 'EUR' | 'AUD' | 'JPY';
|
|
9
|
+
/**
|
|
10
|
+
* Payment source identifier
|
|
11
|
+
* Can be a card nonce, card ID, or digital wallet token
|
|
12
|
+
*/
|
|
13
|
+
export type PaymentSource = string;
|
|
14
|
+
/**
|
|
15
|
+
* Common pagination options
|
|
16
|
+
*/
|
|
17
|
+
export interface PaginationOptions {
|
|
18
|
+
cursor?: string;
|
|
19
|
+
limit?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Common response with pagination
|
|
23
|
+
*/
|
|
24
|
+
export interface PaginatedResponse<T> {
|
|
25
|
+
data: T[];
|
|
26
|
+
cursor?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Simple money representation for API inputs
|
|
30
|
+
*/
|
|
31
|
+
export interface MoneyInput {
|
|
32
|
+
amount: number;
|
|
33
|
+
currency?: CurrencyCode;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Line item for orders
|
|
37
|
+
*/
|
|
38
|
+
export interface LineItemInput {
|
|
39
|
+
name?: string;
|
|
40
|
+
catalogObjectId?: string;
|
|
41
|
+
quantity?: number;
|
|
42
|
+
amount?: number;
|
|
43
|
+
note?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create payment options
|
|
47
|
+
*/
|
|
48
|
+
export interface CreatePaymentOptions {
|
|
49
|
+
sourceId: PaymentSource;
|
|
50
|
+
amount: number;
|
|
51
|
+
currency?: CurrencyCode;
|
|
52
|
+
customerId?: string;
|
|
53
|
+
orderId?: string;
|
|
54
|
+
referenceId?: string;
|
|
55
|
+
note?: string;
|
|
56
|
+
autocomplete?: boolean;
|
|
57
|
+
idempotencyKey?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create order options
|
|
61
|
+
*/
|
|
62
|
+
export interface CreateOrderOptions {
|
|
63
|
+
lineItems: LineItemInput[];
|
|
64
|
+
customerId?: string;
|
|
65
|
+
referenceId?: string;
|
|
66
|
+
idempotencyKey?: string;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,YAAY,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEzE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { CurrencyCode } from './types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Money representation
|
|
4
|
+
*/
|
|
5
|
+
export interface Money {
|
|
6
|
+
amount: bigint;
|
|
7
|
+
currency: CurrencyCode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Convert a dollar amount to cents (smallest currency unit)
|
|
11
|
+
*
|
|
12
|
+
* @param amount - Dollar amount (e.g., 10.50)
|
|
13
|
+
* @param currency - Currency code (default: USD)
|
|
14
|
+
* @returns Amount in smallest currency unit (e.g., 1050 for $10.50 USD)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* toCents(10.50) // 1050
|
|
19
|
+
* toCents(10.50, 'USD') // 1050
|
|
20
|
+
* toCents(1000, 'JPY') // 1000 (JPY has no decimal places)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function toCents(amount: number, currency?: CurrencyCode): bigint;
|
|
24
|
+
/**
|
|
25
|
+
* Convert cents (smallest currency unit) to dollar amount
|
|
26
|
+
*
|
|
27
|
+
* @param cents - Amount in smallest currency unit
|
|
28
|
+
* @param currency - Currency code (default: USD)
|
|
29
|
+
* @returns Dollar amount
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* fromCents(1050n) // 10.50
|
|
34
|
+
* fromCents(1050n, 'USD') // 10.50
|
|
35
|
+
* fromCents(1000n, 'JPY') // 1000
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function fromCents(cents: bigint | number, currency?: CurrencyCode): number;
|
|
39
|
+
/**
|
|
40
|
+
* Format money for display
|
|
41
|
+
*
|
|
42
|
+
* @param cents - Amount in smallest currency unit
|
|
43
|
+
* @param currency - Currency code (default: USD)
|
|
44
|
+
* @param locale - Locale for formatting (default: en-US)
|
|
45
|
+
* @returns Formatted currency string
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* formatMoney(1050n) // "$10.50"
|
|
50
|
+
* formatMoney(1050n, 'USD', 'en-US') // "$10.50"
|
|
51
|
+
* formatMoney(1000n, 'JPY', 'ja-JP') // "¥1,000"
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function formatMoney(cents: bigint | number, currency?: CurrencyCode, locale?: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Create a unique idempotency key for Square API requests
|
|
57
|
+
*
|
|
58
|
+
* @returns UUID string
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const key = createIdempotencyKey();
|
|
63
|
+
* // "550e8400-e29b-41d4-a716-446655440000"
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function createIdempotencyKey(): string;
|
|
67
|
+
/**
|
|
68
|
+
* Convert Money object to Square API format
|
|
69
|
+
*/
|
|
70
|
+
export declare function toSquareMoney(amount: number | bigint, currency?: CurrencyCode): {
|
|
71
|
+
amount: bigint;
|
|
72
|
+
currency: string;
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;CACxB;AAcD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,YAAoB,GAAG,MAAM,CAI9E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,GAAE,YAAoB,GAAG,MAAM,CAIxF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,GAAE,YAAoB,EAC9B,MAAM,GAAE,MAAgB,GACvB,MAAM,CAMR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,GAAE,YAAoB,GAC7B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAMtC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Zero-decimal currencies that don't use fractional units
|
|
4
|
+
*/
|
|
5
|
+
const ZERO_DECIMAL_CURRENCIES = ['JPY'];
|
|
6
|
+
/**
|
|
7
|
+
* Get the multiplier for a currency
|
|
8
|
+
*/
|
|
9
|
+
function getCurrencyMultiplier(currency) {
|
|
10
|
+
return ZERO_DECIMAL_CURRENCIES.includes(currency) ? 1 : 100;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Convert a dollar amount to cents (smallest currency unit)
|
|
14
|
+
*
|
|
15
|
+
* @param amount - Dollar amount (e.g., 10.50)
|
|
16
|
+
* @param currency - Currency code (default: USD)
|
|
17
|
+
* @returns Amount in smallest currency unit (e.g., 1050 for $10.50 USD)
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* toCents(10.50) // 1050
|
|
22
|
+
* toCents(10.50, 'USD') // 1050
|
|
23
|
+
* toCents(1000, 'JPY') // 1000 (JPY has no decimal places)
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function toCents(amount, currency = 'USD') {
|
|
27
|
+
const multiplier = getCurrencyMultiplier(currency);
|
|
28
|
+
// Use Math.round to handle floating point precision issues
|
|
29
|
+
return BigInt(Math.round(amount * multiplier));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert cents (smallest currency unit) to dollar amount
|
|
33
|
+
*
|
|
34
|
+
* @param cents - Amount in smallest currency unit
|
|
35
|
+
* @param currency - Currency code (default: USD)
|
|
36
|
+
* @returns Dollar amount
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* fromCents(1050n) // 10.50
|
|
41
|
+
* fromCents(1050n, 'USD') // 10.50
|
|
42
|
+
* fromCents(1000n, 'JPY') // 1000
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function fromCents(cents, currency = 'USD') {
|
|
46
|
+
const multiplier = getCurrencyMultiplier(currency);
|
|
47
|
+
const value = typeof cents === 'bigint' ? Number(cents) : cents;
|
|
48
|
+
return value / multiplier;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Format money for display
|
|
52
|
+
*
|
|
53
|
+
* @param cents - Amount in smallest currency unit
|
|
54
|
+
* @param currency - Currency code (default: USD)
|
|
55
|
+
* @param locale - Locale for formatting (default: en-US)
|
|
56
|
+
* @returns Formatted currency string
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* formatMoney(1050n) // "$10.50"
|
|
61
|
+
* formatMoney(1050n, 'USD', 'en-US') // "$10.50"
|
|
62
|
+
* formatMoney(1000n, 'JPY', 'ja-JP') // "¥1,000"
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export function formatMoney(cents, currency = 'USD', locale = 'en-US') {
|
|
66
|
+
const amount = fromCents(cents, currency);
|
|
67
|
+
return new Intl.NumberFormat(locale, {
|
|
68
|
+
style: 'currency',
|
|
69
|
+
currency,
|
|
70
|
+
}).format(amount);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a unique idempotency key for Square API requests
|
|
74
|
+
*
|
|
75
|
+
* @returns UUID string
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const key = createIdempotencyKey();
|
|
80
|
+
* // "550e8400-e29b-41d4-a716-446655440000"
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export function createIdempotencyKey() {
|
|
84
|
+
return randomUUID();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Convert Money object to Square API format
|
|
88
|
+
*/
|
|
89
|
+
export function toSquareMoney(amount, currency = 'USD') {
|
|
90
|
+
const cents = typeof amount === 'bigint' ? amount : toCents(amount, currency);
|
|
91
|
+
return {
|
|
92
|
+
amount: cents,
|
|
93
|
+
currency,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAWpC;;GAEG;AACH,MAAM,uBAAuB,GAAmB,CAAC,KAAK,CAAC,CAAC;AAExD;;GAEG;AACH,SAAS,qBAAqB,CAAC,QAAsB;IACnD,OAAO,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,WAAyB,KAAK;IACpE,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,2DAA2D;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,SAAS,CAAC,KAAsB,EAAE,WAAyB,KAAK;IAC9E,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,OAAO,KAAK,GAAG,UAAU,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CACzB,KAAsB,EACtB,WAAyB,KAAK,EAC9B,SAAiB,OAAO;IAExB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACnC,KAAK,EAAE,UAAU;QACjB,QAAQ;KACT,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB,EACvB,WAAyB,KAAK;IAE9B,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9E,OAAO;QACL,MAAM,EAAE,KAAK;QACb,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SquareProviderConfig, SquareContextValue } from './types.js';
|
|
3
|
+
declare const SquareContext: React.Context<SquareContextValue | null>;
|
|
4
|
+
/**
|
|
5
|
+
* Props for SquareProvider
|
|
6
|
+
*/
|
|
7
|
+
export interface SquareProviderProps extends SquareProviderConfig {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Square Provider component that initializes the Web Payments SDK
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { SquareProvider } from '@bates-solutions/squareup/react';
|
|
16
|
+
*
|
|
17
|
+
* function App() {
|
|
18
|
+
* return (
|
|
19
|
+
* <SquareProvider
|
|
20
|
+
* applicationId="sq0idp-xxx"
|
|
21
|
+
* locationId="LXXX"
|
|
22
|
+
* environment="sandbox"
|
|
23
|
+
* >
|
|
24
|
+
* <Checkout />
|
|
25
|
+
* </SquareProvider>
|
|
26
|
+
* );
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function SquareProvider({ children, applicationId, locationId, environment, accessToken, currency, }: SquareProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
/**
|
|
32
|
+
* Hook to access Square context
|
|
33
|
+
*
|
|
34
|
+
* @throws Error if used outside of SquareProvider
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* function Checkout() {
|
|
39
|
+
* const { sdkLoaded, payments, error } = useSquare();
|
|
40
|
+
*
|
|
41
|
+
* if (error) return <div>Error: {error.message}</div>;
|
|
42
|
+
* if (!sdkLoaded) return <div>Loading...</div>;
|
|
43
|
+
*
|
|
44
|
+
* return <div>Ready to accept payments!</div>;
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function useSquare(): SquareContextValue;
|
|
49
|
+
export { SquareContext };
|
|
50
|
+
//# sourceMappingURL=SquareProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SquareProvider.d.ts","sourceRoot":"","sources":["../../src/react/SquareProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkE,MAAM,OAAO,CAAC;AACvF,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAY,MAAM,YAAY,CAAC;AAErF,QAAA,MAAM,aAAa,0CAAiD,CAAC;AAwCrE;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC/D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAuB,EACvB,WAAW,EACX,QAAgB,GACjB,EAAE,mBAAmB,2CAqErB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,IAAI,kBAAkB,CAQ9C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|