@elyonar/einvoice-mcp 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +133 -0
  3. package/bin/cli.js +2 -0
  4. package/dist/client/billing-client.d.ts +19 -0
  5. package/dist/client/billing-client.d.ts.map +1 -0
  6. package/dist/client/billing-client.js +62 -0
  7. package/dist/client/billing-client.js.map +1 -0
  8. package/dist/client/http-client.d.ts +44 -0
  9. package/dist/client/http-client.d.ts.map +1 -0
  10. package/dist/client/http-client.js +117 -0
  11. package/dist/client/http-client.js.map +1 -0
  12. package/dist/client/index.d.ts +4 -0
  13. package/dist/client/index.d.ts.map +1 -0
  14. package/dist/client/index.js +12 -0
  15. package/dist/client/index.js.map +1 -0
  16. package/dist/client/invoice-client.d.ts +42 -0
  17. package/dist/client/invoice-client.d.ts.map +1 -0
  18. package/dist/client/invoice-client.js +107 -0
  19. package/dist/client/invoice-client.js.map +1 -0
  20. package/dist/index.d.ts +17 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +87 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/tools/billing-tools.d.ts +11 -0
  25. package/dist/tools/billing-tools.d.ts.map +1 -0
  26. package/dist/tools/billing-tools.js +209 -0
  27. package/dist/tools/billing-tools.js.map +1 -0
  28. package/dist/tools/buyer-tools.d.ts +11 -0
  29. package/dist/tools/buyer-tools.d.ts.map +1 -0
  30. package/dist/tools/buyer-tools.js +148 -0
  31. package/dist/tools/buyer-tools.js.map +1 -0
  32. package/dist/tools/index.d.ts +5 -0
  33. package/dist/tools/index.d.ts.map +1 -0
  34. package/dist/tools/index.js +16 -0
  35. package/dist/tools/index.js.map +1 -0
  36. package/dist/tools/invoice-tools.d.ts +11 -0
  37. package/dist/tools/invoice-tools.d.ts.map +1 -0
  38. package/dist/tools/invoice-tools.js +319 -0
  39. package/dist/tools/invoice-tools.js.map +1 -0
  40. package/dist/tools/seller-tools.d.ts +11 -0
  41. package/dist/tools/seller-tools.d.ts.map +1 -0
  42. package/dist/tools/seller-tools.js +149 -0
  43. package/dist/tools/seller-tools.js.map +1 -0
  44. package/dist/types/billing.d.ts +145 -0
  45. package/dist/types/billing.d.ts.map +1 -0
  46. package/dist/types/billing.js +4 -0
  47. package/dist/types/billing.js.map +1 -0
  48. package/dist/types/index.d.ts +3 -0
  49. package/dist/types/index.d.ts.map +1 -0
  50. package/dist/types/index.js +19 -0
  51. package/dist/types/index.js.map +1 -0
  52. package/dist/types/invoice.d.ts +197 -0
  53. package/dist/types/invoice.d.ts.map +1 -0
  54. package/dist/types/invoice.js +4 -0
  55. package/dist/types/invoice.js.map +1 -0
  56. package/dist/utils/format.d.ts +14 -0
  57. package/dist/utils/format.d.ts.map +1 -0
  58. package/dist/utils/format.js +51 -0
  59. package/dist/utils/format.js.map +1 -0
  60. package/dist/utils/index.d.ts +2 -0
  61. package/dist/utils/index.d.ts.map +1 -0
  62. package/dist/utils/index.js +8 -0
  63. package/dist/utils/index.js.map +1 -0
  64. package/package.json +59 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Elyonar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,133 @@
1
+ # @einvoice/mcp-server
2
+
3
+ MCP (Model Context Protocol) server for the E-Invoice platform. Enables AI agents like Claude to manage invoices, sellers, buyers, and billing through Nigeria's FIRS-compliant e-invoicing system.
4
+
5
+ ## Quick Start
6
+
7
+ ### Claude Desktop Configuration
8
+
9
+ Add to your `claude_desktop_config.json`:
10
+
11
+ ```json
12
+ {
13
+ "mcpServers": {
14
+ "einvoice": {
15
+ "command": "npx",
16
+ "args": ["-y", "@einvoice/mcp-server"],
17
+ "env": {
18
+ "EINVOICE_API_KEY": "sk_live_your_key_here",
19
+ "EINVOICE_BASE_URL": "https://api.einvoice.ng"
20
+ }
21
+ }
22
+ }
23
+ }
24
+ ```
25
+
26
+ ### Environment Variables
27
+
28
+ | Variable | Required | Description |
29
+ |----------|----------|-------------|
30
+ | `EINVOICE_API_KEY` | Yes | API key (`sk_live_...` or `sk_test_...`) |
31
+ | `EINVOICE_BASE_URL` | No | API gateway URL (default: `https://api.einvoice.ng`) |
32
+ | `EINVOICE_REQUEST_TIMEOUT` | No | Request timeout in ms (default: `30000`) |
33
+ | `EINVOICE_RETRY_ATTEMPTS` | No | Max retries for failed requests (default: `3`) |
34
+
35
+ ## Available Tools (41)
36
+
37
+ ### Invoice Tools (15)
38
+ - `create_invoice` — Create a new invoice in draft status
39
+ - `get_invoice` — Get invoice details by ID
40
+ - `list_invoices` — List/filter/search invoices
41
+ - `update_invoice` — Update a draft invoice
42
+ - `delete_invoice` — Delete a draft invoice
43
+ - `submit_invoice` — Submit to FIRS
44
+ - `batch_submit_invoices` — Batch submit multiple invoices
45
+ - `retry_invoice_submission` — Retry a failed submission
46
+ - `cancel_invoice` — Cancel an accepted invoice (creates credit note)
47
+ - `get_invoice_status` — Get status from local DB
48
+ - `query_invoice_status` — Query FIRS for real-time status
49
+ - `validate_invoice` — Validate without creating
50
+ - `download_invoice` — Get PDF/XML download URL
51
+ - `get_invoice_statistics` — Analytics and metrics
52
+ - `get_invoice_setup` — Reference data for invoice creation
53
+
54
+ ### Seller Tools (7)
55
+ - `create_seller` — Register a new seller
56
+ - `get_seller` — Get seller details
57
+ - `list_sellers` — List/search sellers
58
+ - `update_seller` — Update seller (TIN immutable)
59
+ - `delete_seller` — Delete seller (no invoices)
60
+ - `verify_seller_tin` — Trigger TIN verification
61
+ - `get_seller_verification_status` — Check TIN status
62
+
63
+ ### Buyer Tools (7)
64
+ - `create_buyer` — Register a new buyer
65
+ - `get_buyer` — Get buyer details
66
+ - `list_buyers` — List/search buyers
67
+ - `update_buyer` — Update buyer (TIN immutable)
68
+ - `delete_buyer` — Delete buyer (no invoices)
69
+ - `verify_buyer_tin` — Trigger TIN verification
70
+ - `get_buyer_verification_status` — Check TIN status
71
+
72
+ ### Billing Tools (12)
73
+ - `get_billing_account` — Credit balance and account status
74
+ - `check_balance` — Verify sufficient credits before operations
75
+ - `get_billing_setup` — Full billing overview
76
+ - `get_subscription_plans` — Available subscription plans
77
+ - `get_credit_packages` — Available credit packages for purchase
78
+ - `get_active_subscription` — Current subscription details
79
+ - `get_subscription_history` — Past subscriptions
80
+ - `purchase_credits` — Buy a credit package (returns checkout URL)
81
+ - `get_payment_history` — Payment transaction history
82
+ - `get_transaction_history` — Credit ledger (purchases, consumption, refunds)
83
+ - `get_usage_analytics` — Submission counts, credit usage, daily breakdown
84
+ - `get_consumption_breakdown` — Credit usage by API endpoint
85
+
86
+ ## Development
87
+
88
+ ```bash
89
+ npm install
90
+ npm run build
91
+ npm test
92
+ npm run dev # run with tsx (hot reload)
93
+ ```
94
+
95
+ ## Architecture
96
+
97
+ ```
98
+ src/
99
+ ├── index.ts # MCP server entry point (stdio transport)
100
+ ├── client/
101
+ │ ├── http-client.ts # HTTP client with auth, retry, rate limiting
102
+ │ ├── invoice-client.ts # Invoice service API client
103
+ │ └── billing-client.ts # Billing service API client
104
+ ├── tools/
105
+ │ ├── invoice-tools.ts # 15 invoice tool definitions + handlers
106
+ │ ├── seller-tools.ts # 7 seller tool definitions + handlers
107
+ │ ├── buyer-tools.ts # 7 buyer tool definitions + handlers
108
+ │ └── billing-tools.ts # 12 billing tool definitions + handlers
109
+ ├── types/
110
+ │ ├── invoice.ts # Invoice/seller/buyer types
111
+ │ └── billing.ts # Billing/subscription/payment types
112
+ └── utils/
113
+ └── format.ts # Response formatting utilities
114
+ ```
115
+
116
+ ## Versioning
117
+
118
+ This project follows [Semantic Versioning](https://semver.org/) with [Conventional Commits](https://www.conventionalcommits.org/).
119
+
120
+ ```bash
121
+ npm run release # auto-bump based on commits
122
+ npm run release:patch # 0.1.0 → 0.1.1
123
+ npm run release:minor # 0.1.0 → 0.2.0
124
+ npm run release:major # 0.1.0 → 1.0.0
125
+ ```
126
+
127
+ ## Contributing
128
+
129
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for commit conventions, branching strategy, and how to add new tools.
130
+
131
+ ## License
132
+
133
+ [MIT](LICENSE)
package/bin/cli.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/index.js');
@@ -0,0 +1,19 @@
1
+ import { HttpClient } from './http-client.js';
2
+ import type { ApiResponse, BillingAccount, BillingSetup, BalanceCheck, SubscriptionPlan, Subscription, CreditPackage, CreditTransaction, Payment, PurchaseResult, UsageAnalytics } from '../types/index.js';
3
+ export declare class BillingClient {
4
+ private readonly http;
5
+ constructor(http: HttpClient);
6
+ getBillingAccount(): Promise<ApiResponse<BillingAccount>>;
7
+ checkBalance(credits: number): Promise<ApiResponse<BalanceCheck>>;
8
+ getBillingSetup(): Promise<ApiResponse<BillingSetup>>;
9
+ getSubscriptionPlans(query?: Record<string, string | number | undefined>): Promise<ApiResponse<SubscriptionPlan[]>>;
10
+ getCreditPackages(query?: Record<string, string | number | undefined>): Promise<ApiResponse<CreditPackage[]>>;
11
+ getActiveSubscription(): Promise<ApiResponse<Subscription>>;
12
+ getSubscriptionHistory(): Promise<ApiResponse<Subscription[]>>;
13
+ purchaseCredits(data: Record<string, unknown>): Promise<ApiResponse<PurchaseResult>>;
14
+ getPaymentHistory(query?: Record<string, string | number | undefined>): Promise<ApiResponse<Payment[]>>;
15
+ getTransactionHistory(query?: Record<string, string | number | undefined>): Promise<ApiResponse<CreditTransaction[]>>;
16
+ getUsageAnalytics(query?: Record<string, string | number | undefined>): Promise<ApiResponse<UsageAnalytics>>;
17
+ getConsumptionBreakdown(): Promise<ApiResponse<Record<string, unknown>>>;
18
+ }
19
+ //# sourceMappingURL=billing-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-client.d.ts","sourceRoot":"","sources":["../../src/client/billing-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EACvD,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAC7C,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAC3D,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAMvC,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAIzD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAIjE,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAQrD,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAInH,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;IAQ7G,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAI3D,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;IAQ9D,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAIpF,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAQvG,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAIrH,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAI5G,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAG/E"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BillingClient = void 0;
4
+ class BillingClient {
5
+ http;
6
+ constructor(http) {
7
+ this.http = http;
8
+ }
9
+ // ═══════════════════════════════════════════
10
+ // BILLING ACCOUNT
11
+ // ═══════════════════════════════════════════
12
+ async getBillingAccount() {
13
+ return this.http.request({ method: 'GET', path: '/b/v1/billing-accounts/me' });
14
+ }
15
+ async checkBalance(credits) {
16
+ return this.http.request({ method: 'GET', path: '/b/v1/billing-accounts/me/check-balance', query: { credits } });
17
+ }
18
+ async getBillingSetup() {
19
+ return this.http.request({ method: 'GET', path: '/b/v1/setup' });
20
+ }
21
+ // ═══════════════════════════════════════════
22
+ // PLANS
23
+ // ═══════════════════════════════════════════
24
+ async getSubscriptionPlans(query) {
25
+ return this.http.request({ method: 'GET', path: '/b/v1/plans/subscriptions', query });
26
+ }
27
+ async getCreditPackages(query) {
28
+ return this.http.request({ method: 'GET', path: '/b/v1/plans/packages', query });
29
+ }
30
+ // ═══════════════════════════════════════════
31
+ // SUBSCRIPTIONS
32
+ // ═══════════════════════════════════════════
33
+ async getActiveSubscription() {
34
+ return this.http.request({ method: 'GET', path: '/b/v1/subscriptions/active' });
35
+ }
36
+ async getSubscriptionHistory() {
37
+ return this.http.request({ method: 'GET', path: '/b/v1/subscriptions/history' });
38
+ }
39
+ // ═══════════════════════════════════════════
40
+ // PAYMENTS & CREDITS
41
+ // ═══════════════════════════════════════════
42
+ async purchaseCredits(data) {
43
+ return this.http.request({ method: 'POST', path: '/b/v1/payments/purchase', body: data });
44
+ }
45
+ async getPaymentHistory(query) {
46
+ return this.http.request({ method: 'GET', path: '/b/v1/payments/history', query });
47
+ }
48
+ // ═══════════════════════════════════════════
49
+ // TRANSACTIONS & ANALYTICS
50
+ // ═══════════════════════════════════════════
51
+ async getTransactionHistory(query) {
52
+ return this.http.request({ method: 'GET', path: '/b/v1/transactions', query });
53
+ }
54
+ async getUsageAnalytics(query) {
55
+ return this.http.request({ method: 'GET', path: '/b/v1/transactions/analytics/usage', query });
56
+ }
57
+ async getConsumptionBreakdown() {
58
+ return this.http.request({ method: 'GET', path: '/b/v1/transactions/breakdown/by-endpoint' });
59
+ }
60
+ }
61
+ exports.BillingClient = BillingClient;
62
+ //# sourceMappingURL=billing-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-client.js","sourceRoot":"","sources":["../../src/client/billing-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { ApiResponse } from '../types/index.js';
2
+ export interface HttpClientConfig {
3
+ baseUrl: string;
4
+ apiKey: string;
5
+ timeout?: number;
6
+ maxRetries?: number;
7
+ retryBaseDelay?: number;
8
+ }
9
+ export interface RequestOptions {
10
+ method: 'GET' | 'POST' | 'PATCH' | 'DELETE';
11
+ path: string;
12
+ body?: unknown;
13
+ query?: Record<string, string | number | undefined>;
14
+ }
15
+ export declare class EInvoiceApiError extends Error {
16
+ readonly statusCode: number;
17
+ readonly errorCode?: string | undefined;
18
+ readonly errors: Array<{
19
+ field?: string;
20
+ message: string;
21
+ }>;
22
+ constructor(message: string, statusCode: number, errorCode?: string | undefined, errors?: Array<{
23
+ field?: string;
24
+ message: string;
25
+ }>);
26
+ }
27
+ export declare class EInvoiceRateLimitError extends EInvoiceApiError {
28
+ readonly retryAfter: number;
29
+ constructor(message: string, retryAfter: number);
30
+ }
31
+ export declare class HttpClient {
32
+ private readonly baseUrl;
33
+ private readonly apiKey;
34
+ private readonly timeout;
35
+ private readonly maxRetries;
36
+ private readonly retryBaseDelay;
37
+ constructor(config: HttpClientConfig);
38
+ request<T>(options: RequestOptions): Promise<ApiResponse<T>>;
39
+ private doFetch;
40
+ private buildUrl;
41
+ private calculateBackoff;
42
+ private sleep;
43
+ }
44
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/client/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CACrD;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,UAAU,EAAE,MAAM;aAClB,SAAS,CAAC,EAAE,MAAM;aAClB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;gBAHlE,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,YAAA,EAClB,MAAM,GAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAM;CAK1E;AAED,qBAAa,sBAAuB,SAAQ,gBAAgB;aAGxC,UAAU,EAAE,MAAM;gBADlC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM;CAKrC;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,MAAM,EAAE,gBAAgB;IAQ9B,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAsDpD,OAAO;IAsBrB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpClient = exports.EInvoiceRateLimitError = exports.EInvoiceApiError = void 0;
4
+ class EInvoiceApiError extends Error {
5
+ statusCode;
6
+ errorCode;
7
+ errors;
8
+ constructor(message, statusCode, errorCode, errors = []) {
9
+ super(message);
10
+ this.statusCode = statusCode;
11
+ this.errorCode = errorCode;
12
+ this.errors = errors;
13
+ this.name = 'EInvoiceApiError';
14
+ }
15
+ }
16
+ exports.EInvoiceApiError = EInvoiceApiError;
17
+ class EInvoiceRateLimitError extends EInvoiceApiError {
18
+ retryAfter;
19
+ constructor(message, retryAfter) {
20
+ super(message, 429, 'RATE_LIMIT_EXCEEDED');
21
+ this.retryAfter = retryAfter;
22
+ this.name = 'EInvoiceRateLimitError';
23
+ }
24
+ }
25
+ exports.EInvoiceRateLimitError = EInvoiceRateLimitError;
26
+ class HttpClient {
27
+ baseUrl;
28
+ apiKey;
29
+ timeout;
30
+ maxRetries;
31
+ retryBaseDelay;
32
+ constructor(config) {
33
+ this.baseUrl = config.baseUrl.replace(/\/$/, '');
34
+ this.apiKey = config.apiKey;
35
+ this.timeout = config.timeout ?? 30_000;
36
+ this.maxRetries = config.maxRetries ?? 3;
37
+ this.retryBaseDelay = config.retryBaseDelay ?? 1000;
38
+ }
39
+ async request(options) {
40
+ const url = this.buildUrl(options.path, options.query);
41
+ let lastError;
42
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
43
+ if (attempt > 0) {
44
+ const delay = this.calculateBackoff(attempt);
45
+ await this.sleep(delay);
46
+ }
47
+ try {
48
+ const response = await this.doFetch(url, options);
49
+ if (response.status === 429) {
50
+ const retryAfter = parseInt(response.headers.get('retry-after') ?? '5', 10);
51
+ if (attempt < this.maxRetries) {
52
+ await this.sleep(retryAfter * 1000);
53
+ continue;
54
+ }
55
+ throw new EInvoiceRateLimitError('Rate limit exceeded', retryAfter);
56
+ }
57
+ const body = await response.json();
58
+ if (!response.ok) {
59
+ const meta = body?.meta;
60
+ throw new EInvoiceApiError(meta?.message ?? `HTTP ${response.status}`, response.status, meta?.errors?.[0]?.code, meta?.errors ?? []);
61
+ }
62
+ return body;
63
+ }
64
+ catch (error) {
65
+ lastError = error;
66
+ if (error instanceof EInvoiceApiError && error.statusCode < 500) {
67
+ throw error; // Don't retry client errors (except 429 handled above)
68
+ }
69
+ if (attempt === this.maxRetries) {
70
+ throw lastError;
71
+ }
72
+ }
73
+ }
74
+ throw lastError ?? new Error('Request failed after retries');
75
+ }
76
+ async doFetch(url, options) {
77
+ const headers = {
78
+ 'Authorization': `Bearer ${this.apiKey}`,
79
+ 'Content-Type': 'application/json',
80
+ 'Accept': 'application/json',
81
+ };
82
+ const controller = new AbortController();
83
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
84
+ try {
85
+ return await fetch(url, {
86
+ method: options.method,
87
+ headers,
88
+ body: options.body ? JSON.stringify(options.body) : undefined,
89
+ signal: controller.signal,
90
+ });
91
+ }
92
+ finally {
93
+ clearTimeout(timeoutId);
94
+ }
95
+ }
96
+ buildUrl(path, query) {
97
+ const url = new URL(`${this.baseUrl}${path}`);
98
+ if (query) {
99
+ for (const [key, value] of Object.entries(query)) {
100
+ if (value !== undefined && value !== null && value !== '') {
101
+ url.searchParams.set(key, String(value));
102
+ }
103
+ }
104
+ }
105
+ return url.toString();
106
+ }
107
+ calculateBackoff(attempt) {
108
+ const base = this.retryBaseDelay * Math.pow(2, attempt - 1);
109
+ const jitter = Math.random() * base * 0.1;
110
+ return base + jitter;
111
+ }
112
+ sleep(ms) {
113
+ return new Promise((resolve) => setTimeout(resolve, ms));
114
+ }
115
+ }
116
+ exports.HttpClient = HttpClient;
117
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/client/http-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { HttpClient, type HttpClientConfig, EInvoiceApiError, EInvoiceRateLimitError } from './http-client.js';
2
+ export { InvoiceClient } from './invoice-client.js';
3
+ export { BillingClient } from './billing-client.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BillingClient = exports.InvoiceClient = exports.EInvoiceRateLimitError = exports.EInvoiceApiError = exports.HttpClient = void 0;
4
+ var http_client_js_1 = require("./http-client.js");
5
+ Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return http_client_js_1.HttpClient; } });
6
+ Object.defineProperty(exports, "EInvoiceApiError", { enumerable: true, get: function () { return http_client_js_1.EInvoiceApiError; } });
7
+ Object.defineProperty(exports, "EInvoiceRateLimitError", { enumerable: true, get: function () { return http_client_js_1.EInvoiceRateLimitError; } });
8
+ var invoice_client_js_1 = require("./invoice-client.js");
9
+ Object.defineProperty(exports, "InvoiceClient", { enumerable: true, get: function () { return invoice_client_js_1.InvoiceClient; } });
10
+ var billing_client_js_1 = require("./billing-client.js");
11
+ Object.defineProperty(exports, "BillingClient", { enumerable: true, get: function () { return billing_client_js_1.BillingClient; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;AAAA,mDAA+G;AAAtG,4GAAA,UAAU,OAAA;AAAyB,kHAAA,gBAAgB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AACpF,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AACtB,yDAAoD;AAA3C,kHAAA,aAAa,OAAA"}
@@ -0,0 +1,42 @@
1
+ import { HttpClient } from './http-client.js';
2
+ import type { ApiResponse, Invoice, Seller, Buyer, SubmitResult, BatchSubmitResult, RetryResult, InvoiceStatusResult, ValidationResult, DownloadResult, InvoiceStatistics, TinVerificationResult } from '../types/index.js';
3
+ export declare class InvoiceClient {
4
+ private readonly http;
5
+ constructor(http: HttpClient);
6
+ createInvoice(data: Record<string, unknown>): Promise<ApiResponse<Invoice>>;
7
+ getInvoice(id: string): Promise<ApiResponse<Invoice>>;
8
+ listInvoices(query?: Record<string, string | number | undefined>): Promise<ApiResponse<Invoice[]>>;
9
+ updateInvoice(id: string, data: Record<string, unknown>): Promise<ApiResponse<Invoice>>;
10
+ deleteInvoice(id: string): Promise<ApiResponse<{
11
+ deleted: boolean;
12
+ }>>;
13
+ submitInvoice(id: string): Promise<ApiResponse<SubmitResult>>;
14
+ batchSubmitInvoices(invoiceIds: string[]): Promise<ApiResponse<BatchSubmitResult>>;
15
+ retryInvoice(id: string): Promise<ApiResponse<RetryResult>>;
16
+ cancelInvoice(id: string, reason: string, notes?: string): Promise<ApiResponse<Invoice>>;
17
+ getInvoiceStatus(id: string): Promise<ApiResponse<InvoiceStatusResult>>;
18
+ queryInvoiceStatus(id: string): Promise<ApiResponse<InvoiceStatusResult>>;
19
+ validateInvoice(data: Record<string, unknown>): Promise<ApiResponse<ValidationResult>>;
20
+ downloadInvoice(id: string, format?: string): Promise<ApiResponse<DownloadResult>>;
21
+ getInvoiceStatistics(query?: Record<string, string | number | undefined>): Promise<ApiResponse<InvoiceStatistics>>;
22
+ getInvoiceSetup(): Promise<ApiResponse<Record<string, unknown>>>;
23
+ createSeller(data: Record<string, unknown>): Promise<ApiResponse<Seller>>;
24
+ getSeller(id: string): Promise<ApiResponse<Seller>>;
25
+ listSellers(query?: Record<string, string | number | undefined>): Promise<ApiResponse<Seller[]>>;
26
+ updateSeller(id: string, data: Record<string, unknown>): Promise<ApiResponse<Seller>>;
27
+ deleteSeller(id: string): Promise<ApiResponse<{
28
+ deleted: boolean;
29
+ }>>;
30
+ verifySellerTin(id: string): Promise<ApiResponse<TinVerificationResult>>;
31
+ getSellerVerificationStatus(id: string): Promise<ApiResponse<TinVerificationResult>>;
32
+ createBuyer(data: Record<string, unknown>): Promise<ApiResponse<Buyer>>;
33
+ getBuyer(id: string): Promise<ApiResponse<Buyer>>;
34
+ listBuyers(query?: Record<string, string | number | undefined>): Promise<ApiResponse<Buyer[]>>;
35
+ updateBuyer(id: string, data: Record<string, unknown>): Promise<ApiResponse<Buyer>>;
36
+ deleteBuyer(id: string): Promise<ApiResponse<{
37
+ deleted: boolean;
38
+ }>>;
39
+ verifyBuyerTin(id: string): Promise<ApiResponse<TinVerificationResult>>;
40
+ getBuyerVerificationStatus(id: string): Promise<ApiResponse<TinVerificationResult>>;
41
+ }
42
+ //# sourceMappingURL=invoice-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-client.d.ts","sourceRoot":"","sources":["../../src/client/invoice-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvoiceClient = void 0;
4
+ class InvoiceClient {
5
+ http;
6
+ constructor(http) {
7
+ this.http = http;
8
+ }
9
+ // ═══════════════════════════════════════════
10
+ // INVOICES
11
+ // ═══════════════════════════════════════════
12
+ async createInvoice(data) {
13
+ return this.http.request({ method: 'POST', path: '/i/v1/invoices', body: data });
14
+ }
15
+ async getInvoice(id) {
16
+ return this.http.request({ method: 'GET', path: `/i/v1/invoices/${id}` });
17
+ }
18
+ async listInvoices(query) {
19
+ return this.http.request({ method: 'GET', path: '/i/v1/invoices', query });
20
+ }
21
+ async updateInvoice(id, data) {
22
+ return this.http.request({ method: 'PATCH', path: `/i/v1/invoices/${id}`, body: data });
23
+ }
24
+ async deleteInvoice(id) {
25
+ return this.http.request({ method: 'DELETE', path: `/i/v1/invoices/${id}` });
26
+ }
27
+ async submitInvoice(id) {
28
+ return this.http.request({ method: 'POST', path: `/i/v1/invoices/${id}/submit` });
29
+ }
30
+ async batchSubmitInvoices(invoiceIds) {
31
+ return this.http.request({ method: 'POST', path: '/i/v1/invoices/batch-submit', body: { invoiceIds } });
32
+ }
33
+ async retryInvoice(id) {
34
+ return this.http.request({ method: 'POST', path: `/i/v1/invoices/${id}/retry` });
35
+ }
36
+ async cancelInvoice(id, reason, notes) {
37
+ return this.http.request({ method: 'POST', path: `/i/v1/invoices/${id}/cancel`, body: { reason, notes } });
38
+ }
39
+ async getInvoiceStatus(id) {
40
+ return this.http.request({ method: 'GET', path: `/i/v1/invoices/${id}/status` });
41
+ }
42
+ async queryInvoiceStatus(id) {
43
+ return this.http.request({ method: 'POST', path: `/i/v1/invoices/${id}/query-status` });
44
+ }
45
+ async validateInvoice(data) {
46
+ return this.http.request({ method: 'POST', path: '/i/v1/invoices/validate', body: data });
47
+ }
48
+ async downloadInvoice(id, format) {
49
+ return this.http.request({ method: 'GET', path: `/i/v1/invoices/${id}/download`, query: { format } });
50
+ }
51
+ async getInvoiceStatistics(query) {
52
+ return this.http.request({ method: 'GET', path: '/i/v1/invoices/statistics', query });
53
+ }
54
+ async getInvoiceSetup() {
55
+ return this.http.request({ method: 'GET', path: '/i/v1/invoices/setup' });
56
+ }
57
+ // ═══════════════════════════════════════════
58
+ // SELLERS
59
+ // ═══════════════════════════════════════════
60
+ async createSeller(data) {
61
+ return this.http.request({ method: 'POST', path: '/i/v1/sellers', body: data });
62
+ }
63
+ async getSeller(id) {
64
+ return this.http.request({ method: 'GET', path: `/i/v1/sellers/${id}` });
65
+ }
66
+ async listSellers(query) {
67
+ return this.http.request({ method: 'GET', path: '/i/v1/sellers', query });
68
+ }
69
+ async updateSeller(id, data) {
70
+ return this.http.request({ method: 'PATCH', path: `/i/v1/sellers/${id}`, body: data });
71
+ }
72
+ async deleteSeller(id) {
73
+ return this.http.request({ method: 'DELETE', path: `/i/v1/sellers/${id}` });
74
+ }
75
+ async verifySellerTin(id) {
76
+ return this.http.request({ method: 'POST', path: `/i/v1/sellers/${id}/verify-tin` });
77
+ }
78
+ async getSellerVerificationStatus(id) {
79
+ return this.http.request({ method: 'GET', path: `/i/v1/sellers/${id}/verification-status` });
80
+ }
81
+ // ═══════════════════════════════════════════
82
+ // BUYERS
83
+ // ═══════════════════════════════════════════
84
+ async createBuyer(data) {
85
+ return this.http.request({ method: 'POST', path: '/i/v1/buyers', body: data });
86
+ }
87
+ async getBuyer(id) {
88
+ return this.http.request({ method: 'GET', path: `/i/v1/buyers/${id}` });
89
+ }
90
+ async listBuyers(query) {
91
+ return this.http.request({ method: 'GET', path: '/i/v1/buyers', query });
92
+ }
93
+ async updateBuyer(id, data) {
94
+ return this.http.request({ method: 'PATCH', path: `/i/v1/buyers/${id}`, body: data });
95
+ }
96
+ async deleteBuyer(id) {
97
+ return this.http.request({ method: 'DELETE', path: `/i/v1/buyers/${id}` });
98
+ }
99
+ async verifyBuyerTin(id) {
100
+ return this.http.request({ method: 'POST', path: `/i/v1/buyers/${id}/verify-tin` });
101
+ }
102
+ async getBuyerVerificationStatus(id) {
103
+ return this.http.request({ method: 'GET', path: `/i/v1/buyers/${id}/verification-status` });
104
+ }
105
+ }
106
+ exports.InvoiceClient = InvoiceClient;
107
+ //# sourceMappingURL=invoice-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-client.js","sourceRoot":"","sources":["../../src/client/invoice-client.ts"],"names":[],"mappings":"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"}