@heyinvoice/sdk 1.0.0 → 1.0.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @heyinvoice/sdk
2
2
 
3
- > Official Node.js & TypeScript SDK for [HeyInvoice](https://heyinvoice.com).
3
+ > Official Node.js & TypeScript SDK for [HeyInvoice](https://einvoice.heysheep.sg).
4
4
 
5
5
  Stripe-like lightweight, fully-typed API client for managing invoices, PEPPOL e-invoicing, and customer billing.
6
6
 
@@ -31,7 +31,7 @@ const heyinvoice = new HeyInvoice('sk_test_51MzXYZ...');
31
31
  /*
32
32
  const heyinvoice = new HeyInvoice({
33
33
  apiKey: 'sk_test_51MzXYZ...',
34
- apiBase: 'https://api.heyinvoice.com',
34
+ apiBase: 'https://einvoice.heysheep.sg',
35
35
  timeout: 10000,
36
36
  });
37
37
  */
@@ -148,31 +148,6 @@ try {
148
148
 
149
149
  ---
150
150
 
151
- ## 🛠 Deploying & Publishing to NPM
152
-
153
- ### 1. Build package locally
154
-
155
- ```bash
156
- pnpm --filter=@heyinvoice/sdk build
157
- ```
158
-
159
- ### 2. Perform a dry-run publish
160
-
161
- ```bash
162
- cd packages/sdk
163
- npm publish --dry-run
164
- ```
165
-
166
- ### 3. Publish to NPM Registry
167
-
168
- Ensure you are logged into your npm account (`npm login`), then publish with public access:
169
-
170
- ```bash
171
- npm publish --access public
172
- ```
173
-
174
- ---
175
-
176
151
  ## 📄 License
177
152
 
178
- MIT © [HeyInvoice](https://heyinvoice.com)
153
+ MIT © [HeyInvoice](https://einvoice.heysheep.sg)
package/dist/index.d.mts CHANGED
@@ -5,7 +5,7 @@ interface ClientConfig {
5
5
  apiKey: string;
6
6
  /**
7
7
  * Base URL of the HeyInvoice API server.
8
- * @default 'https://api.heyinvoice.com'
8
+ * @default 'https://einvoice.heysheep.sg'
9
9
  */
10
10
  apiBase?: string;
11
11
  /**
@@ -182,7 +182,7 @@ declare class HeyInvoice {
182
182
  * // Object initialization
183
183
  * const heyinvoice = new HeyInvoice({
184
184
  * apiKey: 'sk_live_xyz123',
185
- * apiBase: 'https://api.heyinvoice.com',
185
+ * apiBase: 'https://einvoice.heysheep.sg',
186
186
  * });
187
187
  * ```
188
188
  */
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ interface ClientConfig {
5
5
  apiKey: string;
6
6
  /**
7
7
  * Base URL of the HeyInvoice API server.
8
- * @default 'https://api.heyinvoice.com'
8
+ * @default 'https://einvoice.heysheep.sg'
9
9
  */
10
10
  apiBase?: string;
11
11
  /**
@@ -182,7 +182,7 @@ declare class HeyInvoice {
182
182
  * // Object initialization
183
183
  * const heyinvoice = new HeyInvoice({
184
184
  * apiKey: 'sk_live_xyz123',
185
- * apiBase: 'https://api.heyinvoice.com',
185
+ * apiBase: 'https://einvoice.heysheep.sg',
186
186
  * });
187
187
  * ```
188
188
  */
package/dist/index.js CHANGED
@@ -89,7 +89,7 @@ var HttpClient = class {
89
89
  throw new AuthenticationError("API Key is required to instantiate HeyInvoice SDK");
90
90
  }
91
91
  this.apiKey = config.apiKey.trim();
92
- this.apiBase = (config.apiBase || "https://api.heyinvoice.com").replace(/\/+$/, "");
92
+ this.apiBase = (config.apiBase || "https://einvoice.heysheep.sg").replace(/\/+$/, "");
93
93
  this.timeout = config.timeout ?? 3e4;
94
94
  this.maxRetries = config.maxRetries ?? 2;
95
95
  this.customHeaders = config.headers || {};
@@ -284,7 +284,7 @@ var HeyInvoice = class {
284
284
  * // Object initialization
285
285
  * const heyinvoice = new HeyInvoice({
286
286
  * apiKey: 'sk_live_xyz123',
287
- * apiBase: 'https://api.heyinvoice.com',
287
+ * apiBase: 'https://einvoice.heysheep.sg',
288
288
  * });
289
289
  * ```
290
290
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/errors/index.ts","../src/http/httpClient.ts","../src/resources/resource.ts","../src/resources/invoices.ts","../src/client.ts"],"sourcesContent":["import { HeyInvoice } from './client';\n\nexport { HeyInvoice };\nexport default HeyInvoice;\n\nexport * from './types';\nexport * from './errors';\nexport * from './resources/invoices';\nexport * from './resources/resource';\n","export interface HeyInvoiceErrorOptions {\n type?: string;\n statusCode?: number;\n code?: string;\n requestId?: string;\n raw?: unknown;\n}\n\nexport class HeyInvoiceError extends Error {\n readonly type: string;\n readonly statusCode?: number;\n readonly code?: string;\n readonly requestId?: string;\n readonly raw?: unknown;\n\n constructor(message: string, options?: HeyInvoiceErrorOptions) {\n super(message);\n this.name = this.constructor.name;\n this.type = options?.type || 'api_error';\n this.statusCode = options?.statusCode;\n this.code = options?.code;\n this.requestId = options?.requestId;\n this.raw = options?.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class AuthenticationError extends HeyInvoiceError {\n constructor(message = 'Invalid API key or unauthorized request', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'authentication_error', statusCode: options?.statusCode || 401 });\n }\n}\n\nexport class InvalidRequestError extends HeyInvoiceError {\n constructor(message = 'Invalid request parameters', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'invalid_request_error', statusCode: options?.statusCode || 400 });\n }\n}\n\nexport class NotFoundError extends HeyInvoiceError {\n constructor(message = 'Resource not found', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'not_found_error', statusCode: options?.statusCode || 404 });\n }\n}\n\nexport class APIError extends HeyInvoiceError {\n constructor(message = 'An error occurred on HeyInvoice servers', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'api_error', statusCode: options?.statusCode || 500 });\n }\n}\n\nexport class ConnectionError extends HeyInvoiceError {\n constructor(message = 'Failed to connect to HeyInvoice API', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'connection_error' });\n }\n}\n","import { ClientConfig } from '../types';\nimport {\n HeyInvoiceError,\n AuthenticationError,\n InvalidRequestError,\n NotFoundError,\n APIError,\n ConnectionError,\n} from '../errors';\n\nexport interface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n path: string;\n query?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly apiBase: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n private readonly customHeaders: Record<string, string>;\n\n constructor(config: ClientConfig) {\n if (!config.apiKey || typeof config.apiKey !== 'string' || !config.apiKey.trim()) {\n throw new AuthenticationError('API Key is required to instantiate HeyInvoice SDK');\n }\n this.apiKey = config.apiKey.trim();\n this.apiBase = (config.apiBase || 'https://api.heyinvoice.com').replace(/\\/+$/, '');\n this.timeout = config.timeout ?? 30000;\n this.maxRetries = config.maxRetries ?? 2;\n this.customHeaders = config.headers || {};\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const url = this.buildUrl(options.path, options.query);\n const headers = this.buildHeaders(options.headers);\n\n let attempt = 0;\n while (true) {\n attempt++;\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await fetch(url, {\n method: options.method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const requestId = response.headers.get('x-request-id') || undefined;\n let responseData: any;\n const contentType = response.headers.get('content-type') || '';\n\n if (contentType.includes('application/json')) {\n responseData = await response.json();\n } else {\n responseData = await response.text();\n }\n\n if (response.ok) {\n return responseData as T;\n }\n\n const errorMessage =\n (typeof responseData === 'object' && responseData?.message) ||\n (typeof responseData === 'string' && responseData) ||\n `HTTP Error ${response.status} ${response.statusText}`;\n\n const code = typeof responseData === 'object' ? responseData?.code : undefined;\n\n if (response.status === 401 || response.status === 403) {\n throw new AuthenticationError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n if (response.status === 404) {\n throw new NotFoundError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n if (response.status === 400 || response.status === 422) {\n throw new InvalidRequestError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n\n if (response.status >= 500) {\n if (attempt <= this.maxRetries) {\n await this.delay(attempt * 500);\n continue;\n }\n throw new APIError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n\n throw new HeyInvoiceError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n } catch (err: any) {\n if (err instanceof HeyInvoiceError) {\n throw err;\n }\n\n if (err.name === 'AbortError') {\n throw new ConnectionError(`Request timed out after ${this.timeout}ms`);\n }\n\n if (attempt <= this.maxRetries && err.name !== 'AbortError') {\n await this.delay(attempt * 500);\n continue;\n }\n\n throw new ConnectionError(err.message || 'Network communication failure', { raw: err });\n }\n }\n }\n\n private buildUrl(path: string, query?: Record<string, string | number | boolean | undefined>): string {\n const formattedPath = path.startsWith('/') ? path : `/${path}`;\n const url = new URL(`${this.apiBase}${formattedPath}`);\n\n if (query) {\n Object.entries(query).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n return url.toString();\n }\n\n private buildHeaders(extraHeaders?: Record<string, string>): Record<string, string> {\n return {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'User-Agent': 'HeyInvoice/v1 NodeSDK/1.0.0',\n ...this.customHeaders,\n ...extraHeaders,\n };\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { HttpClient } from '../http/httpClient';\n\nexport abstract class Resource {\n protected readonly client: HttpClient;\n\n constructor(client: HttpClient) {\n this.client = client;\n }\n}\n","import { Resource } from './resource';\nimport {\n Invoice,\n CreateInvoiceParams,\n UpdateInvoiceParams,\n ListInvoicesParams,\n PaginatedList,\n DeletedResource,\n} from '../types';\n\nexport class Invoices extends Resource {\n /**\n * Create a new invoice draft.\n */\n async create(params: CreateInvoiceParams): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: '/v1/invoices',\n body: params,\n });\n }\n\n /**\n * Retrieve an existing invoice by ID.\n */\n async retrieve(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'GET',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n });\n }\n\n /**\n * Alias for retrieve.\n */\n async get(id: string): Promise<Invoice> {\n return this.retrieve(id);\n }\n\n /**\n * Update an existing invoice.\n */\n async update(id: string, params: UpdateInvoiceParams): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'PATCH',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n body: params,\n });\n }\n\n /**\n * List invoices with optional pagination and filtering.\n */\n async list(params?: ListInvoicesParams): Promise<PaginatedList<Invoice>> {\n return this.client.request<PaginatedList<Invoice>>({\n method: 'GET',\n path: '/v1/invoices',\n query: params as Record<string, string | number | boolean | undefined>,\n });\n }\n\n /**\n * Delete or void an invoice.\n */\n async del(id: string): Promise<DeletedResource> {\n return this.client.request<DeletedResource>({\n method: 'DELETE',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n });\n }\n\n /**\n * Finalize/Send a draft invoice.\n */\n async send(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: `/v1/invoices/${encodeURIComponent(id)}/send`,\n });\n }\n\n /**\n * Void an invoice.\n */\n async void(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: `/v1/invoices/${encodeURIComponent(id)}/void`,\n });\n }\n}\n","import { ClientConfig } from './types';\nimport { HttpClient } from './http/httpClient';\nimport { Invoices } from './resources/invoices';\n\nexport class HeyInvoice {\n private readonly httpClient: HttpClient;\n readonly invoices: Invoices;\n\n /**\n * Initializes a new HeyInvoice SDK client.\n * \n * @param apiKeyOrConfig API Key string or full ClientConfig object\n * @param options Additional client options if first parameter is an API Key string\n * \n * @example\n * ```ts\n * // String initialization\n * const heyinvoice = new HeyInvoice('sk_live_xyz123');\n * \n * // Object initialization\n * const heyinvoice = new HeyInvoice({\n * apiKey: 'sk_live_xyz123',\n * apiBase: 'https://api.heyinvoice.com',\n * });\n * ```\n */\n constructor(apiKeyOrConfig: string | ClientConfig, options?: Omit<ClientConfig, 'apiKey'>) {\n let config: ClientConfig;\n\n if (typeof apiKeyOrConfig === 'string') {\n config = {\n apiKey: apiKeyOrConfig,\n ...options,\n };\n } else if (apiKeyOrConfig && typeof apiKeyOrConfig === 'object') {\n config = apiKeyOrConfig;\n } else {\n throw new Error('Invalid constructor arguments: API key string or config object expected');\n }\n\n this.httpClient = new HttpClient(config);\n this.invoices = new Invoices(this.httpClient);\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/errors/index.ts","../src/http/httpClient.ts","../src/resources/resource.ts","../src/resources/invoices.ts","../src/client.ts"],"sourcesContent":["import { HeyInvoice } from './client';\n\nexport { HeyInvoice };\nexport default HeyInvoice;\n\nexport * from './types';\nexport * from './errors';\nexport * from './resources/invoices';\nexport * from './resources/resource';\n","export interface HeyInvoiceErrorOptions {\n type?: string;\n statusCode?: number;\n code?: string;\n requestId?: string;\n raw?: unknown;\n}\n\nexport class HeyInvoiceError extends Error {\n readonly type: string;\n readonly statusCode?: number;\n readonly code?: string;\n readonly requestId?: string;\n readonly raw?: unknown;\n\n constructor(message: string, options?: HeyInvoiceErrorOptions) {\n super(message);\n this.name = this.constructor.name;\n this.type = options?.type || 'api_error';\n this.statusCode = options?.statusCode;\n this.code = options?.code;\n this.requestId = options?.requestId;\n this.raw = options?.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class AuthenticationError extends HeyInvoiceError {\n constructor(message = 'Invalid API key or unauthorized request', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'authentication_error', statusCode: options?.statusCode || 401 });\n }\n}\n\nexport class InvalidRequestError extends HeyInvoiceError {\n constructor(message = 'Invalid request parameters', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'invalid_request_error', statusCode: options?.statusCode || 400 });\n }\n}\n\nexport class NotFoundError extends HeyInvoiceError {\n constructor(message = 'Resource not found', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'not_found_error', statusCode: options?.statusCode || 404 });\n }\n}\n\nexport class APIError extends HeyInvoiceError {\n constructor(message = 'An error occurred on HeyInvoice servers', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'api_error', statusCode: options?.statusCode || 500 });\n }\n}\n\nexport class ConnectionError extends HeyInvoiceError {\n constructor(message = 'Failed to connect to HeyInvoice API', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'connection_error' });\n }\n}\n","import { ClientConfig } from '../types';\nimport {\n HeyInvoiceError,\n AuthenticationError,\n InvalidRequestError,\n NotFoundError,\n APIError,\n ConnectionError,\n} from '../errors';\n\nexport interface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n path: string;\n query?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly apiBase: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n private readonly customHeaders: Record<string, string>;\n\n constructor(config: ClientConfig) {\n if (!config.apiKey || typeof config.apiKey !== 'string' || !config.apiKey.trim()) {\n throw new AuthenticationError('API Key is required to instantiate HeyInvoice SDK');\n }\n this.apiKey = config.apiKey.trim();\n this.apiBase = (config.apiBase || 'https://einvoice.heysheep.sg').replace(/\\/+$/, '');\n this.timeout = config.timeout ?? 30000;\n this.maxRetries = config.maxRetries ?? 2;\n this.customHeaders = config.headers || {};\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const url = this.buildUrl(options.path, options.query);\n const headers = this.buildHeaders(options.headers);\n\n let attempt = 0;\n while (true) {\n attempt++;\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await fetch(url, {\n method: options.method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const requestId = response.headers.get('x-request-id') || undefined;\n let responseData: any;\n const contentType = response.headers.get('content-type') || '';\n\n if (contentType.includes('application/json')) {\n responseData = await response.json();\n } else {\n responseData = await response.text();\n }\n\n if (response.ok) {\n return responseData as T;\n }\n\n const errorMessage =\n (typeof responseData === 'object' && responseData?.message) ||\n (typeof responseData === 'string' && responseData) ||\n `HTTP Error ${response.status} ${response.statusText}`;\n\n const code = typeof responseData === 'object' ? responseData?.code : undefined;\n\n if (response.status === 401 || response.status === 403) {\n throw new AuthenticationError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n if (response.status === 404) {\n throw new NotFoundError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n if (response.status === 400 || response.status === 422) {\n throw new InvalidRequestError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n\n if (response.status >= 500) {\n if (attempt <= this.maxRetries) {\n await this.delay(attempt * 500);\n continue;\n }\n throw new APIError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n\n throw new HeyInvoiceError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n } catch (err: any) {\n if (err instanceof HeyInvoiceError) {\n throw err;\n }\n\n if (err.name === 'AbortError') {\n throw new ConnectionError(`Request timed out after ${this.timeout}ms`);\n }\n\n if (attempt <= this.maxRetries && err.name !== 'AbortError') {\n await this.delay(attempt * 500);\n continue;\n }\n\n throw new ConnectionError(err.message || 'Network communication failure', { raw: err });\n }\n }\n }\n\n private buildUrl(path: string, query?: Record<string, string | number | boolean | undefined>): string {\n const formattedPath = path.startsWith('/') ? path : `/${path}`;\n const url = new URL(`${this.apiBase}${formattedPath}`);\n\n if (query) {\n Object.entries(query).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n return url.toString();\n }\n\n private buildHeaders(extraHeaders?: Record<string, string>): Record<string, string> {\n return {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'User-Agent': 'HeyInvoice/v1 NodeSDK/1.0.0',\n ...this.customHeaders,\n ...extraHeaders,\n };\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { HttpClient } from '../http/httpClient';\n\nexport abstract class Resource {\n protected readonly client: HttpClient;\n\n constructor(client: HttpClient) {\n this.client = client;\n }\n}\n","import { Resource } from './resource';\nimport {\n Invoice,\n CreateInvoiceParams,\n UpdateInvoiceParams,\n ListInvoicesParams,\n PaginatedList,\n DeletedResource,\n} from '../types';\n\nexport class Invoices extends Resource {\n /**\n * Create a new invoice draft.\n */\n async create(params: CreateInvoiceParams): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: '/v1/invoices',\n body: params,\n });\n }\n\n /**\n * Retrieve an existing invoice by ID.\n */\n async retrieve(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'GET',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n });\n }\n\n /**\n * Alias for retrieve.\n */\n async get(id: string): Promise<Invoice> {\n return this.retrieve(id);\n }\n\n /**\n * Update an existing invoice.\n */\n async update(id: string, params: UpdateInvoiceParams): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'PATCH',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n body: params,\n });\n }\n\n /**\n * List invoices with optional pagination and filtering.\n */\n async list(params?: ListInvoicesParams): Promise<PaginatedList<Invoice>> {\n return this.client.request<PaginatedList<Invoice>>({\n method: 'GET',\n path: '/v1/invoices',\n query: params as Record<string, string | number | boolean | undefined>,\n });\n }\n\n /**\n * Delete or void an invoice.\n */\n async del(id: string): Promise<DeletedResource> {\n return this.client.request<DeletedResource>({\n method: 'DELETE',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n });\n }\n\n /**\n * Finalize/Send a draft invoice.\n */\n async send(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: `/v1/invoices/${encodeURIComponent(id)}/send`,\n });\n }\n\n /**\n * Void an invoice.\n */\n async void(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: `/v1/invoices/${encodeURIComponent(id)}/void`,\n });\n }\n}\n","import { ClientConfig } from './types';\nimport { HttpClient } from './http/httpClient';\nimport { Invoices } from './resources/invoices';\n\nexport class HeyInvoice {\n private readonly httpClient: HttpClient;\n readonly invoices: Invoices;\n\n /**\n * Initializes a new HeyInvoice SDK client.\n * \n * @param apiKeyOrConfig API Key string or full ClientConfig object\n * @param options Additional client options if first parameter is an API Key string\n * \n * @example\n * ```ts\n * // String initialization\n * const heyinvoice = new HeyInvoice('sk_live_xyz123');\n * \n * // Object initialization\n * const heyinvoice = new HeyInvoice({\n * apiKey: 'sk_live_xyz123',\n * apiBase: 'https://einvoice.heysheep.sg',\n * });\n * ```\n */\n constructor(apiKeyOrConfig: string | ClientConfig, options?: Omit<ClientConfig, 'apiKey'>) {\n let config: ClientConfig;\n\n if (typeof apiKeyOrConfig === 'string') {\n config = {\n apiKey: apiKeyOrConfig,\n ...options,\n };\n } else if (apiKeyOrConfig && typeof apiKeyOrConfig === 'object') {\n config = apiKeyOrConfig;\n } else {\n throw new Error('Invalid constructor arguments: API key string or config object expected');\n }\n\n this.httpClient = new HttpClient(config);\n this.invoices = new Invoices(this.httpClient);\n }\n}\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -54,7 +54,7 @@ var HttpClient = class {
54
54
  throw new AuthenticationError("API Key is required to instantiate HeyInvoice SDK");
55
55
  }
56
56
  this.apiKey = config.apiKey.trim();
57
- this.apiBase = (config.apiBase || "https://api.heyinvoice.com").replace(/\/+$/, "");
57
+ this.apiBase = (config.apiBase || "https://einvoice.heysheep.sg").replace(/\/+$/, "");
58
58
  this.timeout = config.timeout ?? 3e4;
59
59
  this.maxRetries = config.maxRetries ?? 2;
60
60
  this.customHeaders = config.headers || {};
@@ -249,7 +249,7 @@ var HeyInvoice = class {
249
249
  * // Object initialization
250
250
  * const heyinvoice = new HeyInvoice({
251
251
  * apiKey: 'sk_live_xyz123',
252
- * apiBase: 'https://api.heyinvoice.com',
252
+ * apiBase: 'https://einvoice.heysheep.sg',
253
253
  * });
254
254
  * ```
255
255
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors/index.ts","../src/http/httpClient.ts","../src/resources/resource.ts","../src/resources/invoices.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["export interface HeyInvoiceErrorOptions {\n type?: string;\n statusCode?: number;\n code?: string;\n requestId?: string;\n raw?: unknown;\n}\n\nexport class HeyInvoiceError extends Error {\n readonly type: string;\n readonly statusCode?: number;\n readonly code?: string;\n readonly requestId?: string;\n readonly raw?: unknown;\n\n constructor(message: string, options?: HeyInvoiceErrorOptions) {\n super(message);\n this.name = this.constructor.name;\n this.type = options?.type || 'api_error';\n this.statusCode = options?.statusCode;\n this.code = options?.code;\n this.requestId = options?.requestId;\n this.raw = options?.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class AuthenticationError extends HeyInvoiceError {\n constructor(message = 'Invalid API key or unauthorized request', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'authentication_error', statusCode: options?.statusCode || 401 });\n }\n}\n\nexport class InvalidRequestError extends HeyInvoiceError {\n constructor(message = 'Invalid request parameters', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'invalid_request_error', statusCode: options?.statusCode || 400 });\n }\n}\n\nexport class NotFoundError extends HeyInvoiceError {\n constructor(message = 'Resource not found', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'not_found_error', statusCode: options?.statusCode || 404 });\n }\n}\n\nexport class APIError extends HeyInvoiceError {\n constructor(message = 'An error occurred on HeyInvoice servers', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'api_error', statusCode: options?.statusCode || 500 });\n }\n}\n\nexport class ConnectionError extends HeyInvoiceError {\n constructor(message = 'Failed to connect to HeyInvoice API', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'connection_error' });\n }\n}\n","import { ClientConfig } from '../types';\nimport {\n HeyInvoiceError,\n AuthenticationError,\n InvalidRequestError,\n NotFoundError,\n APIError,\n ConnectionError,\n} from '../errors';\n\nexport interface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n path: string;\n query?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly apiBase: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n private readonly customHeaders: Record<string, string>;\n\n constructor(config: ClientConfig) {\n if (!config.apiKey || typeof config.apiKey !== 'string' || !config.apiKey.trim()) {\n throw new AuthenticationError('API Key is required to instantiate HeyInvoice SDK');\n }\n this.apiKey = config.apiKey.trim();\n this.apiBase = (config.apiBase || 'https://api.heyinvoice.com').replace(/\\/+$/, '');\n this.timeout = config.timeout ?? 30000;\n this.maxRetries = config.maxRetries ?? 2;\n this.customHeaders = config.headers || {};\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const url = this.buildUrl(options.path, options.query);\n const headers = this.buildHeaders(options.headers);\n\n let attempt = 0;\n while (true) {\n attempt++;\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await fetch(url, {\n method: options.method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const requestId = response.headers.get('x-request-id') || undefined;\n let responseData: any;\n const contentType = response.headers.get('content-type') || '';\n\n if (contentType.includes('application/json')) {\n responseData = await response.json();\n } else {\n responseData = await response.text();\n }\n\n if (response.ok) {\n return responseData as T;\n }\n\n const errorMessage =\n (typeof responseData === 'object' && responseData?.message) ||\n (typeof responseData === 'string' && responseData) ||\n `HTTP Error ${response.status} ${response.statusText}`;\n\n const code = typeof responseData === 'object' ? responseData?.code : undefined;\n\n if (response.status === 401 || response.status === 403) {\n throw new AuthenticationError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n if (response.status === 404) {\n throw new NotFoundError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n if (response.status === 400 || response.status === 422) {\n throw new InvalidRequestError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n\n if (response.status >= 500) {\n if (attempt <= this.maxRetries) {\n await this.delay(attempt * 500);\n continue;\n }\n throw new APIError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n\n throw new HeyInvoiceError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n } catch (err: any) {\n if (err instanceof HeyInvoiceError) {\n throw err;\n }\n\n if (err.name === 'AbortError') {\n throw new ConnectionError(`Request timed out after ${this.timeout}ms`);\n }\n\n if (attempt <= this.maxRetries && err.name !== 'AbortError') {\n await this.delay(attempt * 500);\n continue;\n }\n\n throw new ConnectionError(err.message || 'Network communication failure', { raw: err });\n }\n }\n }\n\n private buildUrl(path: string, query?: Record<string, string | number | boolean | undefined>): string {\n const formattedPath = path.startsWith('/') ? path : `/${path}`;\n const url = new URL(`${this.apiBase}${formattedPath}`);\n\n if (query) {\n Object.entries(query).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n return url.toString();\n }\n\n private buildHeaders(extraHeaders?: Record<string, string>): Record<string, string> {\n return {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'User-Agent': 'HeyInvoice/v1 NodeSDK/1.0.0',\n ...this.customHeaders,\n ...extraHeaders,\n };\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { HttpClient } from '../http/httpClient';\n\nexport abstract class Resource {\n protected readonly client: HttpClient;\n\n constructor(client: HttpClient) {\n this.client = client;\n }\n}\n","import { Resource } from './resource';\nimport {\n Invoice,\n CreateInvoiceParams,\n UpdateInvoiceParams,\n ListInvoicesParams,\n PaginatedList,\n DeletedResource,\n} from '../types';\n\nexport class Invoices extends Resource {\n /**\n * Create a new invoice draft.\n */\n async create(params: CreateInvoiceParams): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: '/v1/invoices',\n body: params,\n });\n }\n\n /**\n * Retrieve an existing invoice by ID.\n */\n async retrieve(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'GET',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n });\n }\n\n /**\n * Alias for retrieve.\n */\n async get(id: string): Promise<Invoice> {\n return this.retrieve(id);\n }\n\n /**\n * Update an existing invoice.\n */\n async update(id: string, params: UpdateInvoiceParams): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'PATCH',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n body: params,\n });\n }\n\n /**\n * List invoices with optional pagination and filtering.\n */\n async list(params?: ListInvoicesParams): Promise<PaginatedList<Invoice>> {\n return this.client.request<PaginatedList<Invoice>>({\n method: 'GET',\n path: '/v1/invoices',\n query: params as Record<string, string | number | boolean | undefined>,\n });\n }\n\n /**\n * Delete or void an invoice.\n */\n async del(id: string): Promise<DeletedResource> {\n return this.client.request<DeletedResource>({\n method: 'DELETE',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n });\n }\n\n /**\n * Finalize/Send a draft invoice.\n */\n async send(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: `/v1/invoices/${encodeURIComponent(id)}/send`,\n });\n }\n\n /**\n * Void an invoice.\n */\n async void(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: `/v1/invoices/${encodeURIComponent(id)}/void`,\n });\n }\n}\n","import { ClientConfig } from './types';\nimport { HttpClient } from './http/httpClient';\nimport { Invoices } from './resources/invoices';\n\nexport class HeyInvoice {\n private readonly httpClient: HttpClient;\n readonly invoices: Invoices;\n\n /**\n * Initializes a new HeyInvoice SDK client.\n * \n * @param apiKeyOrConfig API Key string or full ClientConfig object\n * @param options Additional client options if first parameter is an API Key string\n * \n * @example\n * ```ts\n * // String initialization\n * const heyinvoice = new HeyInvoice('sk_live_xyz123');\n * \n * // Object initialization\n * const heyinvoice = new HeyInvoice({\n * apiKey: 'sk_live_xyz123',\n * apiBase: 'https://api.heyinvoice.com',\n * });\n * ```\n */\n constructor(apiKeyOrConfig: string | ClientConfig, options?: Omit<ClientConfig, 'apiKey'>) {\n let config: ClientConfig;\n\n if (typeof apiKeyOrConfig === 'string') {\n config = {\n apiKey: apiKeyOrConfig,\n ...options,\n };\n } else if (apiKeyOrConfig && typeof apiKeyOrConfig === 'object') {\n config = apiKeyOrConfig;\n } else {\n throw new Error('Invalid constructor arguments: API key string or config object expected');\n }\n\n this.httpClient = new HttpClient(config);\n this.invoices = new Invoices(this.httpClient);\n }\n}\n","import { HeyInvoice } from './client';\n\nexport { HeyInvoice };\nexport default HeyInvoice;\n\nexport * from './types';\nexport * from './errors';\nexport * from './resources/invoices';\nexport * from './resources/resource';\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/errors/index.ts","../src/http/httpClient.ts","../src/resources/resource.ts","../src/resources/invoices.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["export interface HeyInvoiceErrorOptions {\n type?: string;\n statusCode?: number;\n code?: string;\n requestId?: string;\n raw?: unknown;\n}\n\nexport class HeyInvoiceError extends Error {\n readonly type: string;\n readonly statusCode?: number;\n readonly code?: string;\n readonly requestId?: string;\n readonly raw?: unknown;\n\n constructor(message: string, options?: HeyInvoiceErrorOptions) {\n super(message);\n this.name = this.constructor.name;\n this.type = options?.type || 'api_error';\n this.statusCode = options?.statusCode;\n this.code = options?.code;\n this.requestId = options?.requestId;\n this.raw = options?.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class AuthenticationError extends HeyInvoiceError {\n constructor(message = 'Invalid API key or unauthorized request', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'authentication_error', statusCode: options?.statusCode || 401 });\n }\n}\n\nexport class InvalidRequestError extends HeyInvoiceError {\n constructor(message = 'Invalid request parameters', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'invalid_request_error', statusCode: options?.statusCode || 400 });\n }\n}\n\nexport class NotFoundError extends HeyInvoiceError {\n constructor(message = 'Resource not found', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'not_found_error', statusCode: options?.statusCode || 404 });\n }\n}\n\nexport class APIError extends HeyInvoiceError {\n constructor(message = 'An error occurred on HeyInvoice servers', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'api_error', statusCode: options?.statusCode || 500 });\n }\n}\n\nexport class ConnectionError extends HeyInvoiceError {\n constructor(message = 'Failed to connect to HeyInvoice API', options?: Omit<HeyInvoiceErrorOptions, 'type'>) {\n super(message, { ...options, type: 'connection_error' });\n }\n}\n","import { ClientConfig } from '../types';\nimport {\n HeyInvoiceError,\n AuthenticationError,\n InvalidRequestError,\n NotFoundError,\n APIError,\n ConnectionError,\n} from '../errors';\n\nexport interface RequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n path: string;\n query?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly apiBase: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n private readonly customHeaders: Record<string, string>;\n\n constructor(config: ClientConfig) {\n if (!config.apiKey || typeof config.apiKey !== 'string' || !config.apiKey.trim()) {\n throw new AuthenticationError('API Key is required to instantiate HeyInvoice SDK');\n }\n this.apiKey = config.apiKey.trim();\n this.apiBase = (config.apiBase || 'https://einvoice.heysheep.sg').replace(/\\/+$/, '');\n this.timeout = config.timeout ?? 30000;\n this.maxRetries = config.maxRetries ?? 2;\n this.customHeaders = config.headers || {};\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const url = this.buildUrl(options.path, options.query);\n const headers = this.buildHeaders(options.headers);\n\n let attempt = 0;\n while (true) {\n attempt++;\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await fetch(url, {\n method: options.method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const requestId = response.headers.get('x-request-id') || undefined;\n let responseData: any;\n const contentType = response.headers.get('content-type') || '';\n\n if (contentType.includes('application/json')) {\n responseData = await response.json();\n } else {\n responseData = await response.text();\n }\n\n if (response.ok) {\n return responseData as T;\n }\n\n const errorMessage =\n (typeof responseData === 'object' && responseData?.message) ||\n (typeof responseData === 'string' && responseData) ||\n `HTTP Error ${response.status} ${response.statusText}`;\n\n const code = typeof responseData === 'object' ? responseData?.code : undefined;\n\n if (response.status === 401 || response.status === 403) {\n throw new AuthenticationError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n if (response.status === 404) {\n throw new NotFoundError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n if (response.status === 400 || response.status === 422) {\n throw new InvalidRequestError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n\n if (response.status >= 500) {\n if (attempt <= this.maxRetries) {\n await this.delay(attempt * 500);\n continue;\n }\n throw new APIError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n }\n\n throw new HeyInvoiceError(errorMessage, { statusCode: response.status, code, requestId, raw: responseData });\n } catch (err: any) {\n if (err instanceof HeyInvoiceError) {\n throw err;\n }\n\n if (err.name === 'AbortError') {\n throw new ConnectionError(`Request timed out after ${this.timeout}ms`);\n }\n\n if (attempt <= this.maxRetries && err.name !== 'AbortError') {\n await this.delay(attempt * 500);\n continue;\n }\n\n throw new ConnectionError(err.message || 'Network communication failure', { raw: err });\n }\n }\n }\n\n private buildUrl(path: string, query?: Record<string, string | number | boolean | undefined>): string {\n const formattedPath = path.startsWith('/') ? path : `/${path}`;\n const url = new URL(`${this.apiBase}${formattedPath}`);\n\n if (query) {\n Object.entries(query).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n return url.toString();\n }\n\n private buildHeaders(extraHeaders?: Record<string, string>): Record<string, string> {\n return {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'User-Agent': 'HeyInvoice/v1 NodeSDK/1.0.0',\n ...this.customHeaders,\n ...extraHeaders,\n };\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { HttpClient } from '../http/httpClient';\n\nexport abstract class Resource {\n protected readonly client: HttpClient;\n\n constructor(client: HttpClient) {\n this.client = client;\n }\n}\n","import { Resource } from './resource';\nimport {\n Invoice,\n CreateInvoiceParams,\n UpdateInvoiceParams,\n ListInvoicesParams,\n PaginatedList,\n DeletedResource,\n} from '../types';\n\nexport class Invoices extends Resource {\n /**\n * Create a new invoice draft.\n */\n async create(params: CreateInvoiceParams): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: '/v1/invoices',\n body: params,\n });\n }\n\n /**\n * Retrieve an existing invoice by ID.\n */\n async retrieve(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'GET',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n });\n }\n\n /**\n * Alias for retrieve.\n */\n async get(id: string): Promise<Invoice> {\n return this.retrieve(id);\n }\n\n /**\n * Update an existing invoice.\n */\n async update(id: string, params: UpdateInvoiceParams): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'PATCH',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n body: params,\n });\n }\n\n /**\n * List invoices with optional pagination and filtering.\n */\n async list(params?: ListInvoicesParams): Promise<PaginatedList<Invoice>> {\n return this.client.request<PaginatedList<Invoice>>({\n method: 'GET',\n path: '/v1/invoices',\n query: params as Record<string, string | number | boolean | undefined>,\n });\n }\n\n /**\n * Delete or void an invoice.\n */\n async del(id: string): Promise<DeletedResource> {\n return this.client.request<DeletedResource>({\n method: 'DELETE',\n path: `/v1/invoices/${encodeURIComponent(id)}`,\n });\n }\n\n /**\n * Finalize/Send a draft invoice.\n */\n async send(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: `/v1/invoices/${encodeURIComponent(id)}/send`,\n });\n }\n\n /**\n * Void an invoice.\n */\n async void(id: string): Promise<Invoice> {\n return this.client.request<Invoice>({\n method: 'POST',\n path: `/v1/invoices/${encodeURIComponent(id)}/void`,\n });\n }\n}\n","import { ClientConfig } from './types';\nimport { HttpClient } from './http/httpClient';\nimport { Invoices } from './resources/invoices';\n\nexport class HeyInvoice {\n private readonly httpClient: HttpClient;\n readonly invoices: Invoices;\n\n /**\n * Initializes a new HeyInvoice SDK client.\n * \n * @param apiKeyOrConfig API Key string or full ClientConfig object\n * @param options Additional client options if first parameter is an API Key string\n * \n * @example\n * ```ts\n * // String initialization\n * const heyinvoice = new HeyInvoice('sk_live_xyz123');\n * \n * // Object initialization\n * const heyinvoice = new HeyInvoice({\n * apiKey: 'sk_live_xyz123',\n * apiBase: 'https://einvoice.heysheep.sg',\n * });\n * ```\n */\n constructor(apiKeyOrConfig: string | ClientConfig, options?: Omit<ClientConfig, 'apiKey'>) {\n let config: ClientConfig;\n\n if (typeof apiKeyOrConfig === 'string') {\n config = {\n apiKey: apiKeyOrConfig,\n ...options,\n };\n } else if (apiKeyOrConfig && typeof apiKeyOrConfig === 'object') {\n config = apiKeyOrConfig;\n } else {\n throw new Error('Invalid constructor arguments: API key string or config object expected');\n }\n\n this.httpClient = new HttpClient(config);\n this.invoices = new Invoices(this.httpClient);\n }\n}\n","import { HeyInvoice } from './client';\n\nexport { HeyInvoice };\nexport default HeyInvoice;\n\nexport * from './types';\nexport * from './errors';\nexport * from './resources/invoices';\nexport * from './resources/resource';\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heyinvoice/sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Official Node.js and TypeScript SDK for HeyInvoice API",
5
5
  "author": "HeyInvoice",
6
6
  "license": "MIT",
@@ -35,8 +35,8 @@
35
35
  "access": "public"
36
36
  },
37
37
  "scripts": {
38
- "build": "npx --cache /tmp/npm-cache -p tsup -p typescript@5.7.3 tsup",
39
- "dev": "npx --cache /tmp/npm-cache -p tsup -p typescript@5.7.3 tsup --watch",
38
+ "build": "npx --cache /tmp/npm-cache-2 -p tsup -p typescript@5.7.3 tsup",
39
+ "dev": "npx --cache /tmp/npm-cache-2 -p tsup -p typescript@5.7.3 tsup --watch",
40
40
  "check-types": "tsc --noEmit",
41
41
  "prepublishOnly": "npm run build"
42
42
  },