@vrplatform/hyperline-client 1.0.24 → 1.0.26

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 (96) hide show
  1. package/build/main/client.d.ts +215 -0
  2. package/build/main/client.js +87 -16
  3. package/build/main/client.js.map +1 -1
  4. package/build/main/const.d.ts +17 -0
  5. package/build/main/const.js +17 -0
  6. package/build/main/const.js.map +1 -1
  7. package/build/main/src/_types.generated.d.ts +22310 -0
  8. package/build/main/src/_types.generated.js +6 -0
  9. package/build/main/src/_types.generated.js.map +1 -0
  10. package/build/main/src/client.d.ts +1706 -0
  11. package/build/main/src/client.js +294 -0
  12. package/build/main/src/client.js.map +1 -0
  13. package/build/main/src/const.d.ts +73 -0
  14. package/build/main/src/const.js +257 -0
  15. package/build/main/src/const.js.map +1 -0
  16. package/build/main/src/hooks.d.ts +10 -0
  17. package/build/main/src/hooks.js +13 -0
  18. package/build/main/src/hooks.js.map +1 -0
  19. package/build/main/src/index.d.ts +5 -0
  20. package/build/main/src/index.js +6 -0
  21. package/build/main/src/index.js.map +1 -0
  22. package/build/main/src/types.d.ts +35 -0
  23. package/build/main/src/types.js +2 -0
  24. package/build/main/src/types.js.map +1 -0
  25. package/build/main/src/utils/arrayBufferToBase64.d.ts +1 -0
  26. package/build/main/src/utils/arrayBufferToBase64.js +9 -0
  27. package/build/main/src/utils/arrayBufferToBase64.js.map +1 -0
  28. package/build/main/src/utils/calculateMrr.d.ts +45 -0
  29. package/build/main/src/utils/calculateMrr.js +107 -0
  30. package/build/main/src/utils/calculateMrr.js.map +1 -0
  31. package/build/main/src/utils/getMrrDiffReasons.d.ts +15 -0
  32. package/build/main/src/utils/getMrrDiffReasons.js +217 -0
  33. package/build/main/src/utils/getMrrDiffReasons.js.map +1 -0
  34. package/build/main/src/utils/index.d.ts +3 -0
  35. package/build/main/src/utils/index.js +4 -0
  36. package/build/main/src/utils/index.js.map +1 -0
  37. package/build/main/tsconfig.main.tsbuildinfo +1 -1
  38. package/build/main/utils/arrayBufferToBase64.js +5 -2
  39. package/build/main/utils/arrayBufferToBase64.js.map +1 -1
  40. package/build/main/utils/calculateMrr.d.ts +45 -0
  41. package/build/main/utils/calculateMrr.js +107 -0
  42. package/build/main/utils/calculateMrr.js.map +1 -0
  43. package/build/main/utils/index.d.ts +1 -0
  44. package/build/main/utils/index.js +1 -0
  45. package/build/main/utils/index.js.map +1 -1
  46. package/build/module/client.d.ts +215 -0
  47. package/build/module/client.js +87 -16
  48. package/build/module/client.js.map +1 -1
  49. package/build/module/const.d.ts +17 -0
  50. package/build/module/const.js +17 -0
  51. package/build/module/const.js.map +1 -1
  52. package/build/module/src/_types.generated.d.ts +22310 -0
  53. package/build/module/src/_types.generated.js +6 -0
  54. package/build/module/src/_types.generated.js.map +1 -0
  55. package/build/module/src/client.d.ts +1706 -0
  56. package/build/module/src/client.js +296 -0
  57. package/build/module/src/client.js.map +1 -0
  58. package/build/module/src/const.d.ts +73 -0
  59. package/build/module/src/const.js +257 -0
  60. package/build/module/src/const.js.map +1 -0
  61. package/build/module/src/hooks.d.ts +10 -0
  62. package/build/module/src/hooks.js +13 -0
  63. package/build/module/src/hooks.js.map +1 -0
  64. package/build/module/src/index.d.ts +5 -0
  65. package/build/module/src/index.js +6 -0
  66. package/build/module/src/index.js.map +1 -0
  67. package/build/module/src/types.d.ts +35 -0
  68. package/build/module/src/types.js +2 -0
  69. package/build/module/src/types.js.map +1 -0
  70. package/build/module/src/utils/arrayBufferToBase64.d.ts +1 -0
  71. package/build/module/src/utils/arrayBufferToBase64.js +9 -0
  72. package/build/module/src/utils/arrayBufferToBase64.js.map +1 -0
  73. package/build/module/src/utils/calculateMrr.d.ts +45 -0
  74. package/build/module/src/utils/calculateMrr.js +107 -0
  75. package/build/module/src/utils/calculateMrr.js.map +1 -0
  76. package/build/module/src/utils/getMrrDiffReasons.d.ts +15 -0
  77. package/build/module/src/utils/getMrrDiffReasons.js +217 -0
  78. package/build/module/src/utils/getMrrDiffReasons.js.map +1 -0
  79. package/build/module/src/utils/index.d.ts +3 -0
  80. package/build/module/src/utils/index.js +4 -0
  81. package/build/module/src/utils/index.js.map +1 -0
  82. package/build/module/tsconfig.esm.tsbuildinfo +1 -1
  83. package/build/module/utils/arrayBufferToBase64.js +5 -2
  84. package/build/module/utils/arrayBufferToBase64.js.map +1 -1
  85. package/build/module/utils/calculateMrr.d.ts +45 -0
  86. package/build/module/utils/calculateMrr.js +107 -0
  87. package/build/module/utils/calculateMrr.js.map +1 -0
  88. package/build/module/utils/index.d.ts +1 -0
  89. package/build/module/utils/index.js +1 -0
  90. package/build/module/utils/index.js.map +1 -1
  91. package/package.json +19 -18
  92. package/src/client.ts +117 -22
  93. package/src/const.ts +21 -0
  94. package/src/utils/arrayBufferToBase64.ts +9 -2
  95. package/src/utils/calculateMrr.ts +206 -0
  96. package/src/utils/index.ts +1 -0
@@ -0,0 +1,294 @@
1
+ import { utc } from '@vrplatform/utils';
2
+ import { arrayBufferToBase64 } from './utils';
3
+ export class HyperlineAPI {
4
+ constructor(token, logger = console) {
5
+ this.headers = {
6
+ 'Content-Type': 'application/json',
7
+ Authorization: `Bearer ${token}`,
8
+ };
9
+ this.logger = logger;
10
+ }
11
+ async fetchBasic(path, options, data) {
12
+ if (data)
13
+ options = { body: JSON.stringify(data), ...(options || {}) };
14
+ const method = (options?.method || 'GET').toUpperCase();
15
+ const sandbox = this.headers.Authorization.includes('test')
16
+ ? 'sandbox.'
17
+ : '';
18
+ const result = await fetch(`https://${sandbox}${path}`, {
19
+ method: 'GET',
20
+ ...options,
21
+ headers: { ...this.headers, ...options?.headers },
22
+ });
23
+ if (!result?.ok) {
24
+ const status = result?.status;
25
+ const statusText = result?.statusText;
26
+ let content = null;
27
+ try {
28
+ const rawBody = await result.text();
29
+ const trimmedBody = rawBody.trim();
30
+ if (trimmedBody) {
31
+ try {
32
+ content = JSON.parse(trimmedBody);
33
+ }
34
+ catch (_) {
35
+ content = rawBody;
36
+ }
37
+ }
38
+ }
39
+ catch (_) {
40
+ // ignore
41
+ }
42
+ const message = (content && typeof content === 'object' && 'message' in content
43
+ ? content.message
44
+ : null) ||
45
+ (typeof content === 'string' ? content : null) ||
46
+ (content ? JSON.stringify(content) : null) ||
47
+ 'Unknown error';
48
+ if (status === 429) {
49
+ // get difference between rate limit reset and now
50
+ const rateLimitReset = utc(result?.headers.get('x-ratelimit-reset'));
51
+ const diff = rateLimitReset.diff(utc(), 'milliseconds');
52
+ // wait until rate limit resets
53
+ await new Promise((resolve) => setTimeout(resolve, diff));
54
+ return await this.fetchBasic(path, options, data);
55
+ }
56
+ else if (status === 404 && method === 'GET') {
57
+ return null;
58
+ }
59
+ else {
60
+ throw new Error(`Hyperline Error ${status} (${statusText}) in ${path} for ${method}: ${message}`);
61
+ }
62
+ }
63
+ else if (result.headers.get('content-type')?.includes('application/pdf'))
64
+ return arrayBufferToBase64(await result.arrayBuffer());
65
+ if (result.status === 204)
66
+ return null;
67
+ return (await result.json());
68
+ }
69
+ async fetch(path, options, data) {
70
+ return await this.fetchBasic(`api.hyperline.co${path}`, options, data);
71
+ }
72
+ async fetchIngest(path, options, data) {
73
+ return await this.fetchBasic(`ingest.hyperline.co${path}`, options, data);
74
+ }
75
+ // INVOICING ENTITY
76
+ async getInvoicingEntities() {
77
+ return await this.fetch('/v1/invoicing-entities');
78
+ }
79
+ async getInvoicingEntity(id) {
80
+ if (!id) {
81
+ this.logger.error('Missing invoicing entity ID', { id });
82
+ throw new Error('Missing invoicing entity ID');
83
+ }
84
+ return await this.fetch(`/v1/invoicing-entities/${id}`);
85
+ }
86
+ // CUSTOMER
87
+ async getCustomer(id) {
88
+ if (!id) {
89
+ this.logger.error('Missing customer ID', { id });
90
+ throw new Error('Missing customer ID');
91
+ }
92
+ return await this.fetch(`/v1/customers/${id}`);
93
+ }
94
+ async getCustomerById(id) {
95
+ if (!id) {
96
+ this.logger.error('Missing tenant ID', { id });
97
+ throw new Error('Missing tenant ID');
98
+ }
99
+ const results = await this.fetch(`/v1/customers?external_id__equals=${id}`);
100
+ return results?.data[0];
101
+ }
102
+ async getCustomers(skip = 0, take = 100, query = {}) {
103
+ const queryParams = new URLSearchParams();
104
+ queryParams.set('take', take.toString());
105
+ queryParams.set('skip', skip.toString());
106
+ for (const [key, value] of Object.entries(query)) {
107
+ if (value === undefined || value === null)
108
+ continue;
109
+ queryParams.set(key, value.toString());
110
+ }
111
+ return await this.fetch(`/v1/customers?${queryParams.toString()}`);
112
+ }
113
+ async getAllCustomers(items = [], query = {}) {
114
+ const { data } = (await this.getCustomers(items.length, 100, {
115
+ status: 'all',
116
+ ...query,
117
+ })) || {
118
+ data: [],
119
+ };
120
+ return data.length
121
+ ? this.getAllCustomers([...items, ...data], { status: 'all', ...query })
122
+ : [...items, ...data];
123
+ }
124
+ async createCustomer(data) {
125
+ return await this.fetch('/v1/customers', { method: 'POST' }, { currency: 'USD', timezone: 'Etc/UTC', ...data });
126
+ }
127
+ async updateCustomer(id, data) {
128
+ if (!id) {
129
+ this.logger.error('Missing customer ID', { id });
130
+ throw new Error('Missing customer ID');
131
+ }
132
+ return await this.fetch(`/v1/customers/${id}`, { method: 'PUT' }, data);
133
+ }
134
+ async deleteCustomer(id) {
135
+ return await this.fetch(`/v1/customers/${id}`, {
136
+ method: 'DELETE',
137
+ });
138
+ }
139
+ async archiveCustomer(id) {
140
+ return await this.fetch(`/v1/customers/${id}/archive`, {
141
+ method: 'PUT',
142
+ });
143
+ }
144
+ async unarchiveCustomer(id) {
145
+ if (!id) {
146
+ this.logger.error('Missing customer ID', { id });
147
+ throw new Error('Missing customer ID');
148
+ }
149
+ return await this.fetch(`/v1/customers/${id}/unarchive`, { method: 'PUT' });
150
+ }
151
+ async getCustomerPortal(id) {
152
+ return await this.fetch(`/v1/customers/${id}/portal`);
153
+ }
154
+ // SUBSCRIPTION
155
+ async getSubscription(id, liveBilling = false) {
156
+ if (!id) {
157
+ this.logger.error('Missing subscription ID', { id });
158
+ throw new Error('Missing subscription ID');
159
+ }
160
+ return await this.fetch(`/v2/subscriptions/${id}?include_live_billing=${liveBilling ? 'true' : 'false'}`);
161
+ }
162
+ async getSubscriptions(skip = 0, take = 100, query = {
163
+ status: 'all',
164
+ }) {
165
+ const queryParams = new URLSearchParams();
166
+ queryParams.set('take', take.toString());
167
+ queryParams.set('skip', skip.toString());
168
+ for (const [key, value] of Object.entries(query)) {
169
+ if (value === undefined || value === null)
170
+ continue;
171
+ queryParams.set(key, value.toString());
172
+ }
173
+ return await this.fetch(`/v2/subscriptions?${queryParams.toString()}`);
174
+ }
175
+ async getAllSubscriptions(items = [], query = {}) {
176
+ const { data } = (await this.getSubscriptions(items.length, 100, query)) || { data: [] };
177
+ return data.length
178
+ ? this.getAllSubscriptions([...items, ...data], query)
179
+ : [...items, ...data];
180
+ }
181
+ async createSubscription(data) {
182
+ return await this.fetch('/v2/subscriptions', { method: 'POST' }, data);
183
+ }
184
+ async updateSubscription(id, data) {
185
+ return await this.fetch(`/v2/subscriptions/${id}`, { method: 'PUT' }, data);
186
+ }
187
+ async createSubscriptionUpdate(id, data) {
188
+ return await this.fetch(`/v1/subscriptions/${id}/update`, { method: 'POST' }, data);
189
+ }
190
+ async cancelSubscription(id, data) {
191
+ return await this.fetch(`/v1/subscriptions/${id}/cancel`, {
192
+ method: 'POST',
193
+ }, data);
194
+ }
195
+ async reinstateSubscription(id) {
196
+ return await this.fetch(`/v1/subscriptions/${id}/reinstate`, {
197
+ method: 'POST',
198
+ });
199
+ }
200
+ // PLAN
201
+ async getPlan(id) {
202
+ if (!id) {
203
+ this.logger.error('Missing plan ID', { id });
204
+ throw new Error('Missing plan ID');
205
+ }
206
+ return await this.fetch(`/v1/plans/${id}`);
207
+ }
208
+ async getPlans(skip = 0, take = 100) {
209
+ return await this.fetch(`/v1/plans?take=${take}&skip=${skip}`);
210
+ }
211
+ // INVOICE
212
+ async getInvoice(id) {
213
+ if (!id) {
214
+ this.logger.error('Missing invoice ID', { id });
215
+ throw new Error('Missing invoice ID');
216
+ }
217
+ return await this.fetch(`/v1/invoices/${id}`);
218
+ }
219
+ async getInvoices(skip = 0, take = 100, query = { status: 'all' }) {
220
+ const queryParams = new URLSearchParams();
221
+ queryParams.set('take', take.toString());
222
+ queryParams.set('skip', skip.toString());
223
+ for (const [key, value] of Object.entries(query)) {
224
+ if (value === undefined || value === null)
225
+ continue;
226
+ queryParams.set(key, value.toString());
227
+ }
228
+ return await this.fetch(`/v1/invoices?${queryParams.toString()}`);
229
+ }
230
+ async getInvoicesByCustomerId(id, filters) {
231
+ const queryParams = new URLSearchParams();
232
+ queryParams.append('customerId__equals', id);
233
+ if (filters) {
234
+ Object.entries(filters).forEach(([key, value]) => {
235
+ if (value !== undefined && value !== null) {
236
+ queryParams.append(key, value.toString());
237
+ }
238
+ });
239
+ }
240
+ return await this.fetch(`/v1/invoices?${queryParams.toString()}`);
241
+ }
242
+ async getInvoiceDownload(id) {
243
+ return await this.fetch(
244
+ // TODO: fix if type != unknown paths['/v1/invoices/{id}/download']['get']['responses'][200]['content']['application/pdf']
245
+ `/v1/invoices/${id}/download`, {
246
+ headers: { 'Content-type': 'application/pdf' },
247
+ });
248
+ }
249
+ async getAllInvoices(items = [], query = { status: 'all' }) {
250
+ const { data } = (await this.getInvoices(items.length, 100, {
251
+ status: 'all',
252
+ ...query,
253
+ })) || {
254
+ data: [],
255
+ };
256
+ return data.length
257
+ ? this.getAllInvoices([...items, ...data], { status: 'all', ...query })
258
+ : [...items, ...data];
259
+ }
260
+ async voidInvoice(id, data = { send_email: false }) {
261
+ if (!id) {
262
+ this.logger.error('Missing invoice ID', { id });
263
+ throw new Error('Missing invoice ID');
264
+ }
265
+ return await this.fetch(`/v1/invoices/${id}/void`, { method: 'POST' }, data);
266
+ }
267
+ async deleteInvoice(id) {
268
+ if (!id) {
269
+ this.logger.error('Missing invoice ID', { id });
270
+ throw new Error('Missing invoice ID');
271
+ }
272
+ return await this.fetch(`/v1/invoices/${id}`, { method: 'DELETE' });
273
+ }
274
+ // OTHERS
275
+ async getCustomerPaymentMethods(customerId) {
276
+ if (!customerId) {
277
+ this.logger.error('Missing customer ID', { customerId });
278
+ throw new Error('Missing customer ID');
279
+ }
280
+ return await this.fetch(`/v1/customers/${customerId}/payment-methods`);
281
+ }
282
+ async getPaymentMethod(customerId, paymentMethodId) {
283
+ return await this.fetch(`/v1/customers/${customerId}/payment-methods/${paymentMethodId}`);
284
+ }
285
+ async createBillableEvent(data) {
286
+ if (!data.length)
287
+ return { events_created: [] };
288
+ return await this.fetchIngest('/v1/events/batch', { method: 'POST' }, data);
289
+ }
290
+ async getComponentToken(data) {
291
+ return await this.fetch('/v1/integrations/components/token', { method: 'POST' }, data);
292
+ }
293
+ }
294
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"src/","sources":["src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { utc } from '@vrplatform/utils';\nimport type { operations, paths } from './_types.generated';\nimport { BillableEvents, CreateBillableEvent } from './types';\nimport { arrayBufferToBase64 } from './utils';\n\nexport type Logger = { error(message?: any, ...optionalParams: any[]): void };\n\nexport class HyperlineAPI {\n constructor(token: string, logger: Logger = console) {\n this.headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n };\n this.logger = logger;\n }\n\n private headers: Record<string, string>;\n\n private logger: Logger;\n\n private async fetchBasic<T>(\n path: string,\n options?: RequestInit,\n data?: Record<string, any>\n ): Promise<T | null> {\n if (data) options = { body: JSON.stringify(data), ...(options || {}) };\n\n const method = (options?.method || 'GET').toUpperCase();\n const sandbox = this.headers.Authorization.includes('test')\n ? 'sandbox.'\n : '';\n\n const result = await fetch(`https://${sandbox}${path}`, {\n method: 'GET',\n ...options,\n headers: { ...this.headers, ...options?.headers },\n });\n\n if (!result?.ok) {\n const status = result?.status;\n const statusText = result?.statusText;\n let content: any = null;\n\n try {\n const rawBody = await result.text();\n const trimmedBody = rawBody.trim();\n\n if (trimmedBody) {\n try {\n content = JSON.parse(trimmedBody);\n } catch (_) {\n content = rawBody;\n }\n }\n } catch (_) {\n // ignore\n }\n\n const message =\n (content && typeof content === 'object' && 'message' in content\n ? (content as any).message\n : null) ||\n (typeof content === 'string' ? content : null) ||\n (content ? JSON.stringify(content) : null) ||\n 'Unknown error';\n\n if (status === 429) {\n // get difference between rate limit reset and now\n const rateLimitReset = utc(result?.headers.get('x-ratelimit-reset'));\n const diff = rateLimitReset.diff(utc(), 'milliseconds');\n\n // wait until rate limit resets\n await new Promise((resolve) => setTimeout(resolve, diff));\n\n return await this.fetchBasic<T>(path, options, data);\n } else if (status === 404 && method === 'GET') {\n return null;\n } else {\n throw new Error(\n `Hyperline Error ${status} (${statusText}) in ${path} for ${method}: ${message}`\n );\n }\n } else if (result.headers.get('content-type')?.includes('application/pdf'))\n return arrayBufferToBase64(await result.arrayBuffer()) as T;\n\n if (result.status === 204) return null;\n\n return (await result.json()) as T;\n }\n\n private async fetch<T>(\n path: string,\n options?: RequestInit,\n data?: Record<string, any>\n ): Promise<T | null> {\n return await this.fetchBasic(`api.hyperline.co${path}`, options, data);\n }\n\n private async fetchIngest<T>(\n path: string,\n options?: RequestInit,\n data?: Record<string, any>\n ): Promise<T | null> {\n return await this.fetchBasic(`ingest.hyperline.co${path}`, options, data);\n }\n\n // INVOICING ENTITY\n\n async getInvoicingEntities() {\n return await this.fetch<\n paths['/v1/invoicing-entities']['get']['responses'][200]['content']['application/json']\n >('/v1/invoicing-entities');\n }\n\n async getInvoicingEntity(id?: string) {\n if (!id) {\n this.logger.error('Missing invoicing entity ID', { id });\n throw new Error('Missing invoicing entity ID');\n }\n\n return await this.fetch<\n paths['/v1/invoicing-entities/{id}']['get']['responses'][200]['content']['application/json']\n >(`/v1/invoicing-entities/${id}`);\n }\n\n // CUSTOMER\n\n async getCustomer(id?: string) {\n if (!id) {\n this.logger.error('Missing customer ID', { id });\n throw new Error('Missing customer ID');\n }\n\n return await this.fetch<\n paths['/v1/customers/{id}']['get']['responses'][200]['content']['application/json']\n >(`/v1/customers/${id}`);\n }\n\n async getCustomerById(id?: string) {\n if (!id) {\n this.logger.error('Missing tenant ID', { id });\n throw new Error('Missing tenant ID');\n }\n\n const results = await this.fetch<\n paths['/v1/customers']['get']['responses'][200]['content']['application/json']\n >(`/v1/customers?external_id__equals=${id}`);\n\n return results?.data[0];\n }\n\n async getCustomers(\n skip = 0,\n take = 100,\n query: operations['getCustomers']['parameters']['query'] = {}\n ) {\n const queryParams = new URLSearchParams();\n queryParams.set('take', take.toString());\n queryParams.set('skip', skip.toString());\n\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n queryParams.set(key, value.toString());\n }\n\n return await this.fetch<\n paths['/v1/customers']['get']['responses'][200]['content']['application/json']\n >(`/v1/customers?${queryParams.toString()}`);\n }\n\n async getAllCustomers(\n items: paths['/v1/customers']['get']['responses'][200]['content']['application/json']['data'] = [],\n query: operations['getCustomers']['parameters']['query'] = {}\n ): Promise<\n paths['/v1/customers']['get']['responses'][200]['content']['application/json']['data']\n > {\n const { data } = (await this.getCustomers(items.length, 100, {\n status: 'all',\n ...query,\n })) || {\n data: [],\n };\n\n return data.length\n ? this.getAllCustomers([...items, ...data], { status: 'all', ...query })\n : [...items, ...data];\n }\n\n async createCustomer(\n data: NonNullable<\n paths['/v1/customers']['post']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v1/customers']['post']['responses'][201]['content']['application/json']\n >(\n '/v1/customers',\n { method: 'POST' },\n { currency: 'USD', timezone: 'Etc/UTC', ...data }\n );\n }\n\n async updateCustomer(\n id: string,\n data: NonNullable<\n paths['/v1/customers/{id}']['put']['requestBody']\n >['content']['application/json']\n ) {\n if (!id) {\n this.logger.error('Missing customer ID', { id });\n throw new Error('Missing customer ID');\n }\n\n return await this.fetch<\n paths['/v1/customers/{id}']['put']['responses'][200]['content']['application/json']\n >(`/v1/customers/${id}`, { method: 'PUT' }, data);\n }\n\n async deleteCustomer(id: string) {\n return await this.fetch<\n paths['/v1/customers/{id}']['delete']['responses'][204]['content']\n >(`/v1/customers/${id}`, {\n method: 'DELETE',\n });\n }\n\n async archiveCustomer(id: string) {\n return await this.fetch<\n paths['/v1/customers/{id}/archive']['put']['responses'][200]['content']['application/json']\n >(`/v1/customers/${id}/archive`, {\n method: 'PUT',\n });\n }\n\n async unarchiveCustomer(id: string) {\n if (!id) {\n this.logger.error('Missing customer ID', { id });\n throw new Error('Missing customer ID');\n }\n\n return await this.fetch<\n paths['/v1/customers/{id}/unarchive']['put']['responses'][200]['content']['application/json']\n >(`/v1/customers/${id}/unarchive`, { method: 'PUT' });\n }\n\n async getCustomerPortal(id: string) {\n return await this.fetch<\n paths['/v1/customers/{id}/portal']['get']['responses'][200]['content']['application/json']\n >(`/v1/customers/${id}/portal`);\n }\n\n // SUBSCRIPTION\n\n async getSubscription(id: string, liveBilling = false) {\n if (!id) {\n this.logger.error('Missing subscription ID', { id });\n throw new Error('Missing subscription ID');\n }\n\n return await this.fetch<\n paths['/v2/subscriptions/{id}']['get']['responses'][200]['content']['application/json']\n >(\n `/v2/subscriptions/${id}?include_live_billing=${liveBilling ? 'true' : 'false'}`\n );\n }\n\n async getSubscriptions(\n skip = 0,\n take = 100,\n query: operations['getSubscriptions']['parameters']['query'] = {\n status: 'all',\n }\n ) {\n const queryParams = new URLSearchParams();\n queryParams.set('take', take.toString());\n queryParams.set('skip', skip.toString());\n\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n queryParams.set(key, value.toString());\n }\n\n return await this.fetch<\n paths['/v2/subscriptions']['get']['responses'][200]['content']['application/json']\n >(`/v2/subscriptions?${queryParams.toString()}`);\n }\n\n async getAllSubscriptions(\n items: paths['/v2/subscriptions']['get']['responses'][200]['content']['application/json']['data'] = [],\n query: operations['getSubscriptions']['parameters']['query'] = {}\n ): Promise<\n paths['/v2/subscriptions']['get']['responses'][200]['content']['application/json']['data']\n > {\n const { data } = (await this.getSubscriptions(\n items.length,\n 100,\n query\n )) || { data: [] };\n\n return data.length\n ? this.getAllSubscriptions([...items, ...data], query)\n : [...items, ...data];\n }\n\n async createSubscription(\n data: NonNullable<\n paths['/v2/subscriptions']['post']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v2/subscriptions']['post']['responses'][201]['content']['application/json']\n >('/v2/subscriptions', { method: 'POST' }, data);\n }\n\n async updateSubscription(\n id: string,\n data: NonNullable<\n paths['/v2/subscriptions/{id}']['put']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v2/subscriptions/{id}']['put']['responses'][200]['content']['application/json']\n >(`/v2/subscriptions/${id}`, { method: 'PUT' }, data);\n }\n\n async createSubscriptionUpdate(\n id: string,\n data: NonNullable<\n paths['/v1/subscriptions/{id}/update']['post']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v1/subscriptions/{id}/update']['post']['responses'][201]['content']['application/json']\n >(`/v1/subscriptions/${id}/update`, { method: 'POST' }, data);\n }\n\n async cancelSubscription(\n id: string,\n data: NonNullable<\n paths['/v1/subscriptions/{id}/cancel']['post']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v1/subscriptions/{id}/cancel']['post']['responses'][200]['content']['application/json']\n >(\n `/v1/subscriptions/${id}/cancel`,\n {\n method: 'POST',\n },\n data\n );\n }\n\n async reinstateSubscription(id: string) {\n return await this.fetch<\n paths['/v1/subscriptions/{id}/reinstate']['post']['responses'][200]['content']['application/json']\n >(`/v1/subscriptions/${id}/reinstate`, {\n method: 'POST',\n });\n }\n\n // PLAN\n\n async getPlan(id: string) {\n if (!id) {\n this.logger.error('Missing plan ID', { id });\n throw new Error('Missing plan ID');\n }\n\n return await this.fetch<\n paths['/v1/plans/{id}']['get']['responses'][200]['content']['application/json']\n >(`/v1/plans/${id}`);\n }\n\n async getPlans(skip = 0, take = 100) {\n return await this.fetch<\n paths['/v1/plans']['get']['responses'][200]['content']['application/json']\n >(`/v1/plans?take=${take}&skip=${skip}`);\n }\n\n // INVOICE\n\n async getInvoice(id: string) {\n if (!id) {\n this.logger.error('Missing invoice ID', { id });\n throw new Error('Missing invoice ID');\n }\n\n return await this.fetch<\n paths['/v1/invoices/{id}']['get']['responses'][200]['content']['application/json']\n >(`/v1/invoices/${id}`);\n }\n\n async getInvoices(\n skip = 0,\n take = 100,\n query: operations['getInvoices']['parameters']['query'] = { status: 'all' }\n ) {\n const queryParams = new URLSearchParams();\n queryParams.set('take', take.toString());\n queryParams.set('skip', skip.toString());\n\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n queryParams.set(key, value.toString());\n }\n\n return await this.fetch<\n paths['/v1/invoices']['get']['responses'][200]['content']['application/json']\n >(`/v1/invoices?${queryParams.toString()}`);\n }\n\n async getInvoicesByCustomerId(\n id: string,\n filters?: Partial<operations['getInvoices']['parameters']['query']>\n ) {\n const queryParams = new URLSearchParams();\n queryParams.append('customerId__equals', id);\n\n if (filters) {\n Object.entries(filters).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n queryParams.append(key, value.toString());\n }\n });\n }\n\n return await this.fetch<\n paths['/v1/invoices']['get']['responses'][200]['content']['application/json']\n >(`/v1/invoices?${queryParams.toString()}`);\n }\n\n async getInvoiceDownload(id: string) {\n return await this.fetch<string>(\n // TODO: fix if type != unknown paths['/v1/invoices/{id}/download']['get']['responses'][200]['content']['application/pdf']\n `/v1/invoices/${id}/download`,\n {\n headers: { 'Content-type': 'application/pdf' },\n }\n );\n }\n\n async getAllInvoices(\n items: paths['/v1/invoices']['get']['responses'][200]['content']['application/json']['data'] = [],\n query: operations['getInvoices']['parameters']['query'] = { status: 'all' }\n ): Promise<\n paths['/v1/invoices']['get']['responses'][200]['content']['application/json']['data']\n > {\n const { data } = (await this.getInvoices(items.length, 100, {\n status: 'all',\n ...query,\n })) || {\n data: [],\n };\n\n return data.length\n ? this.getAllInvoices([...items, ...data], { status: 'all', ...query })\n : [...items, ...data];\n }\n\n async voidInvoice(\n id: string,\n data: NonNullable<\n paths['/v1/invoices/{id}/void']['post']['requestBody']\n >['content']['application/json'] = { send_email: false }\n ) {\n if (!id) {\n this.logger.error('Missing invoice ID', { id });\n throw new Error('Missing invoice ID');\n }\n\n return await this.fetch<\n paths['/v1/invoices/{id}/void']['post']['responses'][200]['content']['application/json']\n >(`/v1/invoices/${id}/void`, { method: 'POST' }, data);\n }\n\n async deleteInvoice(id: string) {\n if (!id) {\n this.logger.error('Missing invoice ID', { id });\n throw new Error('Missing invoice ID');\n }\n\n return await this.fetch<\n paths['/v1/invoices/{id}']['delete']['responses'][204]['content']\n >(`/v1/invoices/${id}`, { method: 'DELETE' });\n }\n\n // OTHERS\n\n async getCustomerPaymentMethods(customerId: string) {\n if (!customerId) {\n this.logger.error('Missing customer ID', { customerId });\n throw new Error('Missing customer ID');\n }\n\n return await this.fetch<\n paths['/v1/customers/{id}/payment-methods']['get']['responses'][200]['content']['application/json']\n >(`/v1/customers/${customerId}/payment-methods`);\n }\n\n async getPaymentMethod(customerId: string, paymentMethodId: string) {\n return await this.fetch<\n paths['/v1/customers/{id}/payment-methods/{paymentMethodId}']['get']['responses'][200]['content']['application/json']\n >(`/v1/customers/${customerId}/payment-methods/${paymentMethodId}`);\n }\n\n async createBillableEvent(data: CreateBillableEvent[]) {\n if (!data.length) return { events_created: [] };\n\n return await this.fetchIngest<BillableEvents>(\n '/v1/events/batch',\n { method: 'POST' },\n data\n );\n }\n\n async getComponentToken(data: { customer_id: string }) {\n return await this.fetch<\n paths['/v1/integrations/components/token']['post']['responses'][201]['content']['application/json']\n >('/v1/integrations/components/token', { method: 'POST' }, data);\n }\n}\n"]}
@@ -0,0 +1,73 @@
1
+ import type { currency_enum } from '@vrplatform/graphql';
2
+ import { HyperlineEntities } from './types';
3
+ export declare const VRP_TENANT_ID = "7bfec41f-aa3f-4602-95d2-f7996e4f0e59";
4
+ export declare const DEMO_TEST_PARTNER_TENANT_ID = "0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa";
5
+ export declare const XIMPLIFI_TENANT_ID = "d6ab2bbe-e0fc-48d9-89a3-c3c05f4e79b5";
6
+ export declare const XIMPLIFI_CUSTOMER_ID = "cus_HDUZawnaJbPa9p";
7
+ export declare const XIMPLIFI_DEV_CUSTOMER_ID = "cus_dNUGCETGYVu3ZV";
8
+ export declare const XIMPLIFI_COUPON_ID = "cou_MXCaik3r19_Xkn";
9
+ export declare const XIMPLIFI_DEV_COUPON_ID = "cou_MGtxHbT8IR1gK9";
10
+ export declare const ACCOUNTING_PARTNER_COUPON_ID = "cou_PJQ328MBAD9kxY";
11
+ export declare const ACCOUNTING_PARTNER_DEV_COUPON_ID = "cou_y6UfaI2X1m34Qg";
12
+ export declare const VRTRUST_HALF_PRICE_COUPON_ID = "cou_CTOQqs0SOeSc-e";
13
+ export declare const VRTRUST_HALF_PRICE_DEV_COUPON_ID = "cou_tHLiRdwQ6xGqKA";
14
+ export declare const VRTRUST_FREE_PRICE_COUPON_ID = "cou_JGiLite8_nFtnX";
15
+ export declare const VRTRUST_FREE_PRICE_DEV_COUPON_ID = "cou_N4GNqSSLEFscto";
16
+ export declare const HYPERLINE_PARTNER_TIER_10_PERCENT_COUPON_ID = "cou_56kMhdo4fYNs7c";
17
+ export declare const HYPERLINE_PARTNER_TIER_20_PERCENT_COUPON_ID = "cou_ExjGVUcu15XKeq";
18
+ export declare const HYPERLINE_PARTNER_TIER_30_PERCENT_COUPON_ID = "cou_PJI6mXZHOyoWlx";
19
+ export declare const HYPERLINE_PARTNER_TIER_40_PERCENT_COUPON_ID = "cou_gnYic7Uu8zHJX9";
20
+ export declare const HYPERLINE_PARTNER_TIER_50_PERCENT_COUPON_ID = "cou_1saVofWCoJsVyz";
21
+ export declare const HYPERLINE_PARTNER_TIER_60_PERCENT_COUPON_ID = "cou_tJI9hmHkQXjXOp";
22
+ export declare const HYPERLINE_PARTNER_TIER_COUPON_IDS: {
23
+ readonly 10: "cou_56kMhdo4fYNs7c";
24
+ readonly 20: "cou_ExjGVUcu15XKeq";
25
+ readonly 30: "cou_PJI6mXZHOyoWlx";
26
+ readonly 40: "cou_gnYic7Uu8zHJX9";
27
+ readonly 50: "cou_1saVofWCoJsVyz";
28
+ readonly 60: "cou_tJI9hmHkQXjXOp";
29
+ };
30
+ export declare const HYPERLINE_DEFAULT_PLAN_ID = "plan_Dyb5P0ICZ6HsIT";
31
+ export declare const HYPERLINE_DEFAULT_DEV_PLAN_ID = "plan_UTCVXFQnKD0oMS";
32
+ export declare const HYPERLINE_DEFAULT_PLAN_NAME = "All-in-One VRP Subscription";
33
+ export declare const HYPERLINE_DEFAULT_PRODUCT_ID = "itm_9NU7ffT14I4ris";
34
+ export declare const HYPERLINE_DEFAULT_MIN_AMOUNT = 12500;
35
+ export declare const HYPERLINE_NEW_PRICING_DIRECT_PRODUCT_ID = "itm_VeR6AJi9OyUQN2";
36
+ export declare const HYPERLINE_NEW_PRICING_PARTNER_CLIENT_PRODUCT_ID = "itm_wrrT0HuAZ8Tlh1";
37
+ export declare const HYPERLINE_PARTNER_PLAN_ID = "plan_vkYJcCz7z0XD0N";
38
+ export declare const HYPERLINE_PARTNER_DEV_PLAN_ID = "plan_8qtj8T4j0W3oiS";
39
+ export declare const HYPERLINE_PARTNER_PLAN_NAME = "VRP Subscription - Partners";
40
+ export declare const HYPERLINE_PARTNER_PRODUCT_ID = "itm_AJBM0_jPsrqizl";
41
+ export declare const GL_HYPERLINE_DEFAULT_PLAN_ID = "plan_JXviWSpU5yuokD";
42
+ export declare const GL_HYPERLINE_DEFAULT_DEV_PLAN_ID = "plan_Nnozk8_TfYqTkj";
43
+ export declare const GL_HYPERLINE_DEFAULT_PLAN_NAME = "VRTrust Subscription";
44
+ export declare const GL_HYPERLINE_DEFAULT_PRODUCT_ID = "itm_NRTRBQ0fc8bFGW";
45
+ export declare const GL_HYPERLINE_DEFAULT_MIN_AMOUNT = 25000;
46
+ export declare const GL_HYPERLINE_PARTNER_PLAN_ID = "plan_vyxckdvUi8X_mr";
47
+ export declare const GL_HYPERLINE_PARTNER_DEV_PLAN_ID = "plan_CVXQ47ErOWANhJ";
48
+ export declare const GL_HYPERLINE_PARTNER_PLAN_NAME = "VRTrust Subscription - Partners";
49
+ export declare const GL_HYPERLINE_PARTNER_PRODUCT_ID = "itm_bE4y9lhrZ6Qtsf";
50
+ export declare const WEBHOOKS: {
51
+ 'payment_method.created': "hyperline_payment_method_created";
52
+ 'payment_method.errored': "hyperline_payment_method_errored";
53
+ 'payment_method.deleted': "hyperline_payment_method_deleted";
54
+ 'payment_method.expired': "hyperline_payment_method_expired";
55
+ 'subscription.activated': "hyperline_subscription_status_changed";
56
+ 'subscription.reactivated': "hyperline_subscription_status_changed";
57
+ 'subscription.cancellation_scheduled': "hyperline_subscription_cancellation_scheduled";
58
+ 'subscription.cancelled': "hyperline_subscription_status_changed";
59
+ 'subscription.reinstated': "hyperline_subscription_status_changed";
60
+ 'subscription.charged': "hyperline_subscription_charged";
61
+ 'subscription.errored': "hyperline_subscription_status_changed";
62
+ 'subscription.paused': "hyperline_subscription_status_changed";
63
+ 'subscription.trial_ended': "hyperline_trial_ended";
64
+ 'subscription.voided': "hyperline_subscription_status_changed";
65
+ 'customer.created': "hyperline_customer_created";
66
+ 'customer.updated': "hyperline_customer_updated";
67
+ 'customer.deleted': "hyperline_customer_deleted";
68
+ 'invoice.errored': "hyperline_invoice_errored";
69
+ 'invoice.ready': "hyperline_invoice_ready";
70
+ 'invoice.settled': "hyperline_invoice_settled";
71
+ 'invoice.voided': "hyperline_invoice_voided";
72
+ };
73
+ export declare const CURRENCY_MAP: Record<currency_enum, HyperlineEntities['Invoice']['currency'] | undefined>;