@oleq-ai/pay 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs ADDED
@@ -0,0 +1,270 @@
1
+ // src/encode.ts
2
+ function encodePaymentData(payload) {
3
+ const json = JSON.stringify(payload);
4
+ const firstEncode = utf8ToBase64(json);
5
+ return utf8ToBase64(firstEncode);
6
+ }
7
+ function utf8ToBase64(input) {
8
+ const bytes = new TextEncoder().encode(input);
9
+ let binary = "";
10
+ bytes.forEach((byte) => {
11
+ binary += String.fromCharCode(byte);
12
+ });
13
+ return btoa(binary);
14
+ }
15
+ function buildCheckoutUrl(baseUrl, payload, options) {
16
+ const qp = encodePaymentData(payload);
17
+ const locale = options?.locale ?? "en";
18
+ const path = options?.path ?? "p";
19
+ const normalizedBase = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
20
+ const url = new URL(`${locale}/${path}`, normalizedBase);
21
+ url.searchParams.set("qp", qp);
22
+ return url.toString();
23
+ }
24
+
25
+ // src/errors.ts
26
+ var OleqPayCheckoutError = class extends Error {
27
+ constructor(message, code) {
28
+ super(message);
29
+ this.name = "OleqPayCheckoutError";
30
+ this.code = code;
31
+ }
32
+ };
33
+
34
+ // src/modal.ts
35
+ var OVERLAY_ID = "oleqpay-checkout-overlay";
36
+ function openCheckoutModal(url, onCloseRequested) {
37
+ removeExistingModal();
38
+ const overlay = document.createElement("div");
39
+ overlay.id = OVERLAY_ID;
40
+ Object.assign(overlay.style, {
41
+ position: "fixed",
42
+ inset: "0",
43
+ zIndex: "2147483000",
44
+ display: "flex",
45
+ alignItems: "center",
46
+ justifyContent: "center",
47
+ background: "rgba(15, 23, 42, 0.55)",
48
+ backdropFilter: "blur(2px)"
49
+ });
50
+ const panel = document.createElement("div");
51
+ Object.assign(panel.style, {
52
+ position: "relative",
53
+ width: "min(440px, calc(100vw - 32px))",
54
+ height: "min(720px, calc(100vh - 32px))",
55
+ borderRadius: "16px",
56
+ overflow: "hidden",
57
+ boxShadow: "0 20px 60px rgba(0,0,0,0.35)",
58
+ background: "#fff"
59
+ });
60
+ const closeBtn = document.createElement("button");
61
+ closeBtn.setAttribute("aria-label", "Close checkout");
62
+ closeBtn.textContent = "\xD7";
63
+ Object.assign(closeBtn.style, {
64
+ position: "absolute",
65
+ top: "8px",
66
+ right: "8px",
67
+ width: "32px",
68
+ height: "32px",
69
+ borderRadius: "9999px",
70
+ border: "none",
71
+ background: "rgba(0,0,0,0.06)",
72
+ fontSize: "20px",
73
+ lineHeight: "1",
74
+ cursor: "pointer",
75
+ zIndex: "1"
76
+ });
77
+ closeBtn.onclick = () => onCloseRequested();
78
+ const iframe = document.createElement("iframe");
79
+ iframe.src = url;
80
+ iframe.title = "OleqPay Checkout";
81
+ iframe.setAttribute(
82
+ "allow",
83
+ "payment *; clipboard-write; camera; publickey-credentials-get"
84
+ );
85
+ Object.assign(iframe.style, {
86
+ width: "100%",
87
+ height: "100%",
88
+ border: "0"
89
+ });
90
+ panel.appendChild(closeBtn);
91
+ panel.appendChild(iframe);
92
+ overlay.appendChild(panel);
93
+ document.body.appendChild(overlay);
94
+ document.body.style.overflow = "hidden";
95
+ const onKeydown = (e) => {
96
+ if (e.key === "Escape") onCloseRequested();
97
+ };
98
+ window.addEventListener("keydown", onKeydown);
99
+ return {
100
+ iframe,
101
+ close: () => {
102
+ window.removeEventListener("keydown", onKeydown);
103
+ document.body.style.overflow = "";
104
+ overlay.remove();
105
+ }
106
+ };
107
+ }
108
+ function removeExistingModal() {
109
+ const existing = document.getElementById(OVERLAY_ID);
110
+ if (!existing) return;
111
+ existing.remove();
112
+ document.body.style.overflow = "";
113
+ }
114
+
115
+ // src/api-key.ts
116
+ function assertPublicApiKey(apikey) {
117
+ if (!apikey) {
118
+ throw new OleqPayCheckoutError(
119
+ "OleqPayCheckout: apikey is required.",
120
+ "invalid_api_key"
121
+ );
122
+ }
123
+ if (apikey.startsWith("sk_")) {
124
+ throw new OleqPayCheckoutError(
125
+ "OleqPayCheckout: this looks like a secret key (sk_\u2026). Only public keys belong in browser code \u2014 mint a session server-side with buildUrl() and pass the resulting URL to openIframe()/redirect() instead.",
126
+ "invalid_api_key"
127
+ );
128
+ }
129
+ }
130
+
131
+ // src/payload.ts
132
+ function assertValidPayload(payload) {
133
+ assertPublicApiKey(payload.apikey);
134
+ if (payload.apikey.length < 10) {
135
+ throw new OleqPayCheckoutError(
136
+ "OleqPayCheckout: apikey must be at least 10 characters.",
137
+ "invalid_api_key"
138
+ );
139
+ }
140
+ if (payload.orderid === void 0 || payload.orderid === "") {
141
+ throw new OleqPayCheckoutError(
142
+ "OleqPayCheckout: orderid is required \u2014 the checkout page rejects payloads without it.",
143
+ "invalid_payload"
144
+ );
145
+ }
146
+ if (!payload.reference) {
147
+ throw new OleqPayCheckoutError(
148
+ "OleqPayCheckout: reference is required \u2014 the checkout page rejects payloads without it.",
149
+ "invalid_payload"
150
+ );
151
+ }
152
+ const amountValue = typeof payload.amount === "number" ? payload.amount : parseFloat(payload.amount);
153
+ if (!Number.isFinite(amountValue) || amountValue <= 0) {
154
+ throw new OleqPayCheckoutError(
155
+ "OleqPayCheckout: amount must be a number greater than 0.",
156
+ "invalid_payload"
157
+ );
158
+ }
159
+ if (payload.callbackurl && !isValidUrl(payload.callbackurl)) {
160
+ throw new OleqPayCheckoutError(
161
+ "OleqPayCheckout: callbackurl must be a valid URL.",
162
+ "invalid_payload"
163
+ );
164
+ }
165
+ if (payload.returnurl && !isValidUrl(payload.returnurl)) {
166
+ throw new OleqPayCheckoutError(
167
+ "OleqPayCheckout: returnurl must be a valid URL.",
168
+ "invalid_payload"
169
+ );
170
+ }
171
+ }
172
+ function isValidUrl(value) {
173
+ try {
174
+ new URL(value);
175
+ return true;
176
+ } catch {
177
+ return false;
178
+ }
179
+ }
180
+
181
+ // src/types.ts
182
+ var DEFAULT_CHECKOUT_BASE_URL = "https://my.olefi.co";
183
+
184
+ // src/client.ts
185
+ var OleqPayCheckout = class {
186
+ constructor(options = {}) {
187
+ this.activeModal = null;
188
+ this.messageHandler = null;
189
+ this.checkoutBaseUrl = options.checkoutBaseUrl ?? DEFAULT_CHECKOUT_BASE_URL;
190
+ this.locale = options.locale ?? "en";
191
+ }
192
+ /**
193
+ * Build a hosted-checkout URL from a payload.
194
+ * Safe on the server (no DOM) — use this to mint session URLs in Nest/backends.
195
+ */
196
+ buildUrl(payload) {
197
+ assertValidPayload(payload);
198
+ return buildCheckoutUrl(this.checkoutBaseUrl, payload, {
199
+ locale: this.locale
200
+ });
201
+ }
202
+ /** Opens checkout in a modal iframe. Accepts either a raw payload or a pre-built session URL. */
203
+ openIframe(payloadOrUrl, options = {}) {
204
+ if (typeof window === "undefined") {
205
+ throw new OleqPayCheckoutError(
206
+ "OleqPayCheckout.openIframe() can only run in a browser.",
207
+ "ssr_unsupported"
208
+ );
209
+ }
210
+ this.close();
211
+ const url = this.resolveUrl(payloadOrUrl);
212
+ const targetOrigin = new URL(url).origin;
213
+ const onUserClose = () => {
214
+ this.close();
215
+ options.onClose?.();
216
+ };
217
+ this.activeModal = openCheckoutModal(url, onUserClose);
218
+ this.messageHandler = (event) => {
219
+ if (event.origin !== targetOrigin) return;
220
+ const data = event.data;
221
+ if (!data || typeof data !== "object" || !("type" in data)) return;
222
+ switch (data.type) {
223
+ case "oleqpay:success":
224
+ options.onSuccess?.(data);
225
+ this.close();
226
+ break;
227
+ case "oleqpay:failed":
228
+ options.onError?.(data);
229
+ break;
230
+ case "oleqpay:close":
231
+ onUserClose();
232
+ break;
233
+ default:
234
+ break;
235
+ }
236
+ };
237
+ window.addEventListener("message", this.messageHandler);
238
+ }
239
+ /** Full-page redirect to hosted checkout — mirrors Stripe Checkout / Paystack redirect flow. */
240
+ redirect(payloadOrUrl) {
241
+ if (typeof window === "undefined") {
242
+ throw new OleqPayCheckoutError(
243
+ "OleqPayCheckout.redirect() can only run in a browser.",
244
+ "ssr_unsupported"
245
+ );
246
+ }
247
+ window.location.href = this.resolveUrl(payloadOrUrl);
248
+ }
249
+ /** Programmatically close an open iframe modal. */
250
+ close() {
251
+ this.activeModal?.close();
252
+ this.teardown();
253
+ }
254
+ resolveUrl(payloadOrUrl) {
255
+ if (typeof payloadOrUrl === "string") return payloadOrUrl;
256
+ return this.buildUrl(payloadOrUrl);
257
+ }
258
+ teardown() {
259
+ if (this.messageHandler) {
260
+ window.removeEventListener("message", this.messageHandler);
261
+ this.messageHandler = null;
262
+ }
263
+ this.activeModal = null;
264
+ }
265
+ };
266
+ export {
267
+ OleqPayCheckout,
268
+ OleqPayCheckoutError,
269
+ OleqPayCheckout as default
270
+ };
@@ -0,0 +1,19 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { OleqPayCheckoutOptions, OleqPayCheckout } from '@oleq-ai/pay';
3
+
4
+ declare const OLEQPAY_CHECKOUT_OPTIONS: unique symbol;
5
+ type OleqPayCheckoutModuleOptions = OleqPayCheckoutOptions;
6
+ type OleqPayCheckoutModuleAsyncOptions = {
7
+ useFactory: (...args: any[]) => OleqPayCheckoutModuleOptions | Promise<OleqPayCheckoutModuleOptions>;
8
+ inject?: any[];
9
+ };
10
+ declare function createOleqPayCheckout(options?: OleqPayCheckoutModuleOptions): OleqPayCheckout;
11
+
12
+ declare class OleqPayCheckoutModule {
13
+ /** Register with static options (checkoutBaseUrl/locale), or empty for the defaults. */
14
+ static forRoot(options?: OleqPayCheckoutModuleOptions): DynamicModule;
15
+ /** Register with Nest config / async factory. */
16
+ static forRootAsync(options: OleqPayCheckoutModuleAsyncOptions): DynamicModule;
17
+ }
18
+
19
+ export { OLEQPAY_CHECKOUT_OPTIONS, OleqPayCheckoutModule, type OleqPayCheckoutModuleAsyncOptions, type OleqPayCheckoutModuleOptions, createOleqPayCheckout };
@@ -0,0 +1,19 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { OleqPayCheckoutOptions, OleqPayCheckout } from '@oleq-ai/pay';
3
+
4
+ declare const OLEQPAY_CHECKOUT_OPTIONS: unique symbol;
5
+ type OleqPayCheckoutModuleOptions = OleqPayCheckoutOptions;
6
+ type OleqPayCheckoutModuleAsyncOptions = {
7
+ useFactory: (...args: any[]) => OleqPayCheckoutModuleOptions | Promise<OleqPayCheckoutModuleOptions>;
8
+ inject?: any[];
9
+ };
10
+ declare function createOleqPayCheckout(options?: OleqPayCheckoutModuleOptions): OleqPayCheckout;
11
+
12
+ declare class OleqPayCheckoutModule {
13
+ /** Register with static options (checkoutBaseUrl/locale), or empty for the defaults. */
14
+ static forRoot(options?: OleqPayCheckoutModuleOptions): DynamicModule;
15
+ /** Register with Nest config / async factory. */
16
+ static forRootAsync(options: OleqPayCheckoutModuleAsyncOptions): DynamicModule;
17
+ }
18
+
19
+ export { OLEQPAY_CHECKOUT_OPTIONS, OleqPayCheckoutModule, type OleqPayCheckoutModuleAsyncOptions, type OleqPayCheckoutModuleOptions, createOleqPayCheckout };
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
8
+ var __typeError = (msg) => {
9
+ throw TypeError(msg);
10
+ };
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
27
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
28
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
29
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
30
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
31
+ var __runInitializers = (array, flags, self, value) => {
32
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
33
+ return value;
34
+ };
35
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
36
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
37
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
38
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
39
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
40
+ return __privateGet(this, extra);
41
+ }, set [name](x) {
42
+ return __privateSet(this, extra, x);
43
+ } }, name));
44
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
45
+ for (var i = decorators.length - 1; i >= 0; i--) {
46
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
47
+ if (k) {
48
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
49
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
50
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
51
+ }
52
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
53
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
54
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
55
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
56
+ }
57
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
58
+ };
59
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
60
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
61
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
62
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
63
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
64
+
65
+ // src/nest/index.ts
66
+ var index_exports = {};
67
+ __export(index_exports, {
68
+ OLEQPAY_CHECKOUT_OPTIONS: () => OLEQPAY_CHECKOUT_OPTIONS,
69
+ OleqPayCheckoutModule: () => OleqPayCheckoutModule,
70
+ createOleqPayCheckout: () => createOleqPayCheckout
71
+ });
72
+ module.exports = __toCommonJS(index_exports);
73
+
74
+ // src/nest/module.ts
75
+ var import_common = require("@nestjs/common");
76
+ var import_pay2 = require("@oleq-ai/pay");
77
+
78
+ // src/nest/options.ts
79
+ var import_pay = require("@oleq-ai/pay");
80
+ var OLEQPAY_CHECKOUT_OPTIONS = /* @__PURE__ */ Symbol("OLEQPAY_CHECKOUT_OPTIONS");
81
+ function createOleqPayCheckout(options = {}) {
82
+ return new import_pay.OleqPayCheckout(options);
83
+ }
84
+
85
+ // src/nest/module.ts
86
+ var _OleqPayCheckoutModule_decorators, _init;
87
+ _OleqPayCheckoutModule_decorators = [(0, import_common.Module)({})];
88
+ var _OleqPayCheckoutModule = class _OleqPayCheckoutModule {
89
+ /** Register with static options (checkoutBaseUrl/locale), or empty for the defaults. */
90
+ static forRoot(options = {}) {
91
+ const optionsProvider = {
92
+ provide: OLEQPAY_CHECKOUT_OPTIONS,
93
+ useValue: options
94
+ };
95
+ return {
96
+ module: _OleqPayCheckoutModule,
97
+ providers: [optionsProvider, oleqPayCheckoutProvider],
98
+ exports: [import_pay2.OleqPayCheckout]
99
+ };
100
+ }
101
+ /** Register with Nest config / async factory. */
102
+ static forRootAsync(options) {
103
+ const optionsProvider = {
104
+ provide: OLEQPAY_CHECKOUT_OPTIONS,
105
+ useFactory: options.useFactory,
106
+ inject: options.inject ?? []
107
+ };
108
+ return {
109
+ module: _OleqPayCheckoutModule,
110
+ providers: [optionsProvider, oleqPayCheckoutProvider],
111
+ exports: [import_pay2.OleqPayCheckout]
112
+ };
113
+ }
114
+ };
115
+ _init = __decoratorStart(null);
116
+ _OleqPayCheckoutModule = __decorateElement(_init, 0, "OleqPayCheckoutModule", _OleqPayCheckoutModule_decorators, _OleqPayCheckoutModule);
117
+ __runInitializers(_init, 1, _OleqPayCheckoutModule);
118
+ var OleqPayCheckoutModule = _OleqPayCheckoutModule;
119
+ var oleqPayCheckoutProvider = {
120
+ provide: import_pay2.OleqPayCheckout,
121
+ useFactory: (opts) => createOleqPayCheckout(opts),
122
+ inject: [OLEQPAY_CHECKOUT_OPTIONS]
123
+ };
124
+ // Annotate the CommonJS export names for ESM import in node:
125
+ 0 && (module.exports = {
126
+ OLEQPAY_CHECKOUT_OPTIONS,
127
+ OleqPayCheckoutModule,
128
+ createOleqPayCheckout
129
+ });
@@ -0,0 +1,105 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
5
+ var __typeError = (msg) => {
6
+ throw TypeError(msg);
7
+ };
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
11
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
12
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
13
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
14
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
15
+ var __runInitializers = (array, flags, self, value) => {
16
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
17
+ return value;
18
+ };
19
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
20
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
21
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
22
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
23
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
24
+ return __privateGet(this, extra);
25
+ }, set [name](x) {
26
+ return __privateSet(this, extra, x);
27
+ } }, name));
28
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
29
+ for (var i = decorators.length - 1; i >= 0; i--) {
30
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
31
+ if (k) {
32
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
33
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
34
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
35
+ }
36
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
37
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
38
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
39
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
40
+ }
41
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
42
+ };
43
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
44
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
45
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
46
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
47
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
48
+
49
+ // src/nest/module.ts
50
+ import { Module } from "@nestjs/common";
51
+ import { OleqPayCheckout as OleqPayCheckout2 } from "@oleq-ai/pay";
52
+
53
+ // src/nest/options.ts
54
+ import {
55
+ OleqPayCheckout
56
+ } from "@oleq-ai/pay";
57
+ var OLEQPAY_CHECKOUT_OPTIONS = /* @__PURE__ */ Symbol("OLEQPAY_CHECKOUT_OPTIONS");
58
+ function createOleqPayCheckout(options = {}) {
59
+ return new OleqPayCheckout(options);
60
+ }
61
+
62
+ // src/nest/module.ts
63
+ var _OleqPayCheckoutModule_decorators, _init;
64
+ _OleqPayCheckoutModule_decorators = [Module({})];
65
+ var _OleqPayCheckoutModule = class _OleqPayCheckoutModule {
66
+ /** Register with static options (checkoutBaseUrl/locale), or empty for the defaults. */
67
+ static forRoot(options = {}) {
68
+ const optionsProvider = {
69
+ provide: OLEQPAY_CHECKOUT_OPTIONS,
70
+ useValue: options
71
+ };
72
+ return {
73
+ module: _OleqPayCheckoutModule,
74
+ providers: [optionsProvider, oleqPayCheckoutProvider],
75
+ exports: [OleqPayCheckout2]
76
+ };
77
+ }
78
+ /** Register with Nest config / async factory. */
79
+ static forRootAsync(options) {
80
+ const optionsProvider = {
81
+ provide: OLEQPAY_CHECKOUT_OPTIONS,
82
+ useFactory: options.useFactory,
83
+ inject: options.inject ?? []
84
+ };
85
+ return {
86
+ module: _OleqPayCheckoutModule,
87
+ providers: [optionsProvider, oleqPayCheckoutProvider],
88
+ exports: [OleqPayCheckout2]
89
+ };
90
+ }
91
+ };
92
+ _init = __decoratorStart(null);
93
+ _OleqPayCheckoutModule = __decorateElement(_init, 0, "OleqPayCheckoutModule", _OleqPayCheckoutModule_decorators, _OleqPayCheckoutModule);
94
+ __runInitializers(_init, 1, _OleqPayCheckoutModule);
95
+ var OleqPayCheckoutModule = _OleqPayCheckoutModule;
96
+ var oleqPayCheckoutProvider = {
97
+ provide: OleqPayCheckout2,
98
+ useFactory: (opts) => createOleqPayCheckout(opts),
99
+ inject: [OLEQPAY_CHECKOUT_OPTIONS]
100
+ };
101
+ export {
102
+ OLEQPAY_CHECKOUT_OPTIONS,
103
+ OleqPayCheckoutModule,
104
+ createOleqPayCheckout
105
+ };
@@ -0,0 +1,51 @@
1
+ interface CheckoutPayload {
2
+ apikey: string;
3
+ amount: string | number;
4
+ orderid: string | number;
5
+ reference: string;
6
+ callbackurl?: string;
7
+ returnurl?: string;
8
+ }
9
+ type CheckoutEvent = {
10
+ type: 'oleqpay:ready';
11
+ } | {
12
+ type: 'oleqpay:success';
13
+ vreference: string;
14
+ amount?: string;
15
+ } | {
16
+ type: 'oleqpay:failed';
17
+ vreference?: string;
18
+ message?: string;
19
+ } | {
20
+ type: 'oleqpay:close';
21
+ };
22
+ type OleqPayCheckoutOptions = {
23
+ checkoutBaseUrl?: string;
24
+ locale?: string;
25
+ };
26
+
27
+ type UseOleqPayCheckoutOptions = OleqPayCheckoutOptions & {
28
+ /** Called once the checkout iframe confirms the payment succeeded. */
29
+ onSuccess?: (event: Extract<CheckoutEvent, {
30
+ type: 'oleqpay:success';
31
+ }>) => void;
32
+ /** Called if the payment fails or is cancelled inside the checkout flow. */
33
+ onError?: (event: Extract<CheckoutEvent, {
34
+ type: 'oleqpay:failed';
35
+ }>) => void;
36
+ };
37
+ type OleqPayCheckoutResult = {
38
+ /** Open checkout in a modal iframe. */
39
+ openIframe: (payloadOrUrl: CheckoutPayload | string) => void;
40
+ /** Full-page redirect to hosted checkout. */
41
+ redirect: (payloadOrUrl: CheckoutPayload | string) => void;
42
+ /** Programmatically close an open modal. */
43
+ close: () => void;
44
+ isOpen: boolean;
45
+ error: string | null;
46
+ clearError: () => void;
47
+ };
48
+ /** React wrapper around {@link OleqPayCheckout} — modal lifecycle as state. */
49
+ declare function useOleqPayCheckout(options?: UseOleqPayCheckoutOptions): OleqPayCheckoutResult;
50
+
51
+ export { type OleqPayCheckoutResult, type UseOleqPayCheckoutOptions, useOleqPayCheckout };
@@ -0,0 +1,51 @@
1
+ interface CheckoutPayload {
2
+ apikey: string;
3
+ amount: string | number;
4
+ orderid: string | number;
5
+ reference: string;
6
+ callbackurl?: string;
7
+ returnurl?: string;
8
+ }
9
+ type CheckoutEvent = {
10
+ type: 'oleqpay:ready';
11
+ } | {
12
+ type: 'oleqpay:success';
13
+ vreference: string;
14
+ amount?: string;
15
+ } | {
16
+ type: 'oleqpay:failed';
17
+ vreference?: string;
18
+ message?: string;
19
+ } | {
20
+ type: 'oleqpay:close';
21
+ };
22
+ type OleqPayCheckoutOptions = {
23
+ checkoutBaseUrl?: string;
24
+ locale?: string;
25
+ };
26
+
27
+ type UseOleqPayCheckoutOptions = OleqPayCheckoutOptions & {
28
+ /** Called once the checkout iframe confirms the payment succeeded. */
29
+ onSuccess?: (event: Extract<CheckoutEvent, {
30
+ type: 'oleqpay:success';
31
+ }>) => void;
32
+ /** Called if the payment fails or is cancelled inside the checkout flow. */
33
+ onError?: (event: Extract<CheckoutEvent, {
34
+ type: 'oleqpay:failed';
35
+ }>) => void;
36
+ };
37
+ type OleqPayCheckoutResult = {
38
+ /** Open checkout in a modal iframe. */
39
+ openIframe: (payloadOrUrl: CheckoutPayload | string) => void;
40
+ /** Full-page redirect to hosted checkout. */
41
+ redirect: (payloadOrUrl: CheckoutPayload | string) => void;
42
+ /** Programmatically close an open modal. */
43
+ close: () => void;
44
+ isOpen: boolean;
45
+ error: string | null;
46
+ clearError: () => void;
47
+ };
48
+ /** React wrapper around {@link OleqPayCheckout} — modal lifecycle as state. */
49
+ declare function useOleqPayCheckout(options?: UseOleqPayCheckoutOptions): OleqPayCheckoutResult;
50
+
51
+ export { type OleqPayCheckoutResult, type UseOleqPayCheckoutOptions, useOleqPayCheckout };