kassza 0.11.0 → 0.13.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.
Files changed (132) hide show
  1. package/README.md +376 -111
  2. package/agents/README.md +20 -5
  3. package/agents/api.md +165 -2
  4. package/agents/pitfalls.md +16 -3
  5. package/agents/recipes.md +215 -45
  6. package/agents/skills/kassza/SKILL.md +11 -8
  7. package/dist/cli.cjs +552 -0
  8. package/dist/cli.d.cts +1 -0
  9. package/dist/cli.d.ts +1 -0
  10. package/dist/cli.js +552 -0
  11. package/dist/client-6MkeuFqD.d.ts +268 -0
  12. package/dist/client-B5FryKxJ.d.cts +268 -0
  13. package/dist/client-C-PdfL_P.cjs +1275 -0
  14. package/dist/client-CfaS1-Jx.js +1228 -0
  15. package/dist/context-BxQlIlug.d.ts +425 -0
  16. package/dist/context-DXNbTPwz.d.cts +425 -0
  17. package/dist/create-once-Cz621l8r.js +330 -0
  18. package/dist/create-once-DgMtKKcG.cjs +395 -0
  19. package/dist/crypto-Dpn4FHQ6.cjs +65 -0
  20. package/dist/crypto-usDg8L2K.js +36 -0
  21. package/dist/data-link/index.cjs +232 -0
  22. package/dist/data-link/index.d.cts +79 -0
  23. package/dist/data-link/index.d.ts +79 -0
  24. package/dist/data-link/index.js +224 -0
  25. package/dist/{dates-DtHzwNU6.d.cts → dates-9zvESP0i.d.cts} +2 -1
  26. package/dist/{dates-DtHzwNU6.d.ts → dates-9zvESP0i.d.ts} +2 -1
  27. package/dist/{dates-PPxH0n5H.cjs → dates-CPgBodkP.cjs} +44 -1
  28. package/dist/{dates-D2XebOIg.js → dates-CXyj7Azy.js} +39 -2
  29. package/dist/delegation/index.cjs +396 -0
  30. package/dist/delegation/index.d.cts +100 -0
  31. package/dist/delegation/index.d.ts +100 -0
  32. package/dist/delegation/index.js +378 -0
  33. package/dist/{errors-DapdV5DK.js → errors-DLrb0g64.js} +122 -5
  34. package/dist/{errors-B0QJhUW1.cjs → errors-DxeuTslP.cjs} +127 -4
  35. package/dist/get-Byc9T5WO.d.cts +151 -0
  36. package/dist/get-Byc9T5WO.d.ts +151 -0
  37. package/dist/get-Csm2n0rZ.cjs +445 -0
  38. package/dist/get-DT3JEgQ6.js +380 -0
  39. package/dist/index.cjs +21 -1410
  40. package/dist/index.d.cts +20 -3
  41. package/dist/index.d.ts +20 -3
  42. package/dist/index.js +8 -1409
  43. package/dist/ipn/index.cjs +1 -1
  44. package/dist/ipn/index.js +1 -1
  45. package/dist/issue-AGRohSm7.cjs +914 -0
  46. package/dist/issue-DtSLpVdJ.js +777 -0
  47. package/dist/json-4y4E2xxS.cjs +61 -0
  48. package/dist/json-B70TwoX1.d.cts +4 -0
  49. package/dist/json-B70TwoX1.d.ts +4 -0
  50. package/dist/json-DjnqnaJK.js +32 -0
  51. package/dist/mcp/index.cjs +10 -0
  52. package/dist/mcp/index.d.cts +71 -0
  53. package/dist/mcp/index.d.ts +71 -0
  54. package/dist/mcp/index.js +2 -0
  55. package/dist/money/index.cjs +12 -10
  56. package/dist/money/index.js +3 -1
  57. package/dist/{money-DkiGukAw.cjs → money-BxytJW6f.cjs} +42 -177
  58. package/dist/{money-C9j7nBNP.js → money-t7uy1n91.js} +29 -110
  59. package/dist/nav/index.cjs +1046 -0
  60. package/dist/nav/index.d.cts +247 -0
  61. package/dist/nav/index.d.ts +247 -0
  62. package/dist/nav/index.js +1012 -0
  63. package/dist/nav-BEwcX7-N.cjs +203 -0
  64. package/dist/nav-CK1WgYo7.js +156 -0
  65. package/dist/parse-BJj-aqKy.cjs +380 -0
  66. package/dist/parse-C608ehqM.js +291 -0
  67. package/dist/payments/barion.cjs +208 -0
  68. package/dist/payments/barion.d.cts +28 -0
  69. package/dist/payments/barion.d.ts +28 -0
  70. package/dist/payments/barion.js +199 -0
  71. package/dist/payments/index.cjs +16 -0
  72. package/dist/payments/index.d.cts +31 -0
  73. package/dist/payments/index.d.ts +31 -0
  74. package/dist/payments/index.js +3 -0
  75. package/dist/payments/paypal.cjs +351 -0
  76. package/dist/payments/paypal.d.cts +59 -0
  77. package/dist/payments/paypal.d.ts +59 -0
  78. package/dist/payments/paypal.js +337 -0
  79. package/dist/payments/revolut.cjs +261 -0
  80. package/dist/payments/revolut.d.cts +48 -0
  81. package/dist/payments/revolut.d.ts +48 -0
  82. package/dist/payments/revolut.js +249 -0
  83. package/dist/payments/simplepay.cjs +313 -0
  84. package/dist/payments/simplepay.d.cts +86 -0
  85. package/dist/payments/simplepay.d.ts +86 -0
  86. package/dist/payments/simplepay.js +299 -0
  87. package/dist/payments/stripe.cjs +315 -0
  88. package/dist/payments/stripe.d.cts +49 -0
  89. package/dist/payments/stripe.d.ts +49 -0
  90. package/dist/payments/stripe.js +303 -0
  91. package/dist/reports/index.cjs +103 -0
  92. package/dist/reports/index.d.cts +70 -0
  93. package/dist/reports/index.d.ts +70 -0
  94. package/dist/reports/index.js +94 -0
  95. package/dist/request-body-CH6ZGOrq.cjs +34 -0
  96. package/dist/request-body-uZHMRlQr.js +29 -0
  97. package/dist/rounding-BLyHjjI5.js +20 -0
  98. package/dist/rounding-TxoWy2ww.cjs +37 -0
  99. package/dist/serialize-BXOww1Uq.cjs +286 -0
  100. package/dist/serialize-DSE_o9RK.js +215 -0
  101. package/dist/server-C6PoNkdD.cjs +1557 -0
  102. package/dist/server-Cd8HB661.js +1504 -0
  103. package/dist/storage/fs.cjs +1 -1
  104. package/dist/storage/fs.js +1 -1
  105. package/dist/storage/index.cjs +2 -2
  106. package/dist/storage/index.d.cts +1 -1
  107. package/dist/storage/index.d.ts +1 -1
  108. package/dist/storage/index.js +2 -2
  109. package/dist/tax-number-BYFkBp4A.cjs +141 -0
  110. package/dist/tax-number-BdqKsxNR.js +76 -0
  111. package/dist/testing/index.cjs +1656 -84
  112. package/dist/testing/index.d.cts +203 -3
  113. package/dist/testing/index.d.ts +203 -3
  114. package/dist/testing/index.js +1653 -83
  115. package/dist/types-BVeR7KyU.d.cts +56 -0
  116. package/dist/types-BVeR7KyU.d.ts +56 -0
  117. package/dist/types-DH8QoNZK.d.cts +135 -0
  118. package/dist/types-k--zHf4l.d.ts +135 -0
  119. package/dist/validators/index.cjs +14 -88
  120. package/dist/validators/index.js +1 -75
  121. package/dist/vat-g35srbNG.cjs +116 -0
  122. package/dist/vat-v_dcWCto.js +81 -0
  123. package/dist/webhook-81giRMdQ.cjs +223 -0
  124. package/dist/webhook-CpCMHhn2.d.ts +6 -0
  125. package/dist/webhook-CpMJuP6c.d.cts +6 -0
  126. package/dist/webhook-CrEGohbg.js +152 -0
  127. package/llms.txt +4 -4
  128. package/package.json +148 -2
  129. package/dist/client-B9kbKKBf.d.cts +0 -748
  130. package/dist/client-zv4enyq7.d.ts +0 -748
  131. package/dist/create-5YkUcJSe.js +0 -957
  132. package/dist/create-DZsl3Z4m.cjs +0 -1178
@@ -0,0 +1,351 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_binary = require("../binary-B89HM03_.cjs");
3
+ const require_rounding = require("../rounding-TxoWy2ww.cjs");
4
+ const require_webhook = require("../webhook-81giRMdQ.cjs");
5
+ const require_json = require("../json-4y4E2xxS.cjs");
6
+ //#region src/payments/paypal.ts
7
+ const PAYPAL_LIVE_API_URL = "https://api-m.paypal.com";
8
+ const PAYPAL_SANDBOX_API_URL = "https://api-m.sandbox.paypal.com";
9
+ const PAYPAL_METHOD = "PayPal";
10
+ const PAYPAL_SHIPPING_ITEM_NAME = "Szállítási díj";
11
+ const PAYPAL_HANDLING_ITEM_NAME = "Kezelési díj";
12
+ const PAYPAL_INSURANCE_ITEM_NAME = "Biztosítás";
13
+ const TOKEN_REFRESH_MARGIN_MS = 6e4;
14
+ const AMOUNT_TOLERANCE = .005;
15
+ const UNAUTHORIZED = 401;
16
+ const TRANSMISSION_HEADERS = {
17
+ authAlgo: "paypal-auth-algo",
18
+ certUrl: "paypal-cert-url",
19
+ transmissionId: "paypal-transmission-id",
20
+ transmissionSig: "paypal-transmission-sig",
21
+ transmissionTime: "paypal-transmission-time"
22
+ };
23
+ function apiBase(options) {
24
+ return (options.apiUrl ?? (options.sandbox ? "https://api-m.sandbox.paypal.com" : "https://api-m.paypal.com")).replace(/\/+$/, "");
25
+ }
26
+ async function readJson(response, what) {
27
+ const json = require_json.record(await response.json().catch(() => void 0));
28
+ if (!response.ok || !json) {
29
+ const detail = require_json.text(json?.message) ?? require_json.text(json?.error_description) ?? require_json.text(json?.name);
30
+ throw new require_webhook.PaymentProviderError("paypal", `A PayPal ${what} nem sikerült (HTTP ${response.status})${detail ? `: ${detail}` : ""}.`, response.status);
31
+ }
32
+ return json;
33
+ }
34
+ function payPalApi(options) {
35
+ const clientId = options.clientId?.trim();
36
+ const clientSecret = options.clientSecret?.trim();
37
+ if (!clientId || !clientSecret) throw new TypeError("Add meg a PayPal REST alkalmazás clientId és clientSecret adatát.");
38
+ const fetchImpl = options.fetch ?? globalThis.fetch;
39
+ const base = apiBase(options);
40
+ const now = options.now ?? Date.now;
41
+ let cached;
42
+ async function fetchOrThrow(url, init, what) {
43
+ try {
44
+ return await fetchImpl(url, init);
45
+ } catch (error) {
46
+ throw new require_webhook.PaymentProviderError("paypal", `A PayPal ${what} nem sikerült.`, void 0, error);
47
+ }
48
+ }
49
+ async function token() {
50
+ if (cached && cached.expiresAt > now()) return cached.value;
51
+ const credentials = require_binary.bytesToBase64(require_binary.encodeUtf8(`${clientId}:${clientSecret}`));
52
+ const json = await readJson(await fetchOrThrow(`${base}/v1/oauth2/token`, {
53
+ method: "POST",
54
+ headers: {
55
+ authorization: `Basic ${credentials}`,
56
+ "content-type": "application/x-www-form-urlencoded",
57
+ accept: "application/json"
58
+ },
59
+ body: "grant_type=client_credentials"
60
+ }, "hozzáférési token kérése"), "hozzáférési token kérése");
61
+ const value = require_json.text(json.access_token);
62
+ if (!value) throw new require_webhook.PaymentProviderError("paypal", "A PayPal token válaszából hiányzik az access_token.");
63
+ const lifetimeMs = (require_json.numeric(json.expires_in) ?? 0) * 1e3;
64
+ cached = {
65
+ value,
66
+ expiresAt: now() + Math.max(0, lifetimeMs - TOKEN_REFRESH_MARGIN_MS)
67
+ };
68
+ return value;
69
+ }
70
+ async function send(method, pathname, body) {
71
+ const what = `${method} ${pathname} hívás`;
72
+ const attempt = async () => fetchOrThrow(`${base}${pathname}`, {
73
+ method,
74
+ headers: {
75
+ authorization: `Bearer ${await token()}`,
76
+ accept: "application/json",
77
+ ...body === void 0 ? {} : { "content-type": "application/json" }
78
+ },
79
+ ...body === void 0 ? {} : { body }
80
+ }, what);
81
+ let response = await attempt();
82
+ if (response.status === UNAUTHORIZED) {
83
+ cached = void 0;
84
+ response = await attempt();
85
+ }
86
+ return readJson(response, what);
87
+ }
88
+ return {
89
+ get: (pathname) => send("GET", pathname),
90
+ post: (pathname, body) => send("POST", pathname, body)
91
+ };
92
+ }
93
+ function payPalTransmission(headers) {
94
+ const authAlgo = headers.get(TRANSMISSION_HEADERS.authAlgo)?.trim();
95
+ const certUrl = headers.get(TRANSMISSION_HEADERS.certUrl)?.trim();
96
+ const transmissionId = headers.get(TRANSMISSION_HEADERS.transmissionId)?.trim();
97
+ const transmissionSig = headers.get(TRANSMISSION_HEADERS.transmissionSig)?.trim();
98
+ const transmissionTime = headers.get(TRANSMISSION_HEADERS.transmissionTime)?.trim();
99
+ if (!authAlgo || !certUrl || !transmissionId || !transmissionSig || !transmissionTime) return;
100
+ return {
101
+ authAlgo,
102
+ certUrl,
103
+ transmissionId,
104
+ transmissionSig,
105
+ transmissionTime
106
+ };
107
+ }
108
+ async function verifyPayPalWebhook(payload, headers, webhookId, api) {
109
+ const transmission = payPalTransmission(headers);
110
+ if (!transmission) throw new require_webhook.WebhookVerificationError("paypal", "missing_signature", "Hiányoznak a PayPal webhook PAYPAL-TRANSMISSION-* és PAYPAL-AUTH-ALGO fejlécei.");
111
+ require_webhook.parseJsonObject("paypal", payload);
112
+ const body = [
113
+ `{"auth_algo":${JSON.stringify(transmission.authAlgo)}`,
114
+ `"cert_url":${JSON.stringify(transmission.certUrl)}`,
115
+ `"transmission_id":${JSON.stringify(transmission.transmissionId)}`,
116
+ `"transmission_sig":${JSON.stringify(transmission.transmissionSig)}`,
117
+ `"transmission_time":${JSON.stringify(transmission.transmissionTime)}`,
118
+ `"webhook_id":${JSON.stringify(webhookId)}`,
119
+ `"webhook_event":${payload.trim()}}`
120
+ ].join(",");
121
+ const result = await api.post("/v1/notifications/verify-webhook-signature", body);
122
+ if (require_json.text(result.verification_status) !== "SUCCESS") throw new require_webhook.WebhookVerificationError("paypal", "invalid_signature", "A PayPal szerint a webhook aláírása érvénytelen.");
123
+ }
124
+ function parsePayPalEvent(payload) {
125
+ const json = require_webhook.parseJsonObject("paypal", payload);
126
+ const id = require_json.text(json.id);
127
+ const eventType = require_json.text(json.event_type);
128
+ const resource = require_json.record(json.resource);
129
+ if (!id || !eventType || !resource) throw new require_webhook.WebhookVerificationError("paypal", "invalid_payload", "A PayPal eseményből hiányzik az id, az event_type vagy a resource.");
130
+ return {
131
+ id,
132
+ eventType,
133
+ resourceType: require_json.text(json.resource_type),
134
+ createTime: require_json.text(json.create_time),
135
+ resource,
136
+ raw: json
137
+ };
138
+ }
139
+ function moneyValue(value) {
140
+ const amount = require_json.text(require_json.record(value)?.value);
141
+ return amount === void 0 ? void 0 : require_webhook.parseDecimalAmount(amount);
142
+ }
143
+ function moneyOf(value) {
144
+ const amount = moneyValue(value);
145
+ const currency = require_json.text(require_json.record(value)?.currency_code);
146
+ if (amount === void 0 || !currency) return void 0;
147
+ return {
148
+ value: amount,
149
+ currency: require_webhook.normalizeCurrency(currency)
150
+ };
151
+ }
152
+ function payPalCaptureIdOfRefund(refund) {
153
+ const up = require_json.records(refund.links).find((link) => require_json.text(link.rel) === "up");
154
+ const href = require_json.text(up?.href);
155
+ if (!href) return void 0;
156
+ const match = /\/captures\/([^/?#]+)/.exec(href);
157
+ return match?.[1] ? decodeURIComponent(match[1]) : void 0;
158
+ }
159
+ function payPalOrderIdOfCapture(capture) {
160
+ return require_json.text(require_json.path(capture, "supplementary_data", "related_ids", "order_id"));
161
+ }
162
+ function addressOf(address) {
163
+ if (!address) return void 0;
164
+ return {
165
+ country: require_json.text(address.country_code),
166
+ zip: require_json.text(address.postal_code),
167
+ city: require_json.text(address.admin_area_2),
168
+ line1: require_json.text(address.address_line_1),
169
+ line2: require_json.text(address.address_line_2)
170
+ };
171
+ }
172
+ function personName(name, country) {
173
+ const full = require_json.text(name?.full_name);
174
+ if (full) return full;
175
+ const given = require_json.text(name?.given_name);
176
+ const surname = require_json.text(name?.surname);
177
+ const joined = (country === "HU" ? [surname, given] : [given, surname]).filter(Boolean).join(" ");
178
+ return joined === "" ? void 0 : joined;
179
+ }
180
+ function customerOf(order) {
181
+ if (!order) return void 0;
182
+ const payer = require_json.record(order.payer);
183
+ const shipping = require_json.record(require_json.records(order.purchase_units)[0]?.shipping);
184
+ const payerAddress = addressOf(require_json.record(payer?.address));
185
+ const shippingAddress = addressOf(require_json.record(shipping?.address));
186
+ const address = payerAddress?.line1 ? payerAddress : shippingAddress ?? payerAddress;
187
+ const name = personName(require_json.record(payer?.name), address?.country) ?? require_json.text(require_json.path(shipping, "name", "full_name"));
188
+ const email = require_json.text(payer?.email_address);
189
+ if (!name && !email && !address) return void 0;
190
+ return {
191
+ name,
192
+ email,
193
+ phone: require_json.text(require_json.path(payer, "phone", "phone_number", "national_number")),
194
+ address
195
+ };
196
+ }
197
+ function sameCurrency(values, currency) {
198
+ return values.every((value) => {
199
+ const code = require_json.text(require_json.record(value)?.currency_code);
200
+ return code === void 0 || require_webhook.normalizeCurrency(code) === currency;
201
+ });
202
+ }
203
+ function extraItem(value, name) {
204
+ const amount = moneyValue(value) ?? 0;
205
+ return amount > 0 ? [{
206
+ name,
207
+ quantity: 1,
208
+ totalGross: amount
209
+ }] : [];
210
+ }
211
+ function itemsOf(order, currency) {
212
+ const units = require_json.records(order?.purchase_units);
213
+ const unit = units[0];
214
+ if (!unit || units.length !== 1 || !currency) return void 0;
215
+ const breakdown = require_json.record(require_json.path(unit, "amount", "breakdown"));
216
+ const discount = (moneyValue(breakdown?.discount) ?? 0) + (moneyValue(breakdown?.shipping_discount) ?? 0);
217
+ const items = require_json.records(unit.items);
218
+ if (discount > 0 || items.length === 0) return void 0;
219
+ if ((moneyValue(breakdown?.tax_total) ?? 0) > 0 && !items.every((item) => require_json.record(item.tax))) return void 0;
220
+ if (!sameCurrency([
221
+ ...items.flatMap((item) => [item.unit_amount, item.tax]),
222
+ breakdown?.shipping,
223
+ breakdown?.handling,
224
+ breakdown?.insurance
225
+ ], currency)) return void 0;
226
+ return [
227
+ ...items.map((item) => {
228
+ const quantity = require_json.numeric(item.quantity) ?? 1;
229
+ const unitGross = (moneyValue(item.unit_amount) ?? 0) + (moneyValue(item.tax) ?? 0);
230
+ return {
231
+ name: require_json.text(item.name) ?? "Tétel",
232
+ quantity,
233
+ totalGross: require_rounding.roundMoney(unitGross * quantity, 2),
234
+ sku: require_json.text(item.sku)
235
+ };
236
+ }),
237
+ ...extraItem(breakdown?.shipping, PAYPAL_SHIPPING_ITEM_NAME),
238
+ ...extraItem(breakdown?.handling, PAYPAL_HANDLING_ITEM_NAME),
239
+ ...extraItem(breakdown?.insurance, PAYPAL_INSURANCE_ITEM_NAME)
240
+ ];
241
+ }
242
+ function orderRefOf(resource, order) {
243
+ const unit = require_json.records(order?.purchase_units)[0];
244
+ return require_json.text(resource.custom_id) ?? require_json.text(resource.invoice_id) ?? require_json.text(unit?.custom_id) ?? require_json.text(unit?.invoice_id) ?? require_json.text(unit?.reference_id);
245
+ }
246
+ function fromCapture(event, kind, options) {
247
+ const capture = event.resource;
248
+ const id = require_json.text(capture.id);
249
+ if (!id) throw new require_webhook.PaymentProviderError("paypal", "A PayPal capture eseményből hiányzik az id.");
250
+ const amount = moneyOf(capture.amount);
251
+ const status = require_json.text(capture.status);
252
+ return {
253
+ provider: "paypal",
254
+ kind: kind === "paid" && status !== void 0 && status !== "COMPLETED" ? "other" : kind,
255
+ id,
256
+ eventId: event.id,
257
+ eventType: event.eventType,
258
+ orderRef: orderRefOf(capture, options.order),
259
+ amount,
260
+ paidAt: require_json.text(capture.create_time) ?? event.createTime,
261
+ method: options.method ?? "PayPal",
262
+ customer: customerOf(options.order),
263
+ items: kind === "paid" ? itemsOf(options.order, amount?.currency) : void 0,
264
+ raw: event.raw
265
+ };
266
+ }
267
+ function refundKind(refund, capture) {
268
+ if (require_json.text(refund.status) !== "COMPLETED") return "other";
269
+ const refunded = moneyValue(refund.amount);
270
+ const captured = moneyValue(capture?.amount);
271
+ if (refunded === void 0 || captured === void 0) return "partially-refunded";
272
+ return Math.abs(refunded - captured) <= AMOUNT_TOLERANCE ? "refunded" : "partially-refunded";
273
+ }
274
+ function fromRefund(event, options) {
275
+ const refund = event.resource;
276
+ const captureId = payPalCaptureIdOfRefund(refund);
277
+ if (!captureId) throw new require_webhook.PaymentProviderError("paypal", "A PayPal visszatérítésből nem olvasható ki az eredeti capture azonosítója.");
278
+ const capture = options.capture && require_json.text(options.capture.id) === captureId ? options.capture : void 0;
279
+ return {
280
+ provider: "paypal",
281
+ kind: refundKind(refund, capture),
282
+ id: captureId,
283
+ eventId: event.id,
284
+ eventType: event.eventType,
285
+ orderRef: orderRefOf(refund, void 0) ?? (capture ? orderRefOf(capture, void 0) : void 0),
286
+ amount: moneyOf(capture?.amount),
287
+ refundedAmount: moneyOf(require_json.path(refund, "seller_payable_breakdown", "total_refunded_amount")) ?? moneyOf(refund.amount),
288
+ paidAt: require_json.text(refund.create_time) ?? event.createTime,
289
+ method: options.method ?? "PayPal",
290
+ raw: event.raw
291
+ };
292
+ }
293
+ function payPalPaymentEvent(event, options = {}) {
294
+ switch (event.eventType) {
295
+ case "PAYMENT.CAPTURE.COMPLETED": return fromCapture(event, "paid", options);
296
+ case "PAYMENT.CAPTURE.DENIED":
297
+ case "PAYMENT.CAPTURE.DECLINED": return fromCapture(event, "failed", options);
298
+ case "PAYMENT.CAPTURE.PENDING": return fromCapture(event, "other", options);
299
+ case "PAYMENT.CAPTURE.REFUNDED": return fromRefund(event, options);
300
+ default: return;
301
+ }
302
+ }
303
+ async function loadExtras(event, api, options) {
304
+ if (event.eventType === "PAYMENT.CAPTURE.REFUNDED") {
305
+ const captureId = payPalCaptureIdOfRefund(event.resource);
306
+ if (!captureId) return {};
307
+ return { capture: await api.get(`/v2/payments/captures/${encodeURIComponent(captureId)}`) };
308
+ }
309
+ if (event.eventType !== "PAYMENT.CAPTURE.COMPLETED" || options.fetchOrder === false) return {};
310
+ const orderId = payPalOrderIdOfCapture(event.resource);
311
+ if (!orderId) return {};
312
+ return { order: await api.get(`/v2/checkout/orders/${encodeURIComponent(orderId)}`) };
313
+ }
314
+ function payPalWebhook(options) {
315
+ const webhookId = options.webhookId?.trim();
316
+ if (!webhookId) throw new TypeError("Add meg a PayPal webhook azonosítóját (webhookId).");
317
+ const api = payPalApi({
318
+ clientId: options.clientId,
319
+ clientSecret: options.clientSecret,
320
+ sandbox: options.sandbox,
321
+ apiUrl: options.apiUrl,
322
+ fetch: options.fetch
323
+ });
324
+ return (request) => require_webhook.respondToWebhook(options, async () => {
325
+ const payload = await require_webhook.readRawBody(request, "paypal", options.maxBodyBytes);
326
+ await verifyPayPalWebhook(payload, request.headers, webhookId, api);
327
+ const event = parsePayPalEvent(payload);
328
+ const extras = await loadExtras(event, api, options);
329
+ const payment = payPalPaymentEvent(event, {
330
+ method: options.method,
331
+ ...extras
332
+ });
333
+ if (payment) await options.onPayment(payment);
334
+ return require_webhook.plainResponse(200, "OK");
335
+ });
336
+ }
337
+ //#endregion
338
+ exports.PAYPAL_HANDLING_ITEM_NAME = PAYPAL_HANDLING_ITEM_NAME;
339
+ exports.PAYPAL_INSURANCE_ITEM_NAME = PAYPAL_INSURANCE_ITEM_NAME;
340
+ exports.PAYPAL_LIVE_API_URL = PAYPAL_LIVE_API_URL;
341
+ exports.PAYPAL_METHOD = PAYPAL_METHOD;
342
+ exports.PAYPAL_SANDBOX_API_URL = PAYPAL_SANDBOX_API_URL;
343
+ exports.PAYPAL_SHIPPING_ITEM_NAME = PAYPAL_SHIPPING_ITEM_NAME;
344
+ exports.parsePayPalEvent = parsePayPalEvent;
345
+ exports.payPalApi = payPalApi;
346
+ exports.payPalCaptureIdOfRefund = payPalCaptureIdOfRefund;
347
+ exports.payPalOrderIdOfCapture = payPalOrderIdOfCapture;
348
+ exports.payPalPaymentEvent = payPalPaymentEvent;
349
+ exports.payPalTransmission = payPalTransmission;
350
+ exports.payPalWebhook = payPalWebhook;
351
+ exports.verifyPayPalWebhook = verifyPayPalWebhook;
@@ -0,0 +1,59 @@
1
+ import { i as PaymentEvent, l as PaymentWebhookBaseOptions } from "../types-BVeR7KyU.cjs";
2
+ import { t as JsonRecord } from "../json-B70TwoX1.cjs";
3
+ import { t as WebhookHandler } from "../webhook-CpMJuP6c.cjs";
4
+ //#region src/payments/paypal.d.ts
5
+ export declare const PAYPAL_LIVE_API_URL = "https://api-m.paypal.com";
6
+ export declare const PAYPAL_SANDBOX_API_URL = "https://api-m.sandbox.paypal.com";
7
+ export declare const PAYPAL_METHOD = "PayPal";
8
+ export declare const PAYPAL_SHIPPING_ITEM_NAME = "Szállítási díj";
9
+ export declare const PAYPAL_HANDLING_ITEM_NAME = "Kezelési díj";
10
+ export declare const PAYPAL_INSURANCE_ITEM_NAME = "Biztosítás";
11
+ export interface PayPalApiOptions {
12
+ readonly clientId: string;
13
+ readonly clientSecret: string;
14
+ readonly sandbox?: boolean | undefined;
15
+ readonly apiUrl?: string | undefined;
16
+ readonly fetch?: typeof globalThis.fetch | undefined;
17
+ readonly now?: (() => number) | undefined;
18
+ }
19
+ export interface PayPalApi {
20
+ get(pathname: string): Promise<JsonRecord>;
21
+ post(pathname: string, body: string): Promise<JsonRecord>;
22
+ }
23
+ export declare function payPalApi(options: PayPalApiOptions): PayPalApi;
24
+ export interface PayPalTransmission {
25
+ readonly authAlgo: string;
26
+ readonly certUrl: string;
27
+ readonly transmissionId: string;
28
+ readonly transmissionSig: string;
29
+ readonly transmissionTime: string;
30
+ }
31
+ export declare function payPalTransmission(headers: Headers): PayPalTransmission | undefined;
32
+ export declare function verifyPayPalWebhook(payload: string, headers: Headers, webhookId: string, api: PayPalApi): Promise<void>;
33
+ export interface PayPalEvent {
34
+ readonly id: string;
35
+ readonly eventType: string;
36
+ readonly resourceType?: string | undefined;
37
+ readonly createTime?: string | undefined;
38
+ readonly resource: JsonRecord;
39
+ readonly raw: JsonRecord;
40
+ }
41
+ export declare function parsePayPalEvent(payload: string): PayPalEvent;
42
+ export declare function payPalCaptureIdOfRefund(refund: JsonRecord): string | undefined;
43
+ export declare function payPalOrderIdOfCapture(capture: JsonRecord): string | undefined;
44
+ export interface PayPalPaymentOptions {
45
+ readonly method?: string | undefined;
46
+ readonly order?: JsonRecord | undefined;
47
+ readonly capture?: JsonRecord | undefined;
48
+ }
49
+ export declare function payPalPaymentEvent(event: PayPalEvent, options?: PayPalPaymentOptions): PaymentEvent | undefined;
50
+ export interface PayPalWebhookOptions extends PaymentWebhookBaseOptions {
51
+ readonly webhookId: string;
52
+ readonly clientId: string;
53
+ readonly clientSecret: string;
54
+ readonly sandbox?: boolean | undefined;
55
+ readonly apiUrl?: string | undefined;
56
+ readonly fetchOrder?: boolean | undefined;
57
+ }
58
+ export declare function payPalWebhook(options: PayPalWebhookOptions): WebhookHandler;
59
+ //#endregion
@@ -0,0 +1,59 @@
1
+ import { i as PaymentEvent, l as PaymentWebhookBaseOptions } from "../types-BVeR7KyU.js";
2
+ import { t as JsonRecord } from "../json-B70TwoX1.js";
3
+ import { t as WebhookHandler } from "../webhook-CpCMHhn2.js";
4
+ //#region src/payments/paypal.d.ts
5
+ export declare const PAYPAL_LIVE_API_URL = "https://api-m.paypal.com";
6
+ export declare const PAYPAL_SANDBOX_API_URL = "https://api-m.sandbox.paypal.com";
7
+ export declare const PAYPAL_METHOD = "PayPal";
8
+ export declare const PAYPAL_SHIPPING_ITEM_NAME = "Szállítási díj";
9
+ export declare const PAYPAL_HANDLING_ITEM_NAME = "Kezelési díj";
10
+ export declare const PAYPAL_INSURANCE_ITEM_NAME = "Biztosítás";
11
+ export interface PayPalApiOptions {
12
+ readonly clientId: string;
13
+ readonly clientSecret: string;
14
+ readonly sandbox?: boolean | undefined;
15
+ readonly apiUrl?: string | undefined;
16
+ readonly fetch?: typeof globalThis.fetch | undefined;
17
+ readonly now?: (() => number) | undefined;
18
+ }
19
+ export interface PayPalApi {
20
+ get(pathname: string): Promise<JsonRecord>;
21
+ post(pathname: string, body: string): Promise<JsonRecord>;
22
+ }
23
+ export declare function payPalApi(options: PayPalApiOptions): PayPalApi;
24
+ export interface PayPalTransmission {
25
+ readonly authAlgo: string;
26
+ readonly certUrl: string;
27
+ readonly transmissionId: string;
28
+ readonly transmissionSig: string;
29
+ readonly transmissionTime: string;
30
+ }
31
+ export declare function payPalTransmission(headers: Headers): PayPalTransmission | undefined;
32
+ export declare function verifyPayPalWebhook(payload: string, headers: Headers, webhookId: string, api: PayPalApi): Promise<void>;
33
+ export interface PayPalEvent {
34
+ readonly id: string;
35
+ readonly eventType: string;
36
+ readonly resourceType?: string | undefined;
37
+ readonly createTime?: string | undefined;
38
+ readonly resource: JsonRecord;
39
+ readonly raw: JsonRecord;
40
+ }
41
+ export declare function parsePayPalEvent(payload: string): PayPalEvent;
42
+ export declare function payPalCaptureIdOfRefund(refund: JsonRecord): string | undefined;
43
+ export declare function payPalOrderIdOfCapture(capture: JsonRecord): string | undefined;
44
+ export interface PayPalPaymentOptions {
45
+ readonly method?: string | undefined;
46
+ readonly order?: JsonRecord | undefined;
47
+ readonly capture?: JsonRecord | undefined;
48
+ }
49
+ export declare function payPalPaymentEvent(event: PayPalEvent, options?: PayPalPaymentOptions): PaymentEvent | undefined;
50
+ export interface PayPalWebhookOptions extends PaymentWebhookBaseOptions {
51
+ readonly webhookId: string;
52
+ readonly clientId: string;
53
+ readonly clientSecret: string;
54
+ readonly sandbox?: boolean | undefined;
55
+ readonly apiUrl?: string | undefined;
56
+ readonly fetchOrder?: boolean | undefined;
57
+ }
58
+ export declare function payPalWebhook(options: PayPalWebhookOptions): WebhookHandler;
59
+ //#endregion