remita-inline 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 +308 -0
- package/dist/index.cjs +371 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +102 -0
- package/dist/index.d.ts +102 -0
- package/dist/index.js +360 -0
- package/dist/index.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/constant.ts","../src/utils/once.ts","../src/utils/errors.ts","../src/core/loader.ts","../src/core/engine.ts","../src/core/validator.ts","../src/core/payment.ts","../src/hooks/useRemitaInline.ts","../src/components/RemitaPayButton.tsx"],"names":["isBrowserEnvironment","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["export const REMITA_SCRIPT_ID = \"remita-inline-sdk\";\n\nexport const REMITA_PRODUCTION_SCRIPT_URL =\n \"https://login.remita.net/payment/v1/remita-pay-inline.bundle.js\";\n\nexport const REMITA_DEMO_SCRIPT_URL =\n \"https://demo.remita.net/payment/v1/remita-pay-inline.bundle.js\";\n\nexport const REMITA_SCRIPT_URL = REMITA_PRODUCTION_SCRIPT_URL;\n\nexport const REMITA_ENGINE = \"RmPaymentEngine\";\n","let promise: Promise<void> | null = null;\n\nexport function getPromise() {\n return promise;\n}\n\nexport function setPromise(value: Promise<void>) {\n promise = value;\n}\n\nexport function clearPromise() {\n promise = null;\n}\n","export class RemitaError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"RemitaError\";\n }\n}\n\nexport class ValidationError extends RemitaError {\n constructor(message: string) {\n super(message);\n this.name = \"ValidationError\";\n }\n}\n\nexport class ScriptLoadError extends RemitaError {\n constructor(message: string) {\n super(message);\n this.name = \"ScriptLoadError\";\n }\n}\n\nexport class EngineError extends RemitaError {\n constructor(message: string) {\n super(message);\n this.name = \"EngineError\";\n }\n}\n","import {\n\tREMITA_DEMO_SCRIPT_URL,\n\tREMITA_ENGINE,\n\tREMITA_PRODUCTION_SCRIPT_URL,\n\tREMITA_SCRIPT_ID,\n\tREMITA_SCRIPT_URL,\n} from \"./constant\";\nimport { clearPromise, getPromise, setPromise } from \"../utils/once\";\nimport { ScriptLoadError } from \"../utils/errors\";\nimport type { RemitaGlobalWindow } from \"../types\";\nimport type { RemitaLibraryOptions } from \"../types/public\";\n\nfunction isBrowserEnvironment(): boolean {\n\treturn typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\nfunction getEngine(win: RemitaGlobalWindow): unknown {\n\treturn win[REMITA_ENGINE as keyof RemitaGlobalWindow];\n}\n\nfunction resolveScriptUrl(options: RemitaLibraryOptions): string {\n\tif (options.scriptUrl) {\n\t\treturn options.scriptUrl;\n\t}\n\n\tif (options.environment === \"demo\") {\n\t\treturn REMITA_DEMO_SCRIPT_URL;\n\t}\n\n\tif (options.environment === \"production\") {\n\t\treturn REMITA_PRODUCTION_SCRIPT_URL;\n\t}\n\n\treturn REMITA_SCRIPT_URL;\n}\n\nfunction waitForExistingScript(\n\tscript: HTMLScriptElement,\n\ttimeoutMs: number,\n\twin: RemitaGlobalWindow,\n): Promise<void> {\n\tif (script.dataset.loaded === \"true\" && getEngine(win)) {\n\t\treturn Promise.resolve();\n\t}\n\n\treturn new Promise<void>((resolve, reject) => {\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\tconst onLoad = () => {\n\t\t\tcleanup();\n\t\t\tscript.dataset.loaded = \"true\";\n\n\t\t\tif (!getEngine(win)) {\n\t\t\t\treject(new ScriptLoadError(\"Remita script loaded but payment engine is unavailable.\"));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve();\n\t\t};\n\n\t\tconst onError = () => {\n\t\t\tcleanup();\n\t\t\treject(new ScriptLoadError(\"Failed to load Remita script.\"));\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tscript.removeEventListener(\"load\", onLoad);\n\t\t\tscript.removeEventListener(\"error\", onError);\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t}\n\t\t};\n\n\t\tscript.addEventListener(\"load\", onLoad, { once: true });\n\t\tscript.addEventListener(\"error\", onError, { once: true });\n\n\t\ttimeoutId = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\treject(new ScriptLoadError(`Timed out waiting for Remita script after ${timeoutMs}ms.`));\n\t\t}, timeoutMs);\n\t});\n}\n\nfunction createAndLoadScript(\n\tscriptId: string,\n\tscriptUrl: string,\n\ttimeoutMs: number,\n\tnonce?: string,\n): Promise<void> {\n\tconst win = window as RemitaGlobalWindow;\n\n\treturn new Promise<void>((resolve, reject) => {\n\t\tconst script = document.createElement(\"script\");\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n\t\tscript.id = scriptId;\n\t\tscript.src = scriptUrl;\n\t\tscript.async = true;\n\n\t\tif (nonce) {\n\t\t\tscript.nonce = nonce;\n\t\t}\n\n\t\tconst onLoad = () => {\n\t\t\tcleanup();\n\t\t\tscript.dataset.loaded = \"true\";\n\n\t\t\tif (!getEngine(win)) {\n\t\t\t\treject(new ScriptLoadError(\"Remita script loaded but payment engine is unavailable.\"));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve();\n\t\t};\n\n\t\tconst onError = () => {\n\t\t\tcleanup();\n\t\t\treject(new ScriptLoadError(\"Failed to load Remita script.\"));\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tscript.removeEventListener(\"load\", onLoad);\n\t\t\tscript.removeEventListener(\"error\", onError);\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t}\n\t\t};\n\n\t\tscript.addEventListener(\"load\", onLoad, { once: true });\n\t\tscript.addEventListener(\"error\", onError, { once: true });\n\n\t\ttimeoutId = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tscript.remove();\n\t\t\treject(new ScriptLoadError(`Timed out loading Remita script after ${timeoutMs}ms.`));\n\t\t}, timeoutMs);\n\n\t\tdocument.head.appendChild(script);\n\t});\n}\n\nexport async function loadRemitaScript(options: RemitaLibraryOptions = {}): Promise<void> {\n\tif (!isBrowserEnvironment()) {\n\t\tthrow new ScriptLoadError(\"Remita script loader can only run in a browser environment.\");\n\t}\n\n\tconst scriptId = options.scriptId ?? REMITA_SCRIPT_ID;\n\tconst scriptUrl = resolveScriptUrl(options);\n\tconst timeoutMs = options.timeoutMs ?? 15000;\n\tconst win = window as RemitaGlobalWindow;\n\n\tif (getEngine(win)) {\n\t\treturn;\n\t}\n\n\tconst inFlight = getPromise();\n\tif (inFlight) {\n\t\treturn inFlight;\n\t}\n\n\tconst task = (async () => {\n\t\tconst existingScript = document.getElementById(scriptId) as HTMLScriptElement | null;\n\n\t\tif (existingScript) {\n\t\t\tif (existingScript.src && existingScript.src !== scriptUrl) {\n\t\t\t\tthrow new ScriptLoadError(\n\t\t\t\t\t`Script with id \\\"${scriptId}\\\" already exists with a different src.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait waitForExistingScript(existingScript, timeoutMs, win);\n\t\t\treturn;\n\t\t}\n\n\t\tawait createAndLoadScript(scriptId, scriptUrl, timeoutMs, options.nonce);\n\t})();\n\n\tsetPromise(task);\n\n\ttry {\n\t\tawait task;\n\t} catch (error) {\n\t\tclearPromise();\n\t\tthrow error;\n\t}\n}\n","import { REMITA_ENGINE } from \"./constant\";\nimport { EngineError } from \"../utils/errors\";\nimport type { RemitaExtendedData } from \"../types\";\nimport type {\n\tRemitaEngine,\n\tRemitaEnginePaymentConfig,\n\tRemitaEngineSession,\n\tRemitaGlobalWindow,\n\tRemitaPaymentConfig,\n} from \"../types\";\n\nfunction isBrowserEnvironment(): boolean {\n\treturn typeof window !== \"undefined\";\n}\n\nexport function getRemitaEngine(win?: RemitaGlobalWindow): RemitaEngine {\n\tif (!isBrowserEnvironment()) {\n\t\tthrow new EngineError(\"Remita engine is only available in a browser environment.\");\n\t}\n\n\tconst targetWindow = win ?? (window as RemitaGlobalWindow);\n\tconst engine = targetWindow[REMITA_ENGINE as keyof RemitaGlobalWindow] as RemitaEngine | undefined;\n\n\tif (!engine || typeof engine.init !== \"function\") {\n\t\tthrow new EngineError(\"Remita payment engine is unavailable on window.\");\n\t}\n\n\treturn engine;\n}\n\nexport function initRemitaEngine(\n\tconfig: RemitaPaymentConfig,\n\twin?: RemitaGlobalWindow,\n): RemitaEngineSession {\n\tconst engine = getRemitaEngine(win);\n\tconst rawSession = engine.init(toEnginePaymentConfig(config)) as RemitaEngineSession & {\n\t\tshowPaymentWidget?: () => void;\n\t};\n\n\tconst openIframe =\n\t\ttypeof rawSession.openIframe === \"function\"\n\t\t\t? rawSession.openIframe.bind(rawSession)\n\t\t\t: typeof rawSession.showPaymentWidget === \"function\"\n\t\t\t\t? rawSession.showPaymentWidget.bind(rawSession)\n\t\t\t\t: undefined;\n\n\tif (!openIframe) {\n\t\tthrow new EngineError(\"Remita engine returned an invalid payment session.\");\n\t}\n\n\treturn {\n\t\topenIframe,\n\t\t...(typeof rawSession.showPaymentWidget === \"function\"\n\t\t\t? { showPaymentWidget: rawSession.showPaymentWidget.bind(rawSession) }\n\t\t\t: {}),\n\t};\n}\n\nexport function toEnginePaymentConfig(\n\tconfig: RemitaPaymentConfig,\n): RemitaEnginePaymentConfig {\n\tconst { rrr, extendedData, ...rest } = config;\n\tconst engineExtendedData: RemitaExtendedData = {\n\t\t...(extendedData ?? {}),\n\t\tcustomFields: [\n\t\t\t...((extendedData?.customFields ?? []).filter((field) => field?.name !== \"rrr\")),\n\t\t\t{\n\t\t\t\tname: \"rrr\",\n\t\t\t\tvalue: rrr,\n\t\t\t},\n\t\t],\n\t};\n\n\treturn {\n\t\t...rest,\n\t\tprocessRrr: true,\n\t\textendedData: engineExtendedData,\n\t};\n}\n","import { ValidationError } from \"../utils/errors\";\nimport type { RemitaPaymentConfig } from \"../types\";\n\nfunction assertNonEmptyString(value: unknown, fieldName: string): asserts value is string {\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\tthrow new ValidationError(`${fieldName} is required and must be a non-empty string.`);\n\t}\n}\n\nfunction assertFinitePositiveNumber(value: unknown, fieldName: string): asserts value is number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n\t\tthrow new ValidationError(`${fieldName} is required and must be a positive number.`);\n\t}\n}\n\nfunction assertValidTransactionId(value: unknown): void {\n\tif (value === undefined) {\n\t\treturn;\n\t}\n\n\tconst isString = typeof value === \"string\" && value.trim().length > 0;\n\tconst isNumber = typeof value === \"number\" && Number.isFinite(value);\n\n\tif (!isString && !isNumber) {\n\t\tthrow new ValidationError(\n\t\t\t\"transactionId must be a non-empty string or a finite number when provided.\",\n\t\t);\n\t}\n}\n\nfunction assertValidRrr(value: unknown): void {\n\tconst isString = typeof value === \"string\" && value.trim().length > 0;\n\tconst isNumber = typeof value === \"number\" && Number.isFinite(value);\n\n\tif (!isString && !isNumber) {\n\t\tthrow new ValidationError(\"rrr is required and must be a non-empty string or a finite number.\");\n\t}\n}\n\nfunction validateRrrConfig(config: RemitaPaymentConfig): void {\n\tassertValidRrr(config.rrr);\n}\n\nexport function validatePaymentConfig(config: RemitaPaymentConfig): RemitaPaymentConfig {\n\tif (!config || typeof config !== \"object\") {\n\t\tthrow new ValidationError(\"Payment config is required.\");\n\t}\n\n\tassertNonEmptyString(config.key, \"key\");\n\tassertValidRrr(config.rrr);\n\tassertValidTransactionId(config.transactionId);\n\tvalidateRrrConfig(config);\n\n\treturn config;\n}\n","import { initRemitaEngine } from \"./engine\";\nimport { loadRemitaScript } from \"./loader\";\nimport { validatePaymentConfig } from \"./validator\";\nimport type { RemitaEngineSession, RemitaPaymentConfig } from \"../types\";\nimport type { RemitaLibraryOptions, RemitaOpenOptions } from \"../types/public\";\n\nexport type RemitaStartPaymentOptions = RemitaLibraryOptions & RemitaOpenOptions;\n\nexport interface RemitaPaymentSession {\n\topen: () => void;\n\tsession: RemitaEngineSession;\n}\n\nexport async function startRemitaPayment(\n\tconfig: RemitaPaymentConfig,\n\toptions: RemitaStartPaymentOptions = {},\n): Promise<RemitaPaymentSession> {\n\tvalidatePaymentConfig(config);\n\tawait loadRemitaScript(options);\n\n\tconst session = initRemitaEngine(config);\n\tconst open = () => {\n\t\tif (typeof session.showPaymentWidget === \"function\") {\n\t\t\tsession.showPaymentWidget();\n\t\t\treturn;\n\t\t}\n\n\t\tsession.openIframe();\n\t};\n\n\tif (options.autoOpen !== false) {\n\t\topen();\n\t}\n\n\treturn {\n\t\topen,\n\t\tsession,\n\t};\n}\n","import { useCallback, useState } from \"react\";\nimport { startRemitaPayment } from \"../core/payment\";\nimport type { RemitaPaymentConfig } from \"../types\";\nimport type { RemitaStartPaymentOptions } from \"../core/payment\";\n\nexport interface UseRemitaInlineResult {\n pay: (\n config: RemitaPaymentConfig,\n options?: RemitaStartPaymentOptions,\n ) => Promise<void>;\n isLoading: boolean;\n error: Error | null;\n reset: () => void;\n}\n\nexport function useRemitaInline(\n defaultOptions: RemitaStartPaymentOptions = {},\n): UseRemitaInlineResult {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pay = useCallback(\n async (config: RemitaPaymentConfig, options: RemitaStartPaymentOptions = {}) => {\n setIsLoading(true);\n setError(null);\n\n try {\n await startRemitaPayment(config, {\n ...defaultOptions,\n ...options,\n });\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(\"Payment initialization failed.\");\n setError(nextError);\n throw nextError;\n } finally {\n setIsLoading(false);\n }\n },\n [defaultOptions],\n );\n\n const reset = useCallback(() => {\n setError(null);\n }, []);\n\n return {\n pay,\n isLoading,\n error,\n reset,\n };\n}\n","import { useCallback } from \"react\";\nimport type { ButtonHTMLAttributes, MouseEvent } from \"react\";\nimport { useRemitaInline } from \"../hooks/useRemitaInline\";\nimport type { RemitaPaymentConfig } from \"../types\";\nimport type { RemitaStartPaymentOptions } from \"../core/payment\";\n\nexport interface RemitaPayButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\"> {\n paymentConfig: RemitaPaymentConfig;\n paymentOptions?: RemitaStartPaymentOptions;\n onPaymentStart?: () => void;\n onPaymentError?: (error: Error) => void;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n loadingText?: string;\n}\n\nexport function RemitaPayButton({\n paymentConfig,\n paymentOptions,\n onPaymentStart,\n onPaymentError,\n onClick,\n loadingText = \"Processing...\",\n disabled,\n children,\n ...props\n}: RemitaPayButtonProps) {\n const { pay, isLoading } = useRemitaInline();\n\n const handleClick = useCallback(\n async (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n\n if (event.defaultPrevented || isLoading) {\n return;\n }\n\n onPaymentStart?.();\n\n try {\n await pay(paymentConfig, paymentOptions);\n } catch (error) {\n if (onPaymentError) {\n onPaymentError(error instanceof Error ? error : new Error(\"Payment failed.\"));\n }\n }\n },\n [isLoading, onClick, onPaymentError, onPaymentStart, pay, paymentConfig, paymentOptions],\n );\n\n return (\n <button\n type=\"button\"\n {...props}\n disabled={disabled || isLoading}\n onClick={handleClick}\n >\n {isLoading ? loadingText : children ?? \"Pay with Remita\"}\n </button>\n );\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "remita-inline",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "TypeScript wrapper library for Remita Inline payment engine",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"clean": "rm -rf dist",
|
|
22
|
+
"build": "tsup",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"dev": "vite --config dev/vite.config.ts",
|
|
25
|
+
"test": "vitest run",
|
|
26
|
+
"test:watch": "vitest",
|
|
27
|
+
"prepack": "npm run clean && npm run build"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"remita",
|
|
31
|
+
"payments",
|
|
32
|
+
"inline",
|
|
33
|
+
"typescript",
|
|
34
|
+
"react"
|
|
35
|
+
],
|
|
36
|
+
"author": "Oluwaseun",
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "https://github.com/Oluwaseun241/remita-inline.git"
|
|
41
|
+
},
|
|
42
|
+
"sideEffects": false,
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"react": ">=18"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "^26.1.1",
|
|
51
|
+
"@types/react": "^18.3.5",
|
|
52
|
+
"@types/react-dom": "^18.3.0",
|
|
53
|
+
"@testing-library/jest-dom": "^6.5.0",
|
|
54
|
+
"@testing-library/react": "^16.0.1",
|
|
55
|
+
"@testing-library/user-event": "^14.5.2",
|
|
56
|
+
"@vitejs/plugin-react": "^4.3.2",
|
|
57
|
+
"jsdom": "^24.1.1",
|
|
58
|
+
"react": "^18.3.1",
|
|
59
|
+
"react-dom": "^18.3.1",
|
|
60
|
+
"vite": "^5.4.11",
|
|
61
|
+
"tsup": "^8.5.0",
|
|
62
|
+
"typescript": "^5.6.3",
|
|
63
|
+
"vitest": "^2.1.3"
|
|
64
|
+
}
|
|
65
|
+
}
|