@elyonar/einvoice-js 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +230 -0
- package/dist/cjs/client/http-client.d.ts +52 -0
- package/dist/cjs/client/http-client.d.ts.map +1 -0
- package/dist/cjs/client/http-client.js +117 -0
- package/dist/cjs/client/http-client.js.map +1 -0
- package/dist/cjs/client/index.d.ts +3 -0
- package/dist/cjs/client/index.d.ts.map +1 -0
- package/dist/cjs/client/index.js +6 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/einvoice.d.ts +69 -0
- package/dist/cjs/einvoice.d.ts.map +1 -0
- package/dist/cjs/einvoice.js +79 -0
- package/dist/cjs/einvoice.js.map +1 -0
- package/dist/cjs/errors.d.ts +74 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +98 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +40 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/services/billing.d.ts +75 -0
- package/dist/cjs/services/billing.d.ts.map +1 -0
- package/dist/cjs/services/billing.js +172 -0
- package/dist/cjs/services/billing.js.map +1 -0
- package/dist/cjs/services/buyers.d.ts +57 -0
- package/dist/cjs/services/buyers.d.ts.map +1 -0
- package/dist/cjs/services/buyers.js +110 -0
- package/dist/cjs/services/buyers.js.map +1 -0
- package/dist/cjs/services/index.d.ts +5 -0
- package/dist/cjs/services/index.d.ts.map +1 -0
- package/dist/cjs/services/index.js +12 -0
- package/dist/cjs/services/index.js.map +1 -0
- package/dist/cjs/services/invoices.d.ts +94 -0
- package/dist/cjs/services/invoices.d.ts.map +1 -0
- package/dist/cjs/services/invoices.js +193 -0
- package/dist/cjs/services/invoices.js.map +1 -0
- package/dist/cjs/services/sellers.d.ts +61 -0
- package/dist/cjs/services/sellers.d.ts.map +1 -0
- package/dist/cjs/services/sellers.js +114 -0
- package/dist/cjs/services/sellers.js.map +1 -0
- package/dist/cjs/types/billing.d.ts +174 -0
- package/dist/cjs/types/billing.d.ts.map +1 -0
- package/dist/cjs/types/billing.js +6 -0
- package/dist/cjs/types/billing.js.map +1 -0
- package/dist/cjs/types/common.d.ts +53 -0
- package/dist/cjs/types/common.d.ts.map +1 -0
- package/dist/cjs/types/common.js +6 -0
- package/dist/cjs/types/common.js.map +1 -0
- package/dist/cjs/types/index.d.ts +6 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +3 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/invoice.d.ts +183 -0
- package/dist/cjs/types/invoice.d.ts.map +1 -0
- package/dist/cjs/types/invoice.js +6 -0
- package/dist/cjs/types/invoice.js.map +1 -0
- package/dist/cjs/types/party.d.ts +128 -0
- package/dist/cjs/types/party.d.ts.map +1 -0
- package/dist/cjs/types/party.js +3 -0
- package/dist/cjs/types/party.js.map +1 -0
- package/dist/cjs/types/webhook.d.ts +14 -0
- package/dist/cjs/types/webhook.d.ts.map +1 -0
- package/dist/cjs/types/webhook.js +6 -0
- package/dist/cjs/types/webhook.js.map +1 -0
- package/dist/cjs/webhooks/index.d.ts +3 -0
- package/dist/cjs/webhooks/index.d.ts.map +1 -0
- package/dist/cjs/webhooks/index.js +6 -0
- package/dist/cjs/webhooks/index.js.map +1 -0
- package/dist/cjs/webhooks/verify.d.ts +43 -0
- package/dist/cjs/webhooks/verify.d.ts.map +1 -0
- package/dist/cjs/webhooks/verify.js +92 -0
- package/dist/cjs/webhooks/verify.js.map +1 -0
- package/dist/esm/client/http-client.d.ts +52 -0
- package/dist/esm/client/http-client.d.ts.map +1 -0
- package/dist/esm/client/http-client.js +113 -0
- package/dist/esm/client/http-client.js.map +1 -0
- package/dist/esm/client/index.d.ts +3 -0
- package/dist/esm/client/index.d.ts.map +1 -0
- package/dist/esm/client/index.js +2 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/einvoice.d.ts +69 -0
- package/dist/esm/einvoice.d.ts.map +1 -0
- package/dist/esm/einvoice.js +75 -0
- package/dist/esm/einvoice.js.map +1 -0
- package/dist/esm/errors.d.ts +74 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +89 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +24 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/services/billing.d.ts +75 -0
- package/dist/esm/services/billing.d.ts.map +1 -0
- package/dist/esm/services/billing.js +168 -0
- package/dist/esm/services/billing.js.map +1 -0
- package/dist/esm/services/buyers.d.ts +57 -0
- package/dist/esm/services/buyers.d.ts.map +1 -0
- package/dist/esm/services/buyers.js +106 -0
- package/dist/esm/services/buyers.js.map +1 -0
- package/dist/esm/services/index.d.ts +5 -0
- package/dist/esm/services/index.d.ts.map +1 -0
- package/dist/esm/services/index.js +5 -0
- package/dist/esm/services/index.js.map +1 -0
- package/dist/esm/services/invoices.d.ts +94 -0
- package/dist/esm/services/invoices.d.ts.map +1 -0
- package/dist/esm/services/invoices.js +189 -0
- package/dist/esm/services/invoices.js.map +1 -0
- package/dist/esm/services/sellers.d.ts +61 -0
- package/dist/esm/services/sellers.d.ts.map +1 -0
- package/dist/esm/services/sellers.js +110 -0
- package/dist/esm/services/sellers.js.map +1 -0
- package/dist/esm/types/billing.d.ts +174 -0
- package/dist/esm/types/billing.d.ts.map +1 -0
- package/dist/esm/types/billing.js +5 -0
- package/dist/esm/types/billing.js.map +1 -0
- package/dist/esm/types/common.d.ts +53 -0
- package/dist/esm/types/common.d.ts.map +1 -0
- package/dist/esm/types/common.js +5 -0
- package/dist/esm/types/common.js.map +1 -0
- package/dist/esm/types/index.d.ts +6 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/invoice.d.ts +183 -0
- package/dist/esm/types/invoice.d.ts.map +1 -0
- package/dist/esm/types/invoice.js +5 -0
- package/dist/esm/types/invoice.js.map +1 -0
- package/dist/esm/types/party.d.ts +128 -0
- package/dist/esm/types/party.d.ts.map +1 -0
- package/dist/esm/types/party.js +2 -0
- package/dist/esm/types/party.js.map +1 -0
- package/dist/esm/types/webhook.d.ts +14 -0
- package/dist/esm/types/webhook.d.ts.map +1 -0
- package/dist/esm/types/webhook.js +5 -0
- package/dist/esm/types/webhook.js.map +1 -0
- package/dist/esm/webhooks/index.d.ts +3 -0
- package/dist/esm/webhooks/index.d.ts.map +1 -0
- package/dist/esm/webhooks/index.js +2 -0
- package/dist/esm/webhooks/index.js.map +1 -0
- package/dist/esm/webhooks/verify.d.ts +43 -0
- package/dist/esm/webhooks/verify.d.ts.map +1 -0
- package/dist/esm/webhooks/verify.js +89 -0
- package/dist/esm/webhooks/verify.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface PaginationMeta {
|
|
2
|
+
total: number;
|
|
3
|
+
page: number;
|
|
4
|
+
pageSize: number;
|
|
5
|
+
totalPages: number;
|
|
6
|
+
hasNext: boolean;
|
|
7
|
+
hasPrevious: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ApiResponseMeta {
|
|
10
|
+
statusCode: number;
|
|
11
|
+
success: boolean;
|
|
12
|
+
errors: Array<{
|
|
13
|
+
field?: string;
|
|
14
|
+
message: string;
|
|
15
|
+
code?: string;
|
|
16
|
+
}>;
|
|
17
|
+
message: string;
|
|
18
|
+
timestamp: string;
|
|
19
|
+
pagination?: PaginationMeta;
|
|
20
|
+
}
|
|
21
|
+
export interface ApiResponse<T> {
|
|
22
|
+
meta: ApiResponseMeta;
|
|
23
|
+
data: T;
|
|
24
|
+
}
|
|
25
|
+
export interface PaginationParams {
|
|
26
|
+
page?: number;
|
|
27
|
+
pageSize?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface PaginatedResult<T> {
|
|
30
|
+
data: T[];
|
|
31
|
+
pagination: PaginationMeta;
|
|
32
|
+
}
|
|
33
|
+
export interface RateLimitInfo {
|
|
34
|
+
limit: number;
|
|
35
|
+
remaining: number;
|
|
36
|
+
reset: number;
|
|
37
|
+
resetAfter: number;
|
|
38
|
+
}
|
|
39
|
+
export interface RequestOptions {
|
|
40
|
+
/**
|
|
41
|
+
* Override timeout for this specific request (in milliseconds).
|
|
42
|
+
*/
|
|
43
|
+
timeout?: number;
|
|
44
|
+
/**
|
|
45
|
+
* AbortSignal for request cancellation.
|
|
46
|
+
*/
|
|
47
|
+
signal?: AbortSignal;
|
|
48
|
+
/**
|
|
49
|
+
* Additional headers to send with this request.
|
|
50
|
+
*/
|
|
51
|
+
headers?: Record<string, string>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC;CACT;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,EAAE,cAAc,CAAC;CAC5B;AAMD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,wBAAwB;AACxB,8CAA8C"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { ApiResponse, ApiResponseMeta, PaginationMeta, PaginationParams, PaginatedResult, RateLimitInfo, RequestOptions, } from './common.js';
|
|
2
|
+
export type { InvoiceType, InvoiceStatus, PaymentStatus, Currency, PostalAddress, LineItem, Invoice, CreateInvoiceParams, UpdateInvoiceParams, ListInvoicesParams, SubmitResult, BatchSubmitResult, RetryResult, InvoiceStatusResult, ValidationResult, DownloadResult, InvoiceStatistics, InvoiceStatisticsParams, CancelInvoiceParams, } from './invoice.js';
|
|
3
|
+
export type { PartyType, PartyStatus, TinVerificationStatus, Seller, Buyer, CreateSellerParams, UpdateSellerParams, CreateBuyerParams, UpdateBuyerParams, ListSellersParams, ListBuyersParams, TinVerificationResult, SearchResult, } from './party.js';
|
|
4
|
+
export type { BillingMode, BillingAccountStatus, SubscriptionStatus, SubscriptionInterval, BillingPaymentStatus, CreditTransactionType, CreditTransactionStatus, BillingAccount, SubscriptionPlan, SubscriptionPlanPrice, Subscription, CreditPackage, CreditPackagePrice, CreditTransaction, Payment, BalanceCheck, PurchaseCreditsParams, PurchaseResult, UsageAnalytics, BillingSetup, ListPlansParams, ListPackagesParams, ListPaymentsParams, ListTransactionsParams, UsageAnalyticsParams, } from './billing.js';
|
|
5
|
+
export type { WebhookEventType, WebhookEvent, WebhookHeaders, } from './webhook.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,MAAM,EACN,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
export type InvoiceType = 'STANDARD' | 'CREDIT_NOTE' | 'DEBIT_NOTE';
|
|
2
|
+
export type InvoiceStatus = 'draft' | 'queued' | 'pending' | 'accepted' | 'rejected' | 'failed' | 'cancelled';
|
|
3
|
+
export type PaymentStatus = 'UNPAID' | 'PARTIALLY_PAID' | 'PAID';
|
|
4
|
+
export type Currency = 'NGN' | 'USD' | 'EUR' | 'GBP';
|
|
5
|
+
export interface PostalAddress {
|
|
6
|
+
buildingNumber?: string;
|
|
7
|
+
streetName: string;
|
|
8
|
+
additionalStreetName?: string;
|
|
9
|
+
cityName: string;
|
|
10
|
+
countrySubentity: string;
|
|
11
|
+
postalZone?: string;
|
|
12
|
+
countryCode: string;
|
|
13
|
+
}
|
|
14
|
+
export interface LineItem {
|
|
15
|
+
id?: string;
|
|
16
|
+
description: string;
|
|
17
|
+
quantity: number;
|
|
18
|
+
unitPrice: number;
|
|
19
|
+
lineExtensionAmount?: number;
|
|
20
|
+
taxPercent?: number;
|
|
21
|
+
taxAmount?: number;
|
|
22
|
+
totalAmount?: number;
|
|
23
|
+
hsnCode?: string;
|
|
24
|
+
unitCode?: string;
|
|
25
|
+
discountAmount?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface Invoice {
|
|
28
|
+
id: string;
|
|
29
|
+
organizationId: string;
|
|
30
|
+
sellerId: string;
|
|
31
|
+
buyerId: string;
|
|
32
|
+
invoiceNumber: string;
|
|
33
|
+
invoiceType: InvoiceType;
|
|
34
|
+
status: InvoiceStatus;
|
|
35
|
+
invoiceDate: string;
|
|
36
|
+
issueTime?: string;
|
|
37
|
+
dueDate?: string;
|
|
38
|
+
deliveryDate?: string;
|
|
39
|
+
currency: Currency;
|
|
40
|
+
lineItems: LineItem[];
|
|
41
|
+
totalAmountExcludingTax: number;
|
|
42
|
+
totalTaxAmount: number;
|
|
43
|
+
totalAmountIncludingTax: number;
|
|
44
|
+
allowanceAmount: number;
|
|
45
|
+
chargeAmount: number;
|
|
46
|
+
payableAmount: number;
|
|
47
|
+
paymentStatus: PaymentStatus;
|
|
48
|
+
paymentTerms?: string;
|
|
49
|
+
notes?: string;
|
|
50
|
+
originalInvoiceNumber?: string;
|
|
51
|
+
purchaseOrderReference?: string;
|
|
52
|
+
accountingCost?: string;
|
|
53
|
+
jurisdiction: string;
|
|
54
|
+
regulatoryData?: Record<string, unknown>;
|
|
55
|
+
submissionAttempts: number;
|
|
56
|
+
lastSubmissionAttemptAt?: string;
|
|
57
|
+
metadata?: Record<string, unknown>;
|
|
58
|
+
createdAt: string;
|
|
59
|
+
updatedAt: string;
|
|
60
|
+
}
|
|
61
|
+
export interface CreateInvoiceParams {
|
|
62
|
+
sellerId: string;
|
|
63
|
+
buyerId: string;
|
|
64
|
+
invoiceDate: string;
|
|
65
|
+
dueDate: string;
|
|
66
|
+
currency: Currency;
|
|
67
|
+
lineItems: Array<{
|
|
68
|
+
description: string;
|
|
69
|
+
quantity: number;
|
|
70
|
+
unitPrice: number;
|
|
71
|
+
vatRate: number;
|
|
72
|
+
hsnCode?: string;
|
|
73
|
+
unitCode?: string;
|
|
74
|
+
discountAmount?: number;
|
|
75
|
+
}>;
|
|
76
|
+
invoiceType?: InvoiceType;
|
|
77
|
+
deliveryDate?: string;
|
|
78
|
+
paymentTerms?: string;
|
|
79
|
+
notes?: string;
|
|
80
|
+
originalInvoiceNumber?: string;
|
|
81
|
+
purchaseOrderReference?: string;
|
|
82
|
+
accountingCost?: string;
|
|
83
|
+
metadata?: Record<string, unknown>;
|
|
84
|
+
}
|
|
85
|
+
export interface UpdateInvoiceParams {
|
|
86
|
+
buyerId?: string;
|
|
87
|
+
invoiceDate?: string;
|
|
88
|
+
dueDate?: string;
|
|
89
|
+
currency?: Currency;
|
|
90
|
+
lineItems?: CreateInvoiceParams['lineItems'];
|
|
91
|
+
deliveryDate?: string;
|
|
92
|
+
paymentTerms?: string;
|
|
93
|
+
notes?: string;
|
|
94
|
+
purchaseOrderReference?: string;
|
|
95
|
+
accountingCost?: string;
|
|
96
|
+
metadata?: Record<string, unknown>;
|
|
97
|
+
}
|
|
98
|
+
export interface ListInvoicesParams {
|
|
99
|
+
page?: number;
|
|
100
|
+
pageSize?: number;
|
|
101
|
+
status?: InvoiceStatus;
|
|
102
|
+
sellerId?: string;
|
|
103
|
+
buyerId?: string;
|
|
104
|
+
startDate?: string;
|
|
105
|
+
endDate?: string;
|
|
106
|
+
search?: string;
|
|
107
|
+
sortBy?: string;
|
|
108
|
+
sortOrder?: 'asc' | 'desc';
|
|
109
|
+
}
|
|
110
|
+
export interface SubmitResult {
|
|
111
|
+
jobId: string;
|
|
112
|
+
status: 'queued';
|
|
113
|
+
jurisdiction: string;
|
|
114
|
+
}
|
|
115
|
+
export interface BatchSubmitResult {
|
|
116
|
+
totalQueued: number;
|
|
117
|
+
totalFailed: number;
|
|
118
|
+
queued: Array<{
|
|
119
|
+
invoiceId: string;
|
|
120
|
+
jobId: string;
|
|
121
|
+
}>;
|
|
122
|
+
failed: Array<{
|
|
123
|
+
invoiceId: string;
|
|
124
|
+
error: string;
|
|
125
|
+
}>;
|
|
126
|
+
}
|
|
127
|
+
export interface RetryResult {
|
|
128
|
+
jobId: string;
|
|
129
|
+
status: 'queued';
|
|
130
|
+
attempt: number;
|
|
131
|
+
}
|
|
132
|
+
export interface InvoiceStatusResult {
|
|
133
|
+
invoiceId: string;
|
|
134
|
+
status: InvoiceStatus;
|
|
135
|
+
submissionAttempts: number;
|
|
136
|
+
lastSubmissionAttemptAt?: string;
|
|
137
|
+
regulatoryData?: Record<string, unknown>;
|
|
138
|
+
}
|
|
139
|
+
export interface ValidationResult {
|
|
140
|
+
valid: boolean;
|
|
141
|
+
errors: Array<{
|
|
142
|
+
field: string;
|
|
143
|
+
message: string;
|
|
144
|
+
code: string;
|
|
145
|
+
}>;
|
|
146
|
+
warnings?: Array<{
|
|
147
|
+
field: string;
|
|
148
|
+
message: string;
|
|
149
|
+
}>;
|
|
150
|
+
calculations?: {
|
|
151
|
+
subtotal: number;
|
|
152
|
+
tax: number;
|
|
153
|
+
total: number;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
export interface DownloadResult {
|
|
157
|
+
downloadUrl: string;
|
|
158
|
+
expiresAt: string;
|
|
159
|
+
fileName: string;
|
|
160
|
+
}
|
|
161
|
+
export interface InvoiceStatistics {
|
|
162
|
+
totalInvoices: number;
|
|
163
|
+
totalAmount?: number;
|
|
164
|
+
pendingInvoices?: number;
|
|
165
|
+
rejectedInvoices?: number;
|
|
166
|
+
byStatus?: Record<string, number>;
|
|
167
|
+
jurisdiction?: string;
|
|
168
|
+
period?: {
|
|
169
|
+
startDate: string;
|
|
170
|
+
endDate: string;
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export interface InvoiceStatisticsParams {
|
|
174
|
+
startDate?: string;
|
|
175
|
+
endDate?: string;
|
|
176
|
+
jurisdiction?: string;
|
|
177
|
+
sellerId?: string;
|
|
178
|
+
}
|
|
179
|
+
export interface CancelInvoiceParams {
|
|
180
|
+
reason: string;
|
|
181
|
+
notes?: string;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=invoice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../../src/types/invoice.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;AACpE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC9G,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,gBAAgB,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAMrD,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,MAAM,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAMD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,MAAM,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../../src/types/invoice.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,QAAQ;AACR,8CAA8C"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { PostalAddress } from './invoice.js';
|
|
2
|
+
export type PartyType = 'COMPANY' | 'INDIVIDUAL' | 'OTHER';
|
|
3
|
+
export type PartyStatus = 'PENDING_VERIFICATION' | 'ACTIVE' | 'SUSPENDED' | 'INACTIVE';
|
|
4
|
+
export type TinVerificationStatus = 'NOT_VERIFIED' | 'PENDING' | 'VERIFIED' | 'FAILED';
|
|
5
|
+
export interface Seller {
|
|
6
|
+
id: string;
|
|
7
|
+
organizationId: string;
|
|
8
|
+
partyName: string;
|
|
9
|
+
tradingName?: string;
|
|
10
|
+
tin: string;
|
|
11
|
+
sellerType: PartyType;
|
|
12
|
+
status: PartyStatus;
|
|
13
|
+
registrationNumber?: string;
|
|
14
|
+
vatNumber?: string;
|
|
15
|
+
postalAddress?: PostalAddress;
|
|
16
|
+
email?: string;
|
|
17
|
+
phone?: string;
|
|
18
|
+
website?: string;
|
|
19
|
+
businessActivity?: string;
|
|
20
|
+
tinVerificationStatus: TinVerificationStatus;
|
|
21
|
+
tinVerifiedAt?: string;
|
|
22
|
+
logoUrl?: string;
|
|
23
|
+
metadata?: Record<string, unknown>;
|
|
24
|
+
createdAt: string;
|
|
25
|
+
updatedAt: string;
|
|
26
|
+
}
|
|
27
|
+
export interface Buyer {
|
|
28
|
+
id: string;
|
|
29
|
+
organizationId: string;
|
|
30
|
+
partyName: string;
|
|
31
|
+
tradingName?: string;
|
|
32
|
+
tin: string;
|
|
33
|
+
buyerType: PartyType;
|
|
34
|
+
status: PartyStatus;
|
|
35
|
+
registrationNumber?: string;
|
|
36
|
+
postalAddress?: PostalAddress;
|
|
37
|
+
email?: string;
|
|
38
|
+
phone?: string;
|
|
39
|
+
businessActivity?: string;
|
|
40
|
+
tinVerificationStatus: TinVerificationStatus;
|
|
41
|
+
tinVerifiedAt?: string;
|
|
42
|
+
metadata?: Record<string, unknown>;
|
|
43
|
+
createdAt: string;
|
|
44
|
+
updatedAt: string;
|
|
45
|
+
}
|
|
46
|
+
export interface CreateSellerParams {
|
|
47
|
+
partyName: string;
|
|
48
|
+
tin: string;
|
|
49
|
+
sellerType: PartyType;
|
|
50
|
+
tradingName?: string;
|
|
51
|
+
registrationNumber?: string;
|
|
52
|
+
vatNumber?: string;
|
|
53
|
+
postalAddress?: PostalAddress;
|
|
54
|
+
email?: string;
|
|
55
|
+
phone?: string;
|
|
56
|
+
website?: string;
|
|
57
|
+
businessActivity?: string;
|
|
58
|
+
logoUrl?: string;
|
|
59
|
+
metadata?: Record<string, unknown>;
|
|
60
|
+
}
|
|
61
|
+
export interface UpdateSellerParams {
|
|
62
|
+
partyName?: string;
|
|
63
|
+
tradingName?: string;
|
|
64
|
+
sellerType?: PartyType;
|
|
65
|
+
registrationNumber?: string;
|
|
66
|
+
vatNumber?: string;
|
|
67
|
+
postalAddress?: PostalAddress;
|
|
68
|
+
email?: string;
|
|
69
|
+
phone?: string;
|
|
70
|
+
website?: string;
|
|
71
|
+
businessActivity?: string;
|
|
72
|
+
logoUrl?: string;
|
|
73
|
+
metadata?: Record<string, unknown>;
|
|
74
|
+
}
|
|
75
|
+
export interface CreateBuyerParams {
|
|
76
|
+
partyName: string;
|
|
77
|
+
tin: string;
|
|
78
|
+
buyerType: PartyType;
|
|
79
|
+
tradingName?: string;
|
|
80
|
+
registrationNumber?: string;
|
|
81
|
+
postalAddress?: PostalAddress;
|
|
82
|
+
email?: string;
|
|
83
|
+
phone?: string;
|
|
84
|
+
businessActivity?: string;
|
|
85
|
+
metadata?: Record<string, unknown>;
|
|
86
|
+
}
|
|
87
|
+
export interface UpdateBuyerParams {
|
|
88
|
+
partyName?: string;
|
|
89
|
+
tradingName?: string;
|
|
90
|
+
buyerType?: PartyType;
|
|
91
|
+
registrationNumber?: string;
|
|
92
|
+
postalAddress?: PostalAddress;
|
|
93
|
+
email?: string;
|
|
94
|
+
phone?: string;
|
|
95
|
+
businessActivity?: string;
|
|
96
|
+
metadata?: Record<string, unknown>;
|
|
97
|
+
}
|
|
98
|
+
export interface ListSellersParams {
|
|
99
|
+
page?: number;
|
|
100
|
+
pageSize?: number;
|
|
101
|
+
status?: PartyStatus;
|
|
102
|
+
search?: string;
|
|
103
|
+
sortBy?: string;
|
|
104
|
+
sortOrder?: 'asc' | 'desc';
|
|
105
|
+
}
|
|
106
|
+
export interface ListBuyersParams {
|
|
107
|
+
page?: number;
|
|
108
|
+
pageSize?: number;
|
|
109
|
+
status?: PartyStatus;
|
|
110
|
+
search?: string;
|
|
111
|
+
sortBy?: string;
|
|
112
|
+
sortOrder?: 'asc' | 'desc';
|
|
113
|
+
}
|
|
114
|
+
export interface TinVerificationResult {
|
|
115
|
+
tinVerificationStatus: TinVerificationStatus;
|
|
116
|
+
tinVerifiedAt?: string;
|
|
117
|
+
tinVerificationResult?: Record<string, unknown>;
|
|
118
|
+
}
|
|
119
|
+
export interface SearchResult {
|
|
120
|
+
results: Array<{
|
|
121
|
+
id: string;
|
|
122
|
+
name: string;
|
|
123
|
+
tin: string;
|
|
124
|
+
type?: string;
|
|
125
|
+
}>;
|
|
126
|
+
count: number;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=party.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"party.d.ts","sourceRoot":"","sources":["../../../src/types/party.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC;AAC3D,MAAM,MAAM,WAAW,GAAG,sBAAsB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AACvF,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAMvF,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAMD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B;AAMD,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"party.js","sourceRoot":"","sources":["../../../src/types/party.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type WebhookEventType = 'invoice.created' | 'invoice.submitted' | 'invoice.approved' | 'invoice.rejected' | 'invoice.failed' | 'invoice.cancelled' | 'billing.payment_succeeded' | 'billing.payment_failed' | 'billing.low_credit_alert' | 'billing.subscription_created' | 'billing.subscription_renewed' | 'billing.subscription_cancelled' | 'billing.trial_expiring_soon' | 'auth.user_invited' | 'auth.user_joined' | 'auth.api_key_created' | 'auth.api_key_revoked';
|
|
2
|
+
export interface WebhookEvent<T = Record<string, unknown>> {
|
|
3
|
+
eventId: string;
|
|
4
|
+
eventType: WebhookEventType;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
data: T;
|
|
7
|
+
}
|
|
8
|
+
export interface WebhookHeaders {
|
|
9
|
+
'x-webhook-signature': string;
|
|
10
|
+
'x-webhook-timestamp': string;
|
|
11
|
+
'x-webhook-event': string;
|
|
12
|
+
'x-webhook-event-id': string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/types/webhook.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GAExB,iBAAiB,GACjB,mBAAmB,GACnB,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,mBAAmB,GAEnB,2BAA2B,GAC3B,wBAAwB,GACxB,0BAA0B,GAC1B,8BAA8B,GAC9B,8BAA8B,GAC9B,gCAAgC,GAChC,6BAA6B,GAE7B,mBAAmB,GACnB,kBAAkB,GAClB,sBAAsB,GACtB,sBAAsB,CAAC;AAM3B,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,CAAC,CAAC;CACT;AAMD,MAAM,WAAW,cAAc;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/types/webhook.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,sBAAsB;AACtB,8CAA8C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { WebhookEvent, WebhookHeaders } from '../types/webhook.js';
|
|
2
|
+
export interface VerifyWebhookOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Maximum allowed age of the webhook timestamp (in seconds).
|
|
5
|
+
* Prevents replay attacks.
|
|
6
|
+
* @default 300
|
|
7
|
+
*/
|
|
8
|
+
toleranceSeconds?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Verify and parse a webhook event from the E-Invoice platform.
|
|
12
|
+
*
|
|
13
|
+
* Performs HMAC-SHA256 signature verification with timing-safe comparison
|
|
14
|
+
* and replay protection via timestamp validation.
|
|
15
|
+
*
|
|
16
|
+
* @param payload - The raw request body (string or Buffer).
|
|
17
|
+
* @param headers - The webhook request headers (or a plain object with the relevant keys).
|
|
18
|
+
* @param secret - Your webhook signing secret.
|
|
19
|
+
* @param options - Optional verification options.
|
|
20
|
+
* @returns The parsed and verified webhook event.
|
|
21
|
+
* @throws {EInvoiceWebhookError} If verification fails.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import { verifyWebhook } from '@elyonar/einvoice-js/webhooks';
|
|
26
|
+
*
|
|
27
|
+
* app.post('/webhooks/einvoice', (req, res) => {
|
|
28
|
+
* try {
|
|
29
|
+
* const event = verifyWebhook(req.body, req.headers, process.env.WEBHOOK_SECRET);
|
|
30
|
+
* switch (event.eventType) {
|
|
31
|
+
* case 'invoice.approved':
|
|
32
|
+
* // Handle approved invoice
|
|
33
|
+
* break;
|
|
34
|
+
* }
|
|
35
|
+
* res.sendStatus(200);
|
|
36
|
+
* } catch (err) {
|
|
37
|
+
* res.sendStatus(400);
|
|
38
|
+
* }
|
|
39
|
+
* });
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function verifyWebhook<T = Record<string, unknown>>(payload: string | Buffer, headers: Partial<WebhookHeaders> | Record<string, string | string[] | undefined>, secret: string, options?: VerifyWebhookOptions): WebhookEvent<T>;
|
|
43
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/webhooks/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQxE,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvD,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EAChF,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,oBAAoB,GAC7B,YAAY,CAAC,CAAC,CAAC,CAgDjB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { EInvoiceWebhookError } from '../errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Maximum age (in seconds) for a webhook timestamp before it's considered stale.
|
|
5
|
+
* Default: 300 seconds (5 minutes).
|
|
6
|
+
*/
|
|
7
|
+
const DEFAULT_TOLERANCE_SECONDS = 300;
|
|
8
|
+
/**
|
|
9
|
+
* Verify and parse a webhook event from the E-Invoice platform.
|
|
10
|
+
*
|
|
11
|
+
* Performs HMAC-SHA256 signature verification with timing-safe comparison
|
|
12
|
+
* and replay protection via timestamp validation.
|
|
13
|
+
*
|
|
14
|
+
* @param payload - The raw request body (string or Buffer).
|
|
15
|
+
* @param headers - The webhook request headers (or a plain object with the relevant keys).
|
|
16
|
+
* @param secret - Your webhook signing secret.
|
|
17
|
+
* @param options - Optional verification options.
|
|
18
|
+
* @returns The parsed and verified webhook event.
|
|
19
|
+
* @throws {EInvoiceWebhookError} If verification fails.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { verifyWebhook } from '@elyonar/einvoice-js/webhooks';
|
|
24
|
+
*
|
|
25
|
+
* app.post('/webhooks/einvoice', (req, res) => {
|
|
26
|
+
* try {
|
|
27
|
+
* const event = verifyWebhook(req.body, req.headers, process.env.WEBHOOK_SECRET);
|
|
28
|
+
* switch (event.eventType) {
|
|
29
|
+
* case 'invoice.approved':
|
|
30
|
+
* // Handle approved invoice
|
|
31
|
+
* break;
|
|
32
|
+
* }
|
|
33
|
+
* res.sendStatus(200);
|
|
34
|
+
* } catch (err) {
|
|
35
|
+
* res.sendStatus(400);
|
|
36
|
+
* }
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export function verifyWebhook(payload, headers, secret, options) {
|
|
41
|
+
const tolerance = options?.toleranceSeconds ?? DEFAULT_TOLERANCE_SECONDS;
|
|
42
|
+
// Extract headers (case-insensitive)
|
|
43
|
+
const signature = getHeader(headers, 'x-webhook-signature');
|
|
44
|
+
const timestamp = getHeader(headers, 'x-webhook-timestamp');
|
|
45
|
+
if (!signature) {
|
|
46
|
+
throw new EInvoiceWebhookError('Missing X-Webhook-Signature header');
|
|
47
|
+
}
|
|
48
|
+
if (!timestamp) {
|
|
49
|
+
throw new EInvoiceWebhookError('Missing X-Webhook-Timestamp header');
|
|
50
|
+
}
|
|
51
|
+
// Validate timestamp (replay protection)
|
|
52
|
+
const webhookTime = parseInt(timestamp, 10);
|
|
53
|
+
if (isNaN(webhookTime)) {
|
|
54
|
+
throw new EInvoiceWebhookError('Invalid X-Webhook-Timestamp header');
|
|
55
|
+
}
|
|
56
|
+
const now = Math.floor(Date.now() / 1000);
|
|
57
|
+
if (Math.abs(now - webhookTime) > tolerance) {
|
|
58
|
+
throw new EInvoiceWebhookError(`Webhook timestamp too old. Received: ${webhookTime}, current: ${now}, tolerance: ${tolerance}s`);
|
|
59
|
+
}
|
|
60
|
+
// Build the signed payload: "{timestamp}.{rawBody}"
|
|
61
|
+
const rawBody = typeof payload === 'string' ? payload : payload.toString('utf-8');
|
|
62
|
+
const signedPayload = `${timestamp}.${rawBody}`;
|
|
63
|
+
// Compute expected signature
|
|
64
|
+
const expectedSignature = `sha256=${createHmac('sha256', secret).update(signedPayload).digest('hex')}`;
|
|
65
|
+
// Timing-safe comparison
|
|
66
|
+
const sigBuffer = Buffer.from(signature, 'utf-8');
|
|
67
|
+
const expectedBuffer = Buffer.from(expectedSignature, 'utf-8');
|
|
68
|
+
if (sigBuffer.length !== expectedBuffer.length || !timingSafeEqual(sigBuffer, expectedBuffer)) {
|
|
69
|
+
throw new EInvoiceWebhookError('Webhook signature verification failed');
|
|
70
|
+
}
|
|
71
|
+
// Parse and return the event
|
|
72
|
+
try {
|
|
73
|
+
return JSON.parse(rawBody);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
throw new EInvoiceWebhookError('Failed to parse webhook payload as JSON');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Extract a header value, handling case insensitivity and arrays.
|
|
81
|
+
*/
|
|
82
|
+
function getHeader(headers, key) {
|
|
83
|
+
// Try exact match first, then lowercase
|
|
84
|
+
const value = headers[key] ?? headers[key.toLowerCase()];
|
|
85
|
+
if (Array.isArray(value))
|
|
86
|
+
return value[0];
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/webhooks/verify.ts"],"names":[],"mappings":"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"}
|