meridianjs 0.2.5 → 0.2.8
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/README.md +86 -16
- package/dist/capabilities/registry.d.ts.map +1 -1
- package/dist/capabilities/registry.js +7 -0
- package/dist/capabilities/registry.js.map +1 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/core/types.js +1 -1
- package/dist/generator/index.d.ts +2 -0
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +2 -1
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/openapi-export.d.ts +51 -0
- package/dist/generator/openapi-export.d.ts.map +1 -0
- package/dist/generator/openapi-export.js +95 -0
- package/dist/generator/openapi-export.js.map +1 -0
- package/dist/generator/templates.d.ts.map +1 -1
- package/dist/generator/templates.js +86 -17
- package/dist/generator/templates.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/billdesk/adapter.d.ts +36 -0
- package/dist/providers/billdesk/adapter.d.ts.map +1 -0
- package/dist/providers/billdesk/adapter.js +212 -0
- package/dist/providers/billdesk/adapter.js.map +1 -0
- package/dist/providers/billdesk/index.d.ts +3 -0
- package/dist/providers/billdesk/index.d.ts.map +1 -0
- package/dist/providers/billdesk/index.js +3 -0
- package/dist/providers/billdesk/index.js.map +1 -0
- package/dist/providers/billdesk/pagination.d.ts +15 -0
- package/dist/providers/billdesk/pagination.d.ts.map +1 -0
- package/dist/providers/billdesk/pagination.js +51 -0
- package/dist/providers/billdesk/pagination.js.map +1 -0
- package/dist/providers/ccavenue/adapter.d.ts +38 -0
- package/dist/providers/ccavenue/adapter.d.ts.map +1 -0
- package/dist/providers/ccavenue/adapter.js +181 -0
- package/dist/providers/ccavenue/adapter.js.map +1 -0
- package/dist/providers/ccavenue/index.d.ts +3 -0
- package/dist/providers/ccavenue/index.d.ts.map +1 -0
- package/dist/providers/ccavenue/index.js +3 -0
- package/dist/providers/ccavenue/index.js.map +1 -0
- package/dist/providers/ccavenue/pagination.d.ts +16 -0
- package/dist/providers/ccavenue/pagination.d.ts.map +1 -0
- package/dist/providers/ccavenue/pagination.js +20 -0
- package/dist/providers/ccavenue/pagination.js.map +1 -0
- package/dist/providers/datadog/adapter.d.ts +30 -0
- package/dist/providers/datadog/adapter.d.ts.map +1 -0
- package/dist/providers/datadog/adapter.js +163 -0
- package/dist/providers/datadog/adapter.js.map +1 -0
- package/dist/providers/datadog/index.d.ts +3 -0
- package/dist/providers/datadog/index.d.ts.map +1 -0
- package/dist/providers/datadog/index.js +3 -0
- package/dist/providers/datadog/index.js.map +1 -0
- package/dist/providers/datadog/pagination.d.ts +16 -0
- package/dist/providers/datadog/pagination.d.ts.map +1 -0
- package/dist/providers/datadog/pagination.js +41 -0
- package/dist/providers/datadog/pagination.js.map +1 -0
- package/dist/providers/googlemaps/adapter.d.ts +17 -0
- package/dist/providers/googlemaps/adapter.d.ts.map +1 -0
- package/dist/providers/googlemaps/adapter.js +154 -0
- package/dist/providers/googlemaps/adapter.js.map +1 -0
- package/dist/providers/googlemaps/pagination.d.ts +17 -0
- package/dist/providers/googlemaps/pagination.d.ts.map +1 -0
- package/dist/providers/googlemaps/pagination.js +36 -0
- package/dist/providers/googlemaps/pagination.js.map +1 -0
- package/dist/providers/s3/adapter.d.ts +37 -0
- package/dist/providers/s3/adapter.d.ts.map +1 -0
- package/dist/providers/s3/adapter.js +206 -0
- package/dist/providers/s3/adapter.js.map +1 -0
- package/dist/providers/s3/index.d.ts +4 -0
- package/dist/providers/s3/index.d.ts.map +1 -0
- package/dist/providers/s3/index.js +4 -0
- package/dist/providers/s3/index.js.map +1 -0
- package/dist/providers/s3/pagination.d.ts +18 -0
- package/dist/providers/s3/pagination.d.ts.map +1 -0
- package/dist/providers/s3/pagination.js +58 -0
- package/dist/providers/s3/pagination.js.map +1 -0
- package/dist/providers/s3/sigv4.d.ts +29 -0
- package/dist/providers/s3/sigv4.d.ts.map +1 -0
- package/dist/providers/s3/sigv4.js +101 -0
- package/dist/providers/s3/sigv4.js.map +1 -0
- package/dist/providers/sentry/adapter.d.ts +29 -0
- package/dist/providers/sentry/adapter.d.ts.map +1 -0
- package/dist/providers/sentry/adapter.js +154 -0
- package/dist/providers/sentry/adapter.js.map +1 -0
- package/dist/providers/sentry/index.d.ts +3 -0
- package/dist/providers/sentry/index.d.ts.map +1 -0
- package/dist/providers/sentry/index.js +3 -0
- package/dist/providers/sentry/index.js.map +1 -0
- package/dist/providers/sentry/pagination.d.ts +17 -0
- package/dist/providers/sentry/pagination.d.ts.map +1 -0
- package/dist/providers/sentry/pagination.js +54 -0
- package/dist/providers/sentry/pagination.js.map +1 -0
- package/dist/public.d.ts +11 -1
- package/dist/public.d.ts.map +1 -1
- package/dist/public.js +9 -1
- package/dist/public.js.map +1 -1
- package/dist/upi/index.d.ts +43 -0
- package/dist/upi/index.d.ts.map +1 -0
- package/dist/upi/index.js +57 -0
- package/dist/upi/index.js.map +1 -0
- package/package.json +29 -6
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level helpers for UPI (Unified Payments Interface) — a uniquely Indian
|
|
3
|
+
* payment primitive layered on top of raw provider adapters (Setu, Decentro,
|
|
4
|
+
* BillDesk, CCAvenue, ...). These helpers operate purely on the UPI URI/VPA
|
|
5
|
+
* formats defined by NPCI; they don't call any provider API.
|
|
6
|
+
*
|
|
7
|
+
* Reference: NPCI UPI Linking Specification (`upi://pay?...` deep links) and
|
|
8
|
+
* the VPA format `<handle>@<psp-handle>`.
|
|
9
|
+
*/
|
|
10
|
+
// `<handle>@<psp-handle>`: handle allows letters, digits, and . _ - ;
|
|
11
|
+
// the PSP handle must start with a letter and may contain letters, digits, . -
|
|
12
|
+
const VPA_REGEX = /^[a-zA-Z0-9.\-_]{2,256}@[a-zA-Z][a-zA-Z0-9.\-]{1,64}$/;
|
|
13
|
+
/**
|
|
14
|
+
* Validates a UPI Virtual Payment Address against NPCI's `handle@pspHandle`
|
|
15
|
+
* format. This is a syntactic check — it does not confirm the VPA is
|
|
16
|
+
* registered or resolvable; that requires a live lookup through a provider
|
|
17
|
+
* such as Setu or Decentro.
|
|
18
|
+
*/
|
|
19
|
+
export function validateVpa(vpa) {
|
|
20
|
+
if (typeof vpa !== "string")
|
|
21
|
+
return false;
|
|
22
|
+
return VPA_REGEX.test(vpa.trim());
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Builds a `upi://pay` deep link per NPCI's UPI Linking Specification, suitable
|
|
26
|
+
* for opening a UPI app's payment screen pre-filled with the given details.
|
|
27
|
+
*
|
|
28
|
+
* Throws if `vpa` fails {@link validateVpa} or `amount` is not a positive,
|
|
29
|
+
* finite number — both would produce a deep link that UPI apps reject.
|
|
30
|
+
*/
|
|
31
|
+
export function createUpiDeepLink(options) {
|
|
32
|
+
if (!validateVpa(options.vpa)) {
|
|
33
|
+
throw new Error(`createUpiDeepLink: "${options.vpa}" is not a valid UPI VPA (expected handle@bank format)`);
|
|
34
|
+
}
|
|
35
|
+
if (options.amount !== undefined && (!Number.isFinite(options.amount) || options.amount <= 0)) {
|
|
36
|
+
throw new Error(`createUpiDeepLink: amount must be a positive finite number, received ${options.amount}`);
|
|
37
|
+
}
|
|
38
|
+
const params = [
|
|
39
|
+
["pa", options.vpa.trim()],
|
|
40
|
+
["cu", options.currency ?? "INR"],
|
|
41
|
+
];
|
|
42
|
+
if (options.payeeName)
|
|
43
|
+
params.push(["pn", options.payeeName]);
|
|
44
|
+
if (options.amount !== undefined)
|
|
45
|
+
params.push(["am", options.amount.toFixed(2)]);
|
|
46
|
+
if (options.note)
|
|
47
|
+
params.push(["tn", options.note]);
|
|
48
|
+
if (options.transactionRef)
|
|
49
|
+
params.push(["tr", options.transactionRef]);
|
|
50
|
+
if (options.transactionId)
|
|
51
|
+
params.push(["tid", options.transactionId]);
|
|
52
|
+
if (options.merchantCode)
|
|
53
|
+
params.push(["mc", options.merchantCode]);
|
|
54
|
+
const query = params.map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join("&");
|
|
55
|
+
return `upi://pay?${query}`;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upi/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sEAAsE;AACtE,+EAA+E;AAC/E,MAAM,SAAS,GAAG,uDAAuD,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAqBD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,CAAC,GAAG,wDAAwD,CAC3F,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,KAAK,CACb,wEAAwE,OAAO,CAAC,MAAM,EAAE,CACzF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAA4B;QACtC,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;KAClC,CAAC;IACF,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,OAAO,CAAC,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,cAAc;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,aAAa;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,YAAY;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAEpE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5F,OAAO,aAAa,KAAK,EAAE,CAAC;AAC9B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "meridianjs",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Meridian - A TypeScript-first SDK that enforces a single stable contract across all third-party API providers",
|
|
5
5
|
"main": "dist/public.js",
|
|
6
6
|
"types": "dist/public.d.ts",
|
|
@@ -13,35 +13,57 @@
|
|
|
13
13
|
"./contract": {
|
|
14
14
|
"types": "./dist/testing/contract.d.ts",
|
|
15
15
|
"import": "./dist/testing/contract.js"
|
|
16
|
+
},
|
|
17
|
+
"./upi": {
|
|
18
|
+
"types": "./dist/upi/index.d.ts",
|
|
19
|
+
"import": "./dist/upi/index.js"
|
|
16
20
|
}
|
|
17
21
|
},
|
|
18
|
-
"files": [
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"README.md",
|
|
25
|
+
"CHANGELOG.md",
|
|
26
|
+
"LICENSE.md"
|
|
27
|
+
],
|
|
19
28
|
"sideEffects": false,
|
|
20
29
|
"scripts": {
|
|
21
30
|
"build": "tsc",
|
|
22
31
|
"typecheck": "tsc --noEmit",
|
|
23
32
|
"test": "vitest",
|
|
24
33
|
"test:watch": "vitest --watch",
|
|
34
|
+
"test:coverage": "vitest run --coverage",
|
|
25
35
|
"lint": "biome check .",
|
|
36
|
+
"lint:ci": "biome ci .",
|
|
26
37
|
"format": "biome format --write .",
|
|
38
|
+
"providers:list": "node scripts/list-providers.mjs --pretty",
|
|
27
39
|
"prepublishOnly": "npm run build",
|
|
28
40
|
"proxy": "node dist/proxy/cli.js",
|
|
29
41
|
"proxy:build": "npm run build && npm run proxy",
|
|
30
42
|
"example:swap": "vite-node examples/provider-swap/index.ts",
|
|
43
|
+
"example:reliability-lab": "npx vite-node examples/reliability-lab/index.ts",
|
|
31
44
|
"test:contracts": "node scripts/test-contracts.mjs",
|
|
32
45
|
"test:contracts:all": "node scripts/test-contracts.mjs",
|
|
33
|
-
"benchmark": "npx
|
|
34
|
-
"
|
|
46
|
+
"benchmark": "MERIDIAN_BENCH_SUITE=1 npx vite-node benchmarks/index.ts",
|
|
47
|
+
"benchmark:reliability": "npx vite-node benchmarks/reliability.ts",
|
|
48
|
+
"benchmark:overhead": "npx vite-node benchmarks/pipeline-overhead.ts",
|
|
49
|
+
"pkg:check": "npx publint && npx @arethetypeswrong/cli . --pack"
|
|
35
50
|
},
|
|
36
51
|
"bin": {
|
|
37
52
|
"boundary-proxy": "dist/proxy/cli.js",
|
|
38
53
|
"meridian": "dist/generator/cli.js"
|
|
39
54
|
},
|
|
40
|
-
"keywords": [
|
|
55
|
+
"keywords": [
|
|
56
|
+
"api",
|
|
57
|
+
"sdk",
|
|
58
|
+
"normalization",
|
|
59
|
+
"circuit-breaker",
|
|
60
|
+
"rate-limiting",
|
|
61
|
+
"retry"
|
|
62
|
+
],
|
|
41
63
|
"license": "MIT",
|
|
42
64
|
"repository": {
|
|
43
65
|
"type": "git",
|
|
44
|
-
"url": "https://github.com/Raghaverma/meridianjs"
|
|
66
|
+
"url": "git+https://github.com/Raghaverma/meridianjs.git"
|
|
45
67
|
},
|
|
46
68
|
"engines": {
|
|
47
69
|
"node": ">=18.0.0"
|
|
@@ -49,6 +71,7 @@
|
|
|
49
71
|
"devDependencies": {
|
|
50
72
|
"@biomejs/biome": "^1.9.4",
|
|
51
73
|
"@types/node": "^20.14.0",
|
|
74
|
+
"@vitest/coverage-v8": "^1.6.1",
|
|
52
75
|
"typescript": "^5.5.0",
|
|
53
76
|
"vitest": "^1.6.0"
|
|
54
77
|
}
|