meridianjs 0.1.3 → 0.2.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/CHANGELOG.md +13 -0
- package/README.md +453 -92
- package/dist/core/adapter-validator.d.ts.map +1 -1
- package/dist/core/adapter-validator.js.map +1 -1
- package/dist/core/error-sanitizer.d.ts.map +1 -1
- package/dist/core/error-sanitizer.js +5 -11
- package/dist/core/error-sanitizer.js.map +1 -1
- package/dist/core/header-parser.d.ts.map +1 -1
- package/dist/core/header-parser.js +9 -9
- package/dist/core/header-parser.js.map +1 -1
- package/dist/core/normalizer.d.ts +1 -1
- package/dist/core/normalizer.d.ts.map +1 -1
- package/dist/core/normalizer.js +1 -1
- package/dist/core/normalizer.js.map +1 -1
- package/dist/core/observability-sanitizer.d.ts.map +1 -1
- package/dist/core/observability-sanitizer.js +5 -12
- package/dist/core/observability-sanitizer.js.map +1 -1
- package/dist/core/pipeline.d.ts +9 -5
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +45 -8
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/request-sanitizer.d.ts +1 -0
- package/dist/core/request-sanitizer.d.ts.map +1 -1
- package/dist/core/request-sanitizer.js +51 -28
- package/dist/core/request-sanitizer.js.map +1 -1
- package/dist/core/streaming.d.ts +19 -0
- package/dist/core/streaming.d.ts.map +1 -0
- package/dist/core/streaming.js +130 -0
- package/dist/core/streaming.js.map +1 -0
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +0 -4
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +34 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +180 -10
- package/dist/index.js.map +1 -1
- package/dist/observability/adapter.d.ts.map +1 -1
- package/dist/observability/console.d.ts +1 -1
- package/dist/observability/console.d.ts.map +1 -1
- package/dist/observability/console.js.map +1 -1
- package/dist/observability/noop.d.ts +1 -1
- package/dist/observability/noop.d.ts.map +1 -1
- package/dist/observability/noop.js +5 -10
- package/dist/observability/noop.js.map +1 -1
- package/dist/observability/otel.d.ts +1 -1
- package/dist/observability/otel.d.ts.map +1 -1
- package/dist/observability/otel.js.map +1 -1
- package/dist/observability/prometheus.d.ts +1 -1
- package/dist/observability/prometheus.d.ts.map +1 -1
- package/dist/observability/prometheus.js +5 -13
- package/dist/observability/prometheus.js.map +1 -1
- package/dist/providers/adyen/adapter.d.ts +18 -0
- package/dist/providers/adyen/adapter.d.ts.map +1 -0
- package/dist/providers/adyen/adapter.js +224 -0
- package/dist/providers/adyen/adapter.js.map +1 -0
- package/dist/providers/adyen/index.d.ts +3 -0
- package/dist/providers/adyen/index.d.ts.map +1 -0
- package/dist/providers/adyen/index.js +3 -0
- package/dist/providers/adyen/index.js.map +1 -0
- package/dist/providers/adyen/pagination.d.ts +11 -0
- package/dist/providers/adyen/pagination.d.ts.map +1 -0
- package/dist/providers/adyen/pagination.js +50 -0
- package/dist/providers/adyen/pagination.js.map +1 -0
- package/dist/providers/anthropic/adapter.d.ts +1 -1
- package/dist/providers/anthropic/adapter.d.ts.map +1 -1
- package/dist/providers/anthropic/adapter.js +8 -8
- package/dist/providers/anthropic/adapter.js.map +1 -1
- package/dist/providers/anthropic/pagination.d.ts.map +1 -1
- package/dist/providers/anthropic/pagination.js +3 -3
- package/dist/providers/anthropic/pagination.js.map +1 -1
- package/dist/providers/auth0/adapter.d.ts +17 -0
- package/dist/providers/auth0/adapter.d.ts.map +1 -0
- package/dist/providers/auth0/adapter.js +150 -0
- package/dist/providers/auth0/adapter.js.map +1 -0
- package/dist/providers/auth0/index.d.ts +3 -0
- package/dist/providers/auth0/index.d.ts.map +1 -0
- package/dist/providers/auth0/index.js +3 -0
- package/dist/providers/auth0/index.js.map +1 -0
- package/dist/providers/auth0/pagination.d.ts +11 -0
- package/dist/providers/auth0/pagination.d.ts.map +1 -0
- package/dist/providers/auth0/pagination.js +42 -0
- package/dist/providers/auth0/pagination.js.map +1 -0
- package/dist/providers/braintree/adapter.d.ts +18 -0
- package/dist/providers/braintree/adapter.d.ts.map +1 -0
- package/dist/providers/braintree/adapter.js +203 -0
- package/dist/providers/braintree/adapter.js.map +1 -0
- package/dist/providers/braintree/index.d.ts +3 -0
- package/dist/providers/braintree/index.d.ts.map +1 -0
- package/dist/providers/braintree/index.js +3 -0
- package/dist/providers/braintree/index.js.map +1 -0
- package/dist/providers/braintree/pagination.d.ts +11 -0
- package/dist/providers/braintree/pagination.d.ts.map +1 -0
- package/dist/providers/braintree/pagination.js +34 -0
- package/dist/providers/braintree/pagination.js.map +1 -0
- package/dist/providers/cashfree/adapter.d.ts +18 -0
- package/dist/providers/cashfree/adapter.d.ts.map +1 -0
- package/dist/providers/cashfree/adapter.js +175 -0
- package/dist/providers/cashfree/adapter.js.map +1 -0
- package/dist/providers/cashfree/index.d.ts +3 -0
- package/dist/providers/cashfree/index.d.ts.map +1 -0
- package/dist/providers/cashfree/index.js +3 -0
- package/dist/providers/cashfree/index.js.map +1 -0
- package/dist/providers/cashfree/pagination.d.ts +11 -0
- package/dist/providers/cashfree/pagination.d.ts.map +1 -0
- package/dist/providers/cashfree/pagination.js +32 -0
- package/dist/providers/cashfree/pagination.js.map +1 -0
- package/dist/providers/checkout/adapter.d.ts +18 -0
- package/dist/providers/checkout/adapter.d.ts.map +1 -0
- package/dist/providers/checkout/adapter.js +158 -0
- package/dist/providers/checkout/adapter.js.map +1 -0
- package/dist/providers/checkout/index.d.ts +3 -0
- package/dist/providers/checkout/index.d.ts.map +1 -0
- package/dist/providers/checkout/index.js +3 -0
- package/dist/providers/checkout/index.js.map +1 -0
- package/dist/providers/checkout/pagination.d.ts +11 -0
- package/dist/providers/checkout/pagination.d.ts.map +1 -0
- package/dist/providers/checkout/pagination.js +32 -0
- package/dist/providers/checkout/pagination.js.map +1 -0
- package/dist/providers/cleartax/adapter.d.ts +17 -0
- package/dist/providers/cleartax/adapter.d.ts.map +1 -0
- package/dist/providers/cleartax/adapter.js +135 -0
- package/dist/providers/cleartax/adapter.js.map +1 -0
- package/dist/providers/cleartax/index.d.ts +3 -0
- package/dist/providers/cleartax/index.d.ts.map +1 -0
- package/dist/providers/cleartax/index.js +3 -0
- package/dist/providers/cleartax/index.js.map +1 -0
- package/dist/providers/cleartax/pagination.d.ts +11 -0
- package/dist/providers/cleartax/pagination.d.ts.map +1 -0
- package/dist/providers/cleartax/pagination.js +62 -0
- package/dist/providers/cleartax/pagination.js.map +1 -0
- package/dist/providers/cohere/adapter.d.ts +19 -0
- package/dist/providers/cohere/adapter.d.ts.map +1 -0
- package/dist/providers/cohere/adapter.js +128 -0
- package/dist/providers/cohere/adapter.js.map +1 -0
- package/dist/providers/cohere/index.d.ts +3 -0
- package/dist/providers/cohere/index.d.ts.map +1 -0
- package/dist/providers/cohere/index.js +3 -0
- package/dist/providers/cohere/index.js.map +1 -0
- package/dist/providers/cohere/pagination.d.ts +11 -0
- package/dist/providers/cohere/pagination.d.ts.map +1 -0
- package/dist/providers/cohere/pagination.js +9 -0
- package/dist/providers/cohere/pagination.js.map +1 -0
- package/dist/providers/decentro/adapter.d.ts +18 -0
- package/dist/providers/decentro/adapter.d.ts.map +1 -0
- package/dist/providers/decentro/adapter.js +144 -0
- package/dist/providers/decentro/adapter.js.map +1 -0
- package/dist/providers/decentro/index.d.ts +3 -0
- package/dist/providers/decentro/index.d.ts.map +1 -0
- package/dist/providers/decentro/index.js +3 -0
- package/dist/providers/decentro/index.js.map +1 -0
- package/dist/providers/decentro/pagination.d.ts +11 -0
- package/dist/providers/decentro/pagination.d.ts.map +1 -0
- package/dist/providers/decentro/pagination.js +45 -0
- package/dist/providers/decentro/pagination.js.map +1 -0
- package/dist/providers/delhivery/adapter.d.ts +17 -0
- package/dist/providers/delhivery/adapter.d.ts.map +1 -0
- package/dist/providers/delhivery/adapter.js +119 -0
- package/dist/providers/delhivery/adapter.js.map +1 -0
- package/dist/providers/delhivery/index.d.ts +3 -0
- package/dist/providers/delhivery/index.d.ts.map +1 -0
- package/dist/providers/delhivery/index.js +3 -0
- package/dist/providers/delhivery/index.js.map +1 -0
- package/dist/providers/delhivery/pagination.d.ts +12 -0
- package/dist/providers/delhivery/pagination.d.ts.map +1 -0
- package/dist/providers/delhivery/pagination.js +47 -0
- package/dist/providers/delhivery/pagination.js.map +1 -0
- package/dist/providers/digio/adapter.d.ts +17 -0
- package/dist/providers/digio/adapter.d.ts.map +1 -0
- package/dist/providers/digio/adapter.js +144 -0
- package/dist/providers/digio/adapter.js.map +1 -0
- package/dist/providers/digio/index.d.ts +3 -0
- package/dist/providers/digio/index.d.ts.map +1 -0
- package/dist/providers/digio/index.js +3 -0
- package/dist/providers/digio/index.js.map +1 -0
- package/dist/providers/digio/pagination.d.ts +11 -0
- package/dist/providers/digio/pagination.d.ts.map +1 -0
- package/dist/providers/digio/pagination.js +48 -0
- package/dist/providers/digio/pagination.js.map +1 -0
- package/dist/providers/exotel/adapter.d.ts +18 -0
- package/dist/providers/exotel/adapter.d.ts.map +1 -0
- package/dist/providers/exotel/adapter.js +170 -0
- package/dist/providers/exotel/adapter.js.map +1 -0
- package/dist/providers/exotel/index.d.ts +3 -0
- package/dist/providers/exotel/index.d.ts.map +1 -0
- package/dist/providers/exotel/index.js +3 -0
- package/dist/providers/exotel/index.js.map +1 -0
- package/dist/providers/exotel/pagination.d.ts +11 -0
- package/dist/providers/exotel/pagination.d.ts.map +1 -0
- package/dist/providers/exotel/pagination.js +54 -0
- package/dist/providers/exotel/pagination.js.map +1 -0
- package/dist/providers/gemini/adapter.d.ts +18 -0
- package/dist/providers/gemini/adapter.d.ts.map +1 -0
- package/dist/providers/gemini/adapter.js +171 -0
- package/dist/providers/gemini/adapter.js.map +1 -0
- package/dist/providers/gemini/index.d.ts +3 -0
- package/dist/providers/gemini/index.d.ts.map +1 -0
- package/dist/providers/gemini/index.js +3 -0
- package/dist/providers/gemini/index.js.map +1 -0
- package/dist/providers/gemini/pagination.d.ts +11 -0
- package/dist/providers/gemini/pagination.d.ts.map +1 -0
- package/dist/providers/gemini/pagination.js +15 -0
- package/dist/providers/gemini/pagination.js.map +1 -0
- package/dist/providers/github/adapter.d.ts +1 -1
- package/dist/providers/github/adapter.d.ts.map +1 -1
- package/dist/providers/github/adapter.js +10 -16
- package/dist/providers/github/adapter.js.map +1 -1
- package/dist/providers/github/pagination.d.ts.map +1 -1
- package/dist/providers/github/pagination.js +3 -3
- package/dist/providers/github/pagination.js.map +1 -1
- package/dist/providers/gupshup/adapter.d.ts +18 -0
- package/dist/providers/gupshup/adapter.d.ts.map +1 -0
- package/dist/providers/gupshup/adapter.js +138 -0
- package/dist/providers/gupshup/adapter.js.map +1 -0
- package/dist/providers/gupshup/index.d.ts +3 -0
- package/dist/providers/gupshup/index.d.ts.map +1 -0
- package/dist/providers/gupshup/index.js +3 -0
- package/dist/providers/gupshup/index.js.map +1 -0
- package/dist/providers/gupshup/pagination.d.ts +12 -0
- package/dist/providers/gupshup/pagination.d.ts.map +1 -0
- package/dist/providers/gupshup/pagination.js +55 -0
- package/dist/providers/gupshup/pagination.js.map +1 -0
- package/dist/providers/hubspot/adapter.d.ts +17 -0
- package/dist/providers/hubspot/adapter.d.ts.map +1 -0
- package/dist/providers/hubspot/adapter.js +150 -0
- package/dist/providers/hubspot/adapter.js.map +1 -0
- package/dist/providers/hubspot/index.d.ts +3 -0
- package/dist/providers/hubspot/index.d.ts.map +1 -0
- package/dist/providers/hubspot/index.js +3 -0
- package/dist/providers/hubspot/index.js.map +1 -0
- package/dist/providers/hubspot/pagination.d.ts +11 -0
- package/dist/providers/hubspot/pagination.d.ts.map +1 -0
- package/dist/providers/hubspot/pagination.js +32 -0
- package/dist/providers/hubspot/pagination.js.map +1 -0
- package/dist/providers/hyperverge/adapter.d.ts +17 -0
- package/dist/providers/hyperverge/adapter.d.ts.map +1 -0
- package/dist/providers/hyperverge/adapter.js +140 -0
- package/dist/providers/hyperverge/adapter.js.map +1 -0
- package/dist/providers/hyperverge/index.d.ts +3 -0
- package/dist/providers/hyperverge/index.d.ts.map +1 -0
- package/dist/providers/hyperverge/index.js +3 -0
- package/dist/providers/hyperverge/index.js.map +1 -0
- package/dist/providers/hyperverge/pagination.d.ts +11 -0
- package/dist/providers/hyperverge/pagination.d.ts.map +1 -0
- package/dist/providers/hyperverge/pagination.js +16 -0
- package/dist/providers/hyperverge/pagination.js.map +1 -0
- package/dist/providers/idfy/adapter.d.ts +17 -0
- package/dist/providers/idfy/adapter.d.ts.map +1 -0
- package/dist/providers/idfy/adapter.js +148 -0
- package/dist/providers/idfy/adapter.js.map +1 -0
- package/dist/providers/idfy/index.d.ts +3 -0
- package/dist/providers/idfy/index.d.ts.map +1 -0
- package/dist/providers/idfy/index.js +3 -0
- package/dist/providers/idfy/index.js.map +1 -0
- package/dist/providers/idfy/pagination.d.ts +11 -0
- package/dist/providers/idfy/pagination.d.ts.map +1 -0
- package/dist/providers/idfy/pagination.js +47 -0
- package/dist/providers/idfy/pagination.js.map +1 -0
- package/dist/providers/juspay/adapter.d.ts +18 -0
- package/dist/providers/juspay/adapter.d.ts.map +1 -0
- package/dist/providers/juspay/adapter.js +160 -0
- package/dist/providers/juspay/adapter.js.map +1 -0
- package/dist/providers/juspay/index.d.ts +3 -0
- package/dist/providers/juspay/index.d.ts.map +1 -0
- package/dist/providers/juspay/index.js +3 -0
- package/dist/providers/juspay/index.js.map +1 -0
- package/dist/providers/juspay/pagination.d.ts +11 -0
- package/dist/providers/juspay/pagination.d.ts.map +1 -0
- package/dist/providers/juspay/pagination.js +45 -0
- package/dist/providers/juspay/pagination.js.map +1 -0
- package/dist/providers/karza/adapter.d.ts +17 -0
- package/dist/providers/karza/adapter.d.ts.map +1 -0
- package/dist/providers/karza/adapter.js +132 -0
- package/dist/providers/karza/adapter.js.map +1 -0
- package/dist/providers/karza/index.d.ts +3 -0
- package/dist/providers/karza/index.d.ts.map +1 -0
- package/dist/providers/karza/index.js +3 -0
- package/dist/providers/karza/index.js.map +1 -0
- package/dist/providers/karza/pagination.d.ts +11 -0
- package/dist/providers/karza/pagination.d.ts.map +1 -0
- package/dist/providers/karza/pagination.js +16 -0
- package/dist/providers/karza/pagination.js.map +1 -0
- package/dist/providers/klarna/adapter.d.ts +18 -0
- package/dist/providers/klarna/adapter.d.ts.map +1 -0
- package/dist/providers/klarna/adapter.js +150 -0
- package/dist/providers/klarna/adapter.js.map +1 -0
- package/dist/providers/klarna/index.d.ts +3 -0
- package/dist/providers/klarna/index.d.ts.map +1 -0
- package/dist/providers/klarna/index.js +3 -0
- package/dist/providers/klarna/index.js.map +1 -0
- package/dist/providers/klarna/pagination.d.ts +11 -0
- package/dist/providers/klarna/pagination.d.ts.map +1 -0
- package/dist/providers/klarna/pagination.js +15 -0
- package/dist/providers/klarna/pagination.js.map +1 -0
- package/dist/providers/mailgun/adapter.d.ts +18 -0
- package/dist/providers/mailgun/adapter.d.ts.map +1 -0
- package/dist/providers/mailgun/adapter.js +201 -0
- package/dist/providers/mailgun/adapter.js.map +1 -0
- package/dist/providers/mailgun/index.d.ts +3 -0
- package/dist/providers/mailgun/index.d.ts.map +1 -0
- package/dist/providers/mailgun/index.js +3 -0
- package/dist/providers/mailgun/index.js.map +1 -0
- package/dist/providers/mailgun/pagination.d.ts +11 -0
- package/dist/providers/mailgun/pagination.d.ts.map +1 -0
- package/dist/providers/mailgun/pagination.js +46 -0
- package/dist/providers/mailgun/pagination.js.map +1 -0
- package/dist/providers/mapmyindia/adapter.d.ts +17 -0
- package/dist/providers/mapmyindia/adapter.d.ts.map +1 -0
- package/dist/providers/mapmyindia/adapter.js +134 -0
- package/dist/providers/mapmyindia/adapter.js.map +1 -0
- package/dist/providers/mapmyindia/index.d.ts +3 -0
- package/dist/providers/mapmyindia/index.d.ts.map +1 -0
- package/dist/providers/mapmyindia/index.js +3 -0
- package/dist/providers/mapmyindia/index.js.map +1 -0
- package/dist/providers/mapmyindia/pagination.d.ts +11 -0
- package/dist/providers/mapmyindia/pagination.d.ts.map +1 -0
- package/dist/providers/mapmyindia/pagination.js +78 -0
- package/dist/providers/mapmyindia/pagination.js.map +1 -0
- package/dist/providers/mistral/adapter.d.ts +19 -0
- package/dist/providers/mistral/adapter.d.ts.map +1 -0
- package/dist/providers/mistral/adapter.js +114 -0
- package/dist/providers/mistral/adapter.js.map +1 -0
- package/dist/providers/mistral/index.d.ts +3 -0
- package/dist/providers/mistral/index.d.ts.map +1 -0
- package/dist/providers/mistral/index.js +3 -0
- package/dist/providers/mistral/index.js.map +1 -0
- package/dist/providers/mistral/pagination.d.ts +11 -0
- package/dist/providers/mistral/pagination.d.ts.map +1 -0
- package/dist/providers/mistral/pagination.js +7 -0
- package/dist/providers/mistral/pagination.js.map +1 -0
- package/dist/providers/mollie/adapter.d.ts +18 -0
- package/dist/providers/mollie/adapter.d.ts.map +1 -0
- package/dist/providers/mollie/adapter.js +143 -0
- package/dist/providers/mollie/adapter.js.map +1 -0
- package/dist/providers/mollie/index.d.ts +3 -0
- package/dist/providers/mollie/index.d.ts.map +1 -0
- package/dist/providers/mollie/index.js +3 -0
- package/dist/providers/mollie/index.js.map +1 -0
- package/dist/providers/mollie/pagination.d.ts +11 -0
- package/dist/providers/mollie/pagination.d.ts.map +1 -0
- package/dist/providers/mollie/pagination.js +36 -0
- package/dist/providers/mollie/pagination.js.map +1 -0
- package/dist/providers/msg91/adapter.d.ts +18 -0
- package/dist/providers/msg91/adapter.d.ts.map +1 -0
- package/dist/providers/msg91/adapter.js +158 -0
- package/dist/providers/msg91/adapter.js.map +1 -0
- package/dist/providers/msg91/index.d.ts +3 -0
- package/dist/providers/msg91/index.d.ts.map +1 -0
- package/dist/providers/msg91/index.js +3 -0
- package/dist/providers/msg91/index.js.map +1 -0
- package/dist/providers/msg91/pagination.d.ts +11 -0
- package/dist/providers/msg91/pagination.d.ts.map +1 -0
- package/dist/providers/msg91/pagination.js +46 -0
- package/dist/providers/msg91/pagination.js.map +1 -0
- package/dist/providers/openai/adapter.d.ts +1 -1
- package/dist/providers/openai/adapter.d.ts.map +1 -1
- package/dist/providers/openai/adapter.js +12 -12
- package/dist/providers/openai/adapter.js.map +1 -1
- package/dist/providers/openai/pagination.d.ts.map +1 -1
- package/dist/providers/openai/pagination.js +3 -3
- package/dist/providers/openai/pagination.js.map +1 -1
- package/dist/providers/payu/adapter.d.ts +18 -0
- package/dist/providers/payu/adapter.d.ts.map +1 -0
- package/dist/providers/payu/adapter.js +149 -0
- package/dist/providers/payu/adapter.js.map +1 -0
- package/dist/providers/payu/index.d.ts +3 -0
- package/dist/providers/payu/index.d.ts.map +1 -0
- package/dist/providers/payu/index.js +3 -0
- package/dist/providers/payu/index.js.map +1 -0
- package/dist/providers/payu/pagination.d.ts +11 -0
- package/dist/providers/payu/pagination.d.ts.map +1 -0
- package/dist/providers/payu/pagination.js +48 -0
- package/dist/providers/payu/pagination.js.map +1 -0
- package/dist/providers/perfios/adapter.d.ts +17 -0
- package/dist/providers/perfios/adapter.d.ts.map +1 -0
- package/dist/providers/perfios/adapter.js +140 -0
- package/dist/providers/perfios/adapter.js.map +1 -0
- package/dist/providers/perfios/index.d.ts +3 -0
- package/dist/providers/perfios/index.d.ts.map +1 -0
- package/dist/providers/perfios/index.js +3 -0
- package/dist/providers/perfios/index.js.map +1 -0
- package/dist/providers/perfios/pagination.d.ts +11 -0
- package/dist/providers/perfios/pagination.d.ts.map +1 -0
- package/dist/providers/perfios/pagination.js +17 -0
- package/dist/providers/perfios/pagination.js.map +1 -0
- package/dist/providers/phonepe/adapter.d.ts +18 -0
- package/dist/providers/phonepe/adapter.d.ts.map +1 -0
- package/dist/providers/phonepe/adapter.js +213 -0
- package/dist/providers/phonepe/adapter.js.map +1 -0
- package/dist/providers/phonepe/index.d.ts +3 -0
- package/dist/providers/phonepe/index.d.ts.map +1 -0
- package/dist/providers/phonepe/index.js +3 -0
- package/dist/providers/phonepe/index.js.map +1 -0
- package/dist/providers/phonepe/pagination.d.ts +11 -0
- package/dist/providers/phonepe/pagination.d.ts.map +1 -0
- package/dist/providers/phonepe/pagination.js +15 -0
- package/dist/providers/phonepe/pagination.js.map +1 -0
- package/dist/providers/razorpay/adapter.d.ts +18 -0
- package/dist/providers/razorpay/adapter.d.ts.map +1 -0
- package/dist/providers/razorpay/adapter.js +184 -0
- package/dist/providers/razorpay/adapter.js.map +1 -0
- package/dist/providers/razorpay/index.d.ts +3 -0
- package/dist/providers/razorpay/index.d.ts.map +1 -0
- package/dist/providers/razorpay/index.js +3 -0
- package/dist/providers/razorpay/index.js.map +1 -0
- package/dist/providers/razorpay/pagination.d.ts +11 -0
- package/dist/providers/razorpay/pagination.d.ts.map +1 -0
- package/dist/providers/razorpay/pagination.js +39 -0
- package/dist/providers/razorpay/pagination.js.map +1 -0
- package/dist/providers/sendgrid/adapter.d.ts +25 -0
- package/dist/providers/sendgrid/adapter.d.ts.map +1 -0
- package/dist/providers/sendgrid/adapter.js +191 -0
- package/dist/providers/sendgrid/adapter.js.map +1 -0
- package/dist/providers/sendgrid/index.d.ts +3 -0
- package/dist/providers/sendgrid/index.d.ts.map +1 -0
- package/dist/providers/sendgrid/index.js +3 -0
- package/dist/providers/sendgrid/index.js.map +1 -0
- package/dist/providers/sendgrid/pagination.d.ts +11 -0
- package/dist/providers/sendgrid/pagination.d.ts.map +1 -0
- package/dist/providers/sendgrid/pagination.js +69 -0
- package/dist/providers/sendgrid/pagination.js.map +1 -0
- package/dist/providers/setu/adapter.d.ts +18 -0
- package/dist/providers/setu/adapter.d.ts.map +1 -0
- package/dist/providers/setu/adapter.js +166 -0
- package/dist/providers/setu/adapter.js.map +1 -0
- package/dist/providers/setu/index.d.ts +3 -0
- package/dist/providers/setu/index.d.ts.map +1 -0
- package/dist/providers/setu/index.js +3 -0
- package/dist/providers/setu/index.js.map +1 -0
- package/dist/providers/setu/pagination.d.ts +11 -0
- package/dist/providers/setu/pagination.d.ts.map +1 -0
- package/dist/providers/setu/pagination.js +38 -0
- package/dist/providers/setu/pagination.js.map +1 -0
- package/dist/providers/shiprocket/adapter.d.ts +18 -0
- package/dist/providers/shiprocket/adapter.d.ts.map +1 -0
- package/dist/providers/shiprocket/adapter.js +133 -0
- package/dist/providers/shiprocket/adapter.js.map +1 -0
- package/dist/providers/shiprocket/index.d.ts +3 -0
- package/dist/providers/shiprocket/index.d.ts.map +1 -0
- package/dist/providers/shiprocket/index.js +3 -0
- package/dist/providers/shiprocket/index.js.map +1 -0
- package/dist/providers/shiprocket/pagination.d.ts +12 -0
- package/dist/providers/shiprocket/pagination.d.ts.map +1 -0
- package/dist/providers/shiprocket/pagination.js +54 -0
- package/dist/providers/shiprocket/pagination.js.map +1 -0
- package/dist/providers/stripe/adapter.d.ts +2 -1
- package/dist/providers/stripe/adapter.d.ts.map +1 -1
- package/dist/providers/stripe/adapter.js +44 -8
- package/dist/providers/stripe/adapter.js.map +1 -1
- package/dist/providers/stripe/pagination.d.ts.map +1 -1
- package/dist/providers/stripe/pagination.js +5 -5
- package/dist/providers/stripe/pagination.js.map +1 -1
- package/dist/providers/supabase/adapter.d.ts +17 -0
- package/dist/providers/supabase/adapter.d.ts.map +1 -0
- package/dist/providers/supabase/adapter.js +151 -0
- package/dist/providers/supabase/adapter.js.map +1 -0
- package/dist/providers/supabase/index.d.ts +3 -0
- package/dist/providers/supabase/index.d.ts.map +1 -0
- package/dist/providers/supabase/index.js +3 -0
- package/dist/providers/supabase/index.js.map +1 -0
- package/dist/providers/supabase/pagination.d.ts +11 -0
- package/dist/providers/supabase/pagination.d.ts.map +1 -0
- package/dist/providers/supabase/pagination.js +56 -0
- package/dist/providers/supabase/pagination.js.map +1 -0
- package/dist/providers/twilio/adapter.d.ts +26 -0
- package/dist/providers/twilio/adapter.d.ts.map +1 -0
- package/dist/providers/twilio/adapter.js +200 -0
- package/dist/providers/twilio/adapter.js.map +1 -0
- package/dist/providers/twilio/index.d.ts +3 -0
- package/dist/providers/twilio/index.d.ts.map +1 -0
- package/dist/providers/twilio/index.js +3 -0
- package/dist/providers/twilio/index.js.map +1 -0
- package/dist/providers/twilio/pagination.d.ts +11 -0
- package/dist/providers/twilio/pagination.d.ts.map +1 -0
- package/dist/providers/twilio/pagination.js +57 -0
- package/dist/providers/twilio/pagination.js.map +1 -0
- package/dist/providers/vonage/adapter.d.ts +18 -0
- package/dist/providers/vonage/adapter.d.ts.map +1 -0
- package/dist/providers/vonage/adapter.js +215 -0
- package/dist/providers/vonage/adapter.js.map +1 -0
- package/dist/providers/vonage/index.d.ts +3 -0
- package/dist/providers/vonage/index.d.ts.map +1 -0
- package/dist/providers/vonage/index.js +3 -0
- package/dist/providers/vonage/index.js.map +1 -0
- package/dist/providers/vonage/pagination.d.ts +11 -0
- package/dist/providers/vonage/pagination.d.ts.map +1 -0
- package/dist/providers/vonage/pagination.js +62 -0
- package/dist/providers/vonage/pagination.js.map +1 -0
- package/dist/proxy/cli.js +1 -1
- package/dist/proxy/cli.js.map +1 -1
- package/dist/proxy/server.d.ts +8 -4
- package/dist/proxy/server.d.ts.map +1 -1
- package/dist/proxy/server.js +250 -28
- package/dist/proxy/server.js.map +1 -1
- package/dist/public.d.ts +38 -1
- package/dist/public.d.ts.map +1 -1
- package/dist/public.js +37 -0
- package/dist/public.js.map +1 -1
- package/dist/routers/index.d.ts +3 -0
- package/dist/routers/index.d.ts.map +1 -0
- package/dist/routers/index.js +2 -0
- package/dist/routers/index.js.map +1 -0
- package/dist/routers/payment-router.d.ts +27 -0
- package/dist/routers/payment-router.d.ts.map +1 -0
- package/dist/routers/payment-router.js +53 -0
- package/dist/routers/payment-router.js.map +1 -0
- package/dist/state/index.d.ts +6 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +4 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/memory.d.ts +10 -0
- package/dist/state/memory.d.ts.map +1 -0
- package/dist/state/memory.js +27 -0
- package/dist/state/memory.js.map +1 -0
- package/dist/state/redis.d.ts +17 -0
- package/dist/state/redis.d.ts.map +1 -0
- package/dist/state/redis.js +19 -0
- package/dist/state/redis.js.map +1 -0
- package/dist/state/upstash.d.ts +17 -0
- package/dist/state/upstash.d.ts.map +1 -0
- package/dist/state/upstash.js +17 -0
- package/dist/state/upstash.js.map +1 -0
- package/dist/strategies/circuit-breaker.d.ts.map +1 -1
- package/dist/strategies/circuit-breaker.js +5 -7
- package/dist/strategies/circuit-breaker.js.map +1 -1
- package/dist/strategies/idempotency.d.ts +1 -1
- package/dist/strategies/idempotency.d.ts.map +1 -1
- package/dist/strategies/idempotency.js +2 -3
- package/dist/strategies/idempotency.js.map +1 -1
- package/dist/strategies/pagination.d.ts.map +1 -1
- package/dist/strategies/pagination.js +11 -21
- package/dist/strategies/pagination.js.map +1 -1
- package/dist/strategies/rate-limit.d.ts.map +1 -1
- package/dist/strategies/rate-limit.js +3 -1
- package/dist/strategies/rate-limit.js.map +1 -1
- package/dist/strategies/retry.d.ts +1 -1
- package/dist/strategies/retry.d.ts.map +1 -1
- package/dist/strategies/retry.js +2 -2
- package/dist/strategies/retry.js.map +1 -1
- package/dist/testing/fixtures.d.ts +22 -0
- package/dist/testing/fixtures.d.ts.map +1 -0
- package/dist/testing/fixtures.js +70 -0
- package/dist/testing/fixtures.js.map +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +3 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-adapter.d.ts +58 -0
- package/dist/testing/mock-adapter.d.ts.map +1 -0
- package/dist/testing/mock-adapter.js +108 -0
- package/dist/testing/mock-adapter.js.map +1 -0
- package/dist/validation/drift-detector.d.ts.map +1 -1
- package/dist/validation/drift-detector.js.map +1 -1
- package/dist/validation/schema-storage.d.ts.map +1 -1
- package/dist/validation/schema-storage.js +4 -8
- package/dist/validation/schema-storage.js.map +1 -1
- package/dist/webhooks/index.d.ts +2 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +2 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/verifier.d.ts +21 -0
- package/dist/webhooks/verifier.d.ts.map +1 -0
- package/dist/webhooks/verifier.js +41 -0
- package/dist/webhooks/verifier.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -101,6 +101,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
101
101
|
|
|
102
102
|
4. **Update TypeScript types:** `ProviderClient` methods now use strict `RequestOptions` instead of `any`
|
|
103
103
|
|
|
104
|
+
## [0.1.3] - 2026-05-31
|
|
105
|
+
|
|
106
|
+
### Added
|
|
107
|
+
- **Razorpay adapter** (`src/providers/razorpay/`) — full `ProviderAdapter` implementation for India's largest payment gateway
|
|
108
|
+
- Basic auth with `key_id:key_secret` (supports `username`/`password` or `apiKey`/`custom.keySecret`)
|
|
109
|
+
- `X-Idempotency-Key` header support on write operations
|
|
110
|
+
- Error mapping: 400/422→validation, 401/403→auth, 404→validation, 429→rate_limit, 5xx→provider (retryable)
|
|
111
|
+
- Offset-based pagination via Razorpay's `items[]`/`count`/`skip` list format
|
|
112
|
+
- Idempotency config for orders, payments, refunds, transfers, payouts, subscriptions, invoices
|
|
113
|
+
- 31 contract tests covering all adapter methods
|
|
114
|
+
- Registered 17 additional Indian provider adapters in the built-in registry (Cashfree, PayU, Juspay, MSG91, Exotel, Gupshup, Setu, Decentro, Shiprocket, Delhivery, HyperVerge, Digio, Karza, IDfy, Cleartax, MapMyIndia, Perfios) — implementations pending
|
|
115
|
+
- `ROADMAP.md` — comprehensive future plan covering Indian and international provider coverage, SDK capabilities (webhook verification, streaming, mock adapter, batch operations, India compliance mode, UPI helpers), and version targets through v1.0
|
|
116
|
+
|
|
104
117
|
## [Unreleased]
|
|
105
118
|
|
|
106
119
|
### Added
|
package/README.md
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
|
-
# Meridian
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
<div align="center">
|
|
3
|
+
Meridian
|
|
4
|
+
|
|
5
|
+
**One SDK. Every API. Zero inconsistency.**
|
|
6
|
+
|
|
7
|
+
A TypeScript-first SDK that enforces a single stable contract across all third-party API providers — normalizing error handling, rate limiting, pagination, and response shapes so your application code never changes when providers do. Deep coverage of the Indian tech ecosystem alongside global providers.
|
|
8
|
+
|
|
9
|
+
[](https://www.npmjs.com/package/meridianjs)
|
|
10
|
+
[](https://www.npmjs.com/package/meridianjs)
|
|
11
|
+
[](LICENSE.md)
|
|
12
|
+
[](https://www.typescriptlang.org/)
|
|
13
|
+
[](https://nodejs.org)
|
|
14
|
+
[](https://vitest.dev)
|
|
15
|
+
[](#provider-coverage)
|
|
16
|
+
|
|
17
|
+
[Installation](#installation) · [Quick Start](#quick-start) · [Providers](#provider-coverage) · [Architecture](#architecture) · [API](#public-api) · [Roadmap](ROADMAP.md) · [Contributing](CONTRIBUTING.md)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
4
20
|
|
|
5
21
|
## Problem Statement
|
|
6
22
|
|
|
@@ -8,15 +24,16 @@ Applications integrating multiple third-party APIs face inconsistent response fo
|
|
|
8
24
|
|
|
9
25
|
Meridian provides a single abstraction layer that normalizes these differences, allowing applications to interact with any provider through a consistent interface while maintaining type safety and resilience patterns.
|
|
10
26
|
|
|
11
|
-
|
|
27
|
+
```typescript
|
|
28
|
+
// Same interface. Every provider. Always.
|
|
29
|
+
const { data, meta } = await meridian.provider("razorpay").get("/v1/payments/pay_123");
|
|
30
|
+
console.log(meta.rateLimit.remaining); // normalized from any provider
|
|
31
|
+
console.log(meta.provider); // "razorpay"
|
|
32
|
+
```
|
|
12
33
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- GraphQL support (v1)
|
|
17
|
-
- Webhook handling (v1)
|
|
18
|
-
- Multi-region routing
|
|
19
|
-
- Built-in caching (applications can layer caching on top)
|
|
34
|
+
If Razorpay changes their error format tomorrow, you don't change a line of your code.
|
|
35
|
+
|
|
36
|
+
---
|
|
20
37
|
|
|
21
38
|
## Installation
|
|
22
39
|
|
|
@@ -24,153 +41,497 @@ Meridian provides a single abstraction layer that normalizes these differences,
|
|
|
24
41
|
npm install meridianjs
|
|
25
42
|
```
|
|
26
43
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- **Node.js ≥18.0.0** (required for `fetch`, `Headers`, `AbortController`, `crypto.randomUUID`)
|
|
44
|
+
**Requires Node.js ≥ 18.0.0** (`fetch`, `Headers`, `AbortController`, `crypto.randomUUID` used natively — no polyfills needed).
|
|
30
45
|
|
|
31
|
-
|
|
46
|
+
---
|
|
32
47
|
|
|
33
|
-
|
|
48
|
+
## Quick Start
|
|
34
49
|
|
|
35
50
|
```typescript
|
|
36
51
|
import { Meridian } from "meridianjs";
|
|
37
52
|
|
|
38
|
-
// ✅ CORRECT: Async initialization
|
|
39
53
|
const meridian = await Meridian.create({
|
|
54
|
+
localUnsafe: true, // for local dev — see State Management for production
|
|
55
|
+
razorpay: {
|
|
56
|
+
auth: {
|
|
57
|
+
username: process.env.RAZORPAY_KEY_ID,
|
|
58
|
+
password: process.env.RAZORPAY_KEY_SECRET,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
40
61
|
github: {
|
|
41
62
|
auth: { token: process.env.GITHUB_TOKEN },
|
|
42
63
|
},
|
|
43
|
-
localUnsafe: true, // Required for local development without StateStorage
|
|
44
64
|
});
|
|
45
65
|
|
|
46
|
-
|
|
47
|
-
|
|
66
|
+
// Payments
|
|
67
|
+
const order = await meridian.provider("razorpay").post("/v1/orders", {
|
|
68
|
+
body: { amount: 50000, currency: "INR" },
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// Paginate automatically — cursors handled for you
|
|
72
|
+
for await (const page of meridian.provider("razorpay").paginate("/v1/payments")) {
|
|
73
|
+
console.log(page.data.items);
|
|
74
|
+
}
|
|
48
75
|
```
|
|
49
76
|
|
|
50
|
-
|
|
77
|
+
Every response has the same shape, regardless of provider:
|
|
51
78
|
|
|
52
|
-
|
|
79
|
+
```typescript
|
|
80
|
+
{
|
|
81
|
+
data: T,
|
|
82
|
+
meta: {
|
|
83
|
+
provider: string,
|
|
84
|
+
requestId: string,
|
|
85
|
+
rateLimit: { limit: number, remaining: number, reset: Date },
|
|
86
|
+
pagination?: { hasNext: boolean, cursor?: string },
|
|
87
|
+
warnings: string[],
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
53
91
|
|
|
54
|
-
|
|
92
|
+
---
|
|
55
93
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
94
|
+
## Provider Coverage
|
|
95
|
+
|
|
96
|
+
31 adapters, fully implemented and contract-tested (661 tests).
|
|
97
|
+
|
|
98
|
+
### Global
|
|
99
|
+
|
|
100
|
+
| Provider | Category | Auth |
|
|
101
|
+
| --- | --- | --- |
|
|
102
|
+
| **GitHub** | Developer Tools | Bearer token |
|
|
103
|
+
| **Anthropic** | AI / LLM | `x-api-key` header |
|
|
104
|
+
| **OpenAI** | AI / LLM | Bearer token |
|
|
105
|
+
| **Stripe** | Payments | Basic (`key:`) · ✅ webhook |
|
|
106
|
+
| **Twilio** | Communications | Basic (`SID:AuthToken`) · ✅ webhook |
|
|
107
|
+
| **SendGrid** | Communications | Bearer token · ✅ webhook |
|
|
108
|
+
| **Mailgun** | Communications | Basic (`api:key`) · ✅ webhook |
|
|
109
|
+
| **Vonage** | Communications | Query parameter (`api_key:api_secret`) · ✅ webhook |
|
|
110
|
+
| **Adyen** | Payments | Basic (`apiKey:`) · ✅ webhook |
|
|
111
|
+
| **Google Gemini** | AI / LLM | Bearer token / `x-goog-api-key` |
|
|
112
|
+
| **Auth0** | Auth / Identity | Bearer token |
|
|
113
|
+
| **HubSpot** | CRM | Bearer token |
|
|
114
|
+
| **Supabase** | Databases | Bearer token / `apikey` |
|
|
115
|
+
|
|
116
|
+
### India — Payments
|
|
117
|
+
|
|
118
|
+
| Provider | Auth | Webhook |
|
|
119
|
+
| --- | --- | --- |
|
|
120
|
+
| **Razorpay** | Basic (`key_id:key_secret`) | ✅ HMAC-SHA256 |
|
|
121
|
+
| **Cashfree** | `x-client-id` + `x-client-secret` | ✅ HMAC-SHA256 |
|
|
122
|
+
| **PayU** | Basic (`key:salt`) | ✅ HMAC-SHA512 |
|
|
123
|
+
| **Juspay** | Basic (`apiKey:`) | ✅ HMAC-SHA256 |
|
|
124
|
+
|
|
125
|
+
### India — Communications
|
|
126
|
+
|
|
127
|
+
| Provider | Auth | Key Endpoints |
|
|
128
|
+
| --- | --- | --- |
|
|
129
|
+
| **MSG91** | `authkey` header | SMS, OTP, WhatsApp, Email · ✅ webhook |
|
|
130
|
+
| **Exotel** | Basic (`SID:APIKey`) | Calls, SMS, Virtual Numbers · ✅ webhook |
|
|
131
|
+
| **Gupshup** | `apikey` header | WhatsApp Business, SMS · ✅ webhook |
|
|
132
|
+
|
|
133
|
+
### India — Banking / Fintech
|
|
134
|
+
|
|
135
|
+
| Provider | Auth | Key Endpoints |
|
|
136
|
+
| --- | --- | --- |
|
|
137
|
+
| **Setu** | Bearer token | AA consent, UPI, BBPS |
|
|
138
|
+
| **Decentro** | `clientId\|clientSecret\|moduleSecret` | KYC, UPI, Virtual Accounts |
|
|
139
|
+
| **Perfios** | `x-api-key` header | Bank statement analysis, ITR |
|
|
140
|
+
|
|
141
|
+
### India — Logistics
|
|
142
|
+
|
|
143
|
+
| Provider | Auth | Key Endpoints |
|
|
144
|
+
| --- | --- | --- |
|
|
145
|
+
| **Shiprocket** | Bearer JWT | Orders, Shipments, Tracking, NDR |
|
|
146
|
+
| **Delhivery** | Bearer token | Waybills, Tracking, COD |
|
|
147
|
+
|
|
148
|
+
### India — KYC / Identity / eSign
|
|
149
|
+
|
|
150
|
+
| Provider | Auth | Key Endpoints |
|
|
151
|
+
| --- | --- | --- |
|
|
152
|
+
| **HyperVerge** | `appId\|appKey` headers | Face match, Liveness, OCR |
|
|
153
|
+
| **Digio** | Basic (`clientId:clientSecret`) | eSign, eStamp, Documents |
|
|
154
|
+
| **Karza** | `x-karza-key` header | PAN, GST, Bank verify, ITR |
|
|
155
|
+
| **IDfy** | `api-key` + `account-id` headers | Identity checks, Background verify |
|
|
156
|
+
|
|
157
|
+
### India — Tax / Compliance / Maps
|
|
158
|
+
|
|
159
|
+
| Provider | Auth | Key Endpoints |
|
|
160
|
+
| --- | --- | --- |
|
|
161
|
+
| **Cleartax** | `x-cleartax-auth-token` | GST filing, e-invoicing, IRN |
|
|
162
|
+
| **MapMyIndia** | Bearer token | Geocode, Directions, Places |
|
|
163
|
+
|
|
164
|
+
> **Planned next:** BillDesk, Freshworks, Signzy — see [ROADMAP.md](ROADMAP.md)
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Architecture
|
|
169
|
+
|
|
170
|
+
### Request Flow
|
|
171
|
+
|
|
172
|
+
```mermaid
|
|
173
|
+
flowchart TD
|
|
174
|
+
App(["🖥️ Your Application\nmeridian.provider('x').post(...)"])
|
|
175
|
+
|
|
176
|
+
subgraph SDK["Meridian SDK"]
|
|
177
|
+
direction TB
|
|
178
|
+
|
|
179
|
+
subgraph Pipeline["Request Pipeline"]
|
|
180
|
+
direction LR
|
|
181
|
+
RL["🪣 Rate Limiter\nToken bucket + adaptive backoff"]
|
|
182
|
+
CB["⚡ Circuit Breaker\nClosed / Open / Half-open"]
|
|
183
|
+
IK["🔑 Idempotency Resolver\nSAFE / CONDITIONAL / IDEMPOTENT"]
|
|
184
|
+
RT["🔄 Retry Strategy\nExp. backoff + jitter"]
|
|
185
|
+
AU["🔐 Auth Strategy\nauthStrategy(config)"]
|
|
186
|
+
BQ["🔧 Build Request\nbuildRequest(input)"]
|
|
187
|
+
RL --> CB --> IK --> RT --> AU --> BQ
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
subgraph Adapters["Provider Adapters (22)"]
|
|
191
|
+
direction LR
|
|
192
|
+
PAY["💳 Payments\nRazorpay · Cashfree · PayU · Juspay · Stripe"]
|
|
193
|
+
COM["📱 Communications\nMSG91 · Exotel · Gupshup"]
|
|
194
|
+
FIN["🏦 Banking / Fintech\nSetu · Decentro · Perfios"]
|
|
195
|
+
LOG["📦 Logistics\nShiprocket · Delhivery"]
|
|
196
|
+
KYC["🪪 KYC / Identity\nHyperVerge · Digio · Karza · IDfy"]
|
|
197
|
+
TAX["🧾 Tax / Maps\nCleartax · MapMyIndia"]
|
|
198
|
+
GLB["🌐 Global\nGitHub · OpenAI · Anthropic"]
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
OBS["📊 Observability\nlogRequest · logResponse · logError · recordMetric"]
|
|
202
|
+
STATE[("💾 State Storage\nCircuit breaker · Rate limiter\nRedis / In-memory")]
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
EXT[["🌍 External APIs"]]
|
|
206
|
+
RES(["✅ NormalizedResponse<T>\n{ data, meta: { provider, rateLimit, pagination } }"])
|
|
207
|
+
ERR(["❌ MeridianError\n{ category, retryable, status, provider }"])
|
|
208
|
+
|
|
209
|
+
App --> RL
|
|
210
|
+
BQ --> Adapters
|
|
211
|
+
Adapters -->|fetch| EXT
|
|
212
|
+
EXT -->|raw response| Adapters
|
|
213
|
+
Adapters -->|parseResponse| RES
|
|
214
|
+
Adapters -->|parseError| ERR
|
|
215
|
+
Pipeline <-->|log + metrics| OBS
|
|
216
|
+
CB <-->|read/write| STATE
|
|
217
|
+
RL <-->|read/write| STATE
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Pipeline Stages
|
|
221
|
+
|
|
222
|
+
```text
|
|
223
|
+
Your Code
|
|
224
|
+
│
|
|
225
|
+
▼
|
|
226
|
+
┌───────────────────────────────────────────────────────────────────┐
|
|
227
|
+
│ Request Pipeline │
|
|
228
|
+
│ │
|
|
229
|
+
│ ① Rate Limiter ② Circuit Breaker ③ Idempotency │
|
|
230
|
+
│ ┌─────────────┐ ┌───────────────┐ ┌─────────────┐ │
|
|
231
|
+
│ │ Token bucket│ │ CLOSED │ │ Resolve or │ │
|
|
232
|
+
│ │ Adaptive │────────►│ OPEN │─────►│ generate │ │
|
|
233
|
+
│ │ backoff │ │ HALF_OPEN │ │ key │ │
|
|
234
|
+
│ └─────────────┘ └───────────────┘ └─────────────┘ │
|
|
235
|
+
│ │ │
|
|
236
|
+
│ ④ Retry Strategy ⑤ Auth Strategy ⑥ Build Request │
|
|
237
|
+
│ ┌─────────────┐ ┌───────────────┐ ┌──────────────────┐ │
|
|
238
|
+
│ │ Exp backoff │ │ authStrategy()│ │ buildRequest() │ │
|
|
239
|
+
│ │ + jitter │◄────────│ → AuthToken │ │ URL · headers │ │
|
|
240
|
+
│ │ retryable? │ └───────────────┘ │ body · auth │ │
|
|
241
|
+
│ └─────────────┘ └──────────────────┘ │
|
|
242
|
+
└──────────────────────────────────────────────────┬────────────────┘
|
|
243
|
+
│
|
|
244
|
+
┌──────────▼───────────┐
|
|
245
|
+
│ Provider Adapter │
|
|
246
|
+
│ buildRequest() │
|
|
247
|
+
│ parseResponse() │
|
|
248
|
+
│ parseError() │
|
|
249
|
+
│ rateLimitPolicy() │
|
|
250
|
+
│ paginationStrategy()│
|
|
251
|
+
└──────────┬───────────┘
|
|
252
|
+
│ fetch()
|
|
253
|
+
▼
|
|
254
|
+
External API
|
|
255
|
+
│
|
|
256
|
+
┌────────────────┴────────────────┐
|
|
257
|
+
▼ ▼
|
|
258
|
+
NormalizedResponse<T> MeridianError
|
|
259
|
+
{ data, meta: { { category,
|
|
260
|
+
provider, requestId, retryable,
|
|
261
|
+
rateLimit, pagination } } provider, status }
|
|
262
|
+
```
|
|
59
263
|
|
|
264
|
+
### Multi-Provider Isolation
|
|
265
|
+
|
|
266
|
+
```text
|
|
267
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
268
|
+
│ Meridian Instance │
|
|
269
|
+
│ │
|
|
270
|
+
│ provider("razorpay") ──► [ CB ] [ RL ] ──► RazorpayAdapter │
|
|
271
|
+
│ provider("cashfree") ──► [ CB ] [ RL ] ──► CashfreeAdapter │
|
|
272
|
+
│ provider("karza") ──► [ CB ] [ RL ] ──► KarzaAdapter │
|
|
273
|
+
│ provider("shiprocket") ──► [ CB ] [ RL ] ──► ShiprocketAdapter │
|
|
274
|
+
│ provider("github") ──► [ CB ] [ RL ] ──► GitHubAdapter │
|
|
275
|
+
│ │
|
|
276
|
+
│ CB = Circuit Breaker (independent per provider) │
|
|
277
|
+
│ RL = Rate Limiter (independent per provider) │
|
|
278
|
+
│ │
|
|
279
|
+
│ One provider tripping its circuit breaker never affects others. │
|
|
280
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
281
|
+
│ │
|
|
282
|
+
▼ ▼
|
|
283
|
+
StateStorage (Redis) Observability Adapters
|
|
284
|
+
circuit breaker state Console / OTel / Prometheus
|
|
285
|
+
rate limiter state logs · metrics · traces
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## Usage Examples
|
|
291
|
+
|
|
292
|
+
### Cashfree Payment Order
|
|
293
|
+
|
|
294
|
+
```typescript
|
|
60
295
|
const meridian = await Meridian.create({
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
296
|
+
localUnsafe: true,
|
|
297
|
+
cashfree: {
|
|
298
|
+
auth: {
|
|
299
|
+
custom: {
|
|
300
|
+
clientId: process.env.CASHFREE_CLIENT_ID,
|
|
301
|
+
clientSecret: process.env.CASHFREE_CLIENT_SECRET,
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
const order = await meridian.provider("cashfree").post("/pg/orders", {
|
|
308
|
+
body: {
|
|
309
|
+
order_amount: 100.00,
|
|
310
|
+
order_currency: "INR",
|
|
311
|
+
customer_details: { customer_id: "user_123", customer_phone: "9999999999" },
|
|
65
312
|
},
|
|
313
|
+
idempotencyKey: "order-xyz-123",
|
|
66
314
|
});
|
|
67
315
|
```
|
|
68
316
|
|
|
69
|
-
|
|
317
|
+
### Karza PAN Verification
|
|
70
318
|
|
|
71
|
-
|
|
319
|
+
```typescript
|
|
320
|
+
const result = await meridian.provider("karza").post("/v3/pan/verify", {
|
|
321
|
+
body: { pan: "ABCDE1234F", consent: "Y" },
|
|
322
|
+
});
|
|
323
|
+
```
|
|
72
324
|
|
|
73
|
-
|
|
325
|
+
### Webhook Verification
|
|
326
|
+
|
|
327
|
+
```typescript
|
|
328
|
+
import { CashfreeAdapter, PayuAdapter } from "meridianjs";
|
|
329
|
+
|
|
330
|
+
// Cashfree — HMAC-SHA256, base64
|
|
331
|
+
const cfAdapter = new CashfreeAdapter();
|
|
332
|
+
const isValid = cfAdapter.verifyWebhook(
|
|
333
|
+
req.rawBody,
|
|
334
|
+
req.headers["x-webhook-signature"],
|
|
335
|
+
process.env.CASHFREE_WEBHOOK_SECRET
|
|
336
|
+
);
|
|
337
|
+
|
|
338
|
+
// PayU — HMAC-SHA512, hex
|
|
339
|
+
const payuAdapter = new PayuAdapter();
|
|
340
|
+
const isValid = payuAdapter.verifyWebhook(
|
|
341
|
+
req.rawBody,
|
|
342
|
+
req.headers["x-verify"],
|
|
343
|
+
process.env.PAYU_SALT
|
|
344
|
+
);
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Unified Error Handling
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
import { MeridianError } from "meridianjs";
|
|
351
|
+
|
|
352
|
+
try {
|
|
353
|
+
const result = await meridian.provider("razorpay").post("/v1/orders", { body: { ... } });
|
|
354
|
+
} catch (err) {
|
|
355
|
+
if (err instanceof MeridianError) {
|
|
356
|
+
switch (err.category) {
|
|
357
|
+
case "auth": // bad credentials — do not retry
|
|
358
|
+
break;
|
|
359
|
+
case "rate_limit": // check err.retryAfter for when to retry
|
|
360
|
+
break;
|
|
361
|
+
case "validation": // bad request — fix the payload
|
|
362
|
+
break;
|
|
363
|
+
case "provider": // upstream 5xx — safe to retry (err.retryable === true)
|
|
364
|
+
break;
|
|
365
|
+
case "network": // connection issue — safe to retry
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## State Management
|
|
375
|
+
|
|
376
|
+
### Local Development
|
|
74
377
|
|
|
75
378
|
```typescript
|
|
76
379
|
const meridian = await Meridian.create({
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
github: {
|
|
80
|
-
auth: { token: process.env.GITHUB_TOKEN },
|
|
81
|
-
},
|
|
380
|
+
localUnsafe: true, // in-memory — fine for dev, never for production
|
|
381
|
+
razorpay: { auth: { ... } },
|
|
82
382
|
});
|
|
83
383
|
```
|
|
84
384
|
|
|
85
|
-
|
|
385
|
+
### Production (Serverless / Distributed)
|
|
86
386
|
|
|
87
|
-
|
|
387
|
+
```typescript
|
|
388
|
+
import { RedisStateStorage } from "./your-redis-storage.js";
|
|
88
389
|
|
|
89
|
-
|
|
390
|
+
const meridian = await Meridian.create({
|
|
391
|
+
mode: "distributed",
|
|
392
|
+
stateStorage: new RedisStateStorage(redisClient), // required — startup fails without it
|
|
393
|
+
razorpay: { auth: { ... } },
|
|
394
|
+
});
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Without `stateStorage` in distributed mode, startup will fail.** Circuit breaker and rate limiter state reset on every cold start without it — acceptable for dev, a bug in production.
|
|
90
398
|
|
|
91
|
-
|
|
399
|
+
---
|
|
92
400
|
|
|
93
|
-
|
|
401
|
+
## Safety Guarantees
|
|
94
402
|
|
|
95
|
-
|
|
403
|
+
| Guarantee | Behaviour |
|
|
404
|
+
| --- | --- |
|
|
405
|
+
| **Fail-fast init** | All methods throw if called before `Meridian.create()` resolves |
|
|
406
|
+
| **Fail-closed state** | `distributed` mode requires `StateStorage` — startup fails without it |
|
|
407
|
+
| **Secret redaction** | `authorization`, `cookie`, `token`, `apiKey` auto-redacted in all logs, errors, and metrics |
|
|
408
|
+
| **No silent degradation** | Invalid configs fail at startup; adapter validation failures are explicit |
|
|
409
|
+
| **Pagination safety** | Cycle detection + 1000-page hard limit prevent infinite loops |
|
|
96
410
|
|
|
97
|
-
|
|
411
|
+
---
|
|
98
412
|
|
|
99
413
|
## Public API
|
|
100
414
|
|
|
101
|
-
### Meridian
|
|
415
|
+
### `Meridian.create(config)`
|
|
102
416
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
417
|
+
```typescript
|
|
418
|
+
const meridian = await Meridian.create({
|
|
419
|
+
razorpay: { auth: { username: "...", password: "..." } },
|
|
420
|
+
github: { auth: { token: "..." } },
|
|
421
|
+
|
|
422
|
+
defaults: {
|
|
423
|
+
retry: { maxRetries: 3, baseDelay: 100, maxDelay: 5000, jitter: true },
|
|
424
|
+
circuitBreaker: { failureThreshold: 5, timeout: 30000 },
|
|
425
|
+
rateLimit: { tokensPerSecond: 10, maxTokens: 100 },
|
|
426
|
+
timeout: 10000,
|
|
427
|
+
},
|
|
428
|
+
|
|
429
|
+
observability: new ConsoleObservability(),
|
|
430
|
+
compliance: { piiRedaction: true, auditLog: true },
|
|
431
|
+
mode: "distributed",
|
|
432
|
+
stateStorage: new RedisStateStorage(client),
|
|
433
|
+
});
|
|
434
|
+
```
|
|
106
435
|
|
|
107
436
|
### Provider Client
|
|
108
437
|
|
|
109
|
-
|
|
438
|
+
```typescript
|
|
439
|
+
const client = meridian.provider("razorpay");
|
|
440
|
+
|
|
441
|
+
client.get<T>(endpoint, options?) // GET
|
|
442
|
+
client.post<T>(endpoint, options?) // POST
|
|
443
|
+
client.put<T>(endpoint, options?) // PUT
|
|
444
|
+
client.patch<T>(endpoint, options?) // PATCH
|
|
445
|
+
client.delete<T>(endpoint, options?) // DELETE
|
|
446
|
+
client.paginate<T>(endpoint, options?) // AsyncGenerator — auto-follows cursors
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### `MeridianError`
|
|
110
450
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
451
|
+
```typescript
|
|
452
|
+
error.category // "auth" | "rate_limit" | "network" | "validation" | "provider"
|
|
453
|
+
error.code // "AUTH_FAILED" | "RATE_LIMITED" | "NOT_FOUND" | "BAD_REQUEST" | "UPSTREAM_5XX" | "NETWORK_ERROR" | "UNKNOWN"
|
|
454
|
+
error.retryable // boolean
|
|
455
|
+
error.provider // "razorpay" | "cashfree" | "github" | ...
|
|
456
|
+
error.status // HTTP status if applicable
|
|
457
|
+
error.retryAfter // Date — present on rate_limit errors
|
|
458
|
+
error.metadata // sanitized provider context
|
|
459
|
+
```
|
|
117
460
|
|
|
118
|
-
|
|
461
|
+
---
|
|
119
462
|
|
|
120
|
-
|
|
463
|
+
## Agent Proxy
|
|
121
464
|
|
|
122
|
-
|
|
465
|
+
Meridian ships a built-in HTTP proxy for AI agents and LLM runtimes — rate limiting, circuit breaking, and secret redaction apply automatically to every request.
|
|
123
466
|
|
|
124
467
|
```bash
|
|
125
|
-
|
|
468
|
+
export RAZORPAY_KEY_ID="rzp_live_..." RAZORPAY_KEY_SECRET="..."
|
|
126
469
|
export GITHUB_TOKEN="ghp_..."
|
|
127
|
-
export ANTHROPIC_API_KEY="sk-ant-..."
|
|
128
|
-
export OPENAI_API_KEY="sk-..."
|
|
129
470
|
export STRIPE_SECRET_KEY="sk_live_..."
|
|
130
471
|
|
|
131
|
-
npx boundary-proxy
|
|
132
|
-
npx boundary-proxy 8080
|
|
133
|
-
BOUNDARY_PROXY_PORT=9000 npx boundary-proxy
|
|
472
|
+
npx boundary-proxy # http://127.0.0.1:4242
|
|
473
|
+
npx boundary-proxy 8080 # custom port
|
|
134
474
|
```
|
|
135
475
|
|
|
136
|
-
|
|
476
|
+
Route pattern: `http://localhost:4242/<provider>/<endpoint>`
|
|
137
477
|
|
|
138
|
-
```
|
|
139
|
-
|
|
478
|
+
```text
|
|
479
|
+
GET /github/repos/octocat/Hello-World → api.github.com
|
|
480
|
+
POST /razorpay/v1/orders → api.razorpay.com
|
|
481
|
+
GET /anthropic/v1/messages → api.anthropic.com
|
|
140
482
|
```
|
|
141
483
|
|
|
142
|
-
|
|
143
|
-
|---|---|
|
|
144
|
-
| `GET /github/repos/octocat/Hello-World` | `GET https://api.github.com/repos/octocat/Hello-World` |
|
|
145
|
-
| `POST /anthropic/v1/messages` | `POST https://api.anthropic.com/v1/messages` |
|
|
146
|
-
| `GET /openai/v1/models` | `GET https://api.openai.com/v1/models` |
|
|
147
|
-
| `GET /stripe/v1/customers` | `GET https://api.stripe.com/v1/customers` |
|
|
484
|
+
---
|
|
148
485
|
|
|
149
|
-
|
|
486
|
+
## Project Status
|
|
150
487
|
|
|
151
|
-
|
|
488
|
+
**v0.1.3** — 22 adapters, 565 tests, zero TypeScript errors. Core pipeline stable. API surface settled — all additions are additive and non-breaking.
|
|
152
489
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
490
|
+
| Milestone | Status |
|
|
491
|
+
| --- | --- |
|
|
492
|
+
| Core pipeline (rate limit, circuit breaker, retry, idempotency) | ✅ Stable |
|
|
493
|
+
| 22 provider adapters (global + Indian ecosystem) | ✅ Stable |
|
|
494
|
+
| Contract test coverage for all adapters | ✅ 565 tests |
|
|
495
|
+
| Webhook verification (Cashfree, PayU, Decentro, Shiprocket) | ✅ Partial |
|
|
496
|
+
| Webhook verification on all remaining adapters | 🔄 Next |
|
|
497
|
+
| Twilio + SendGrid | 📋 v0.2 |
|
|
498
|
+
| Streaming support (OpenAI / Anthropic SSE) | 📋 v0.4 |
|
|
499
|
+
| Mock adapter for testing | 📋 v0.4 |
|
|
500
|
+
| India Compliance Mode (DPDPA) | 📋 v0.5 |
|
|
501
|
+
|
|
502
|
+
See [ROADMAP.md](ROADMAP.md) for the full plan and version targets.
|
|
503
|
+
|
|
504
|
+
---
|
|
165
505
|
|
|
166
|
-
|
|
167
|
-
|
|
506
|
+
## Non-Goals
|
|
507
|
+
|
|
508
|
+
- UI components or dashboards
|
|
509
|
+
- API mocking / stubbing (planned v0.4)
|
|
510
|
+
- Request recording or replay
|
|
511
|
+
- GraphQL (planned v1)
|
|
512
|
+
- Multi-region routing
|
|
513
|
+
- Built-in caching (layer it on top)
|
|
514
|
+
|
|
515
|
+
---
|
|
516
|
+
|
|
517
|
+
## Contributing
|
|
518
|
+
|
|
519
|
+
```bash
|
|
520
|
+
git clone https://github.com/Raghaverma/meridianjs
|
|
521
|
+
npm install
|
|
522
|
+
npm test # 565 tests
|
|
523
|
+
npm run typecheck # zero errors
|
|
524
|
+
npm run lint
|
|
168
525
|
```
|
|
169
526
|
|
|
170
|
-
|
|
527
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the adapter-building guide, error mapping rules, and PR checklist.
|
|
171
528
|
|
|
172
|
-
|
|
529
|
+
---
|
|
173
530
|
|
|
174
531
|
## License
|
|
175
532
|
|
|
176
|
-
MIT
|
|
533
|
+
MIT — see [LICENSE.md](LICENSE.md).
|
|
534
|
+
|
|
535
|
+
---
|
|
536
|
+
|
|
537
|
+
Built for the Indian and global developer ecosystem · TypeScript-first · Zero runtime dependencies
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-validator.d.ts","sourceRoot":"","sources":["../../src/core/adapter-validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapter-validator.d.ts","sourceRoot":"","sources":["../../src/core/adapter-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA+Q3B;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,eAAe,CAgBtE"}
|