@vrplatform/hyperline-client 1.0.30 → 1.0.32

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 (60) hide show
  1. package/build/main/_types.generated.d.ts +44928 -16283
  2. package/build/main/_types.generated.js.map +1 -1
  3. package/build/main/client.d.ts +1634 -428
  4. package/build/main/client.js +87 -62
  5. package/build/main/client.js.map +1 -1
  6. package/build/main/const.d.ts +19 -20
  7. package/build/main/const.js +31 -22
  8. package/build/main/const.js.map +1 -1
  9. package/build/main/hyperlineError.d.ts +5 -0
  10. package/build/main/hyperlineError.js +14 -0
  11. package/build/main/hyperlineError.js.map +1 -0
  12. package/build/main/index.d.ts +1 -0
  13. package/build/main/index.js +1 -0
  14. package/build/main/index.js.map +1 -1
  15. package/build/main/types.d.ts +3 -10
  16. package/build/main/types.js.map +1 -1
  17. package/build/main/utils/calculateMrr.d.ts +5 -5
  18. package/build/main/utils/calculateMrr.js +7 -16
  19. package/build/main/utils/calculateMrr.js.map +1 -1
  20. package/build/main/utils/index.d.ts +0 -1
  21. package/build/main/utils/index.js +0 -1
  22. package/build/main/utils/index.js.map +1 -1
  23. package/build/module/_types.generated.d.ts +44928 -16283
  24. package/build/module/_types.generated.js.map +1 -1
  25. package/build/module/client.d.ts +1634 -428
  26. package/build/module/client.js +87 -62
  27. package/build/module/client.js.map +1 -1
  28. package/build/module/const.d.ts +19 -20
  29. package/build/module/const.js +31 -22
  30. package/build/module/const.js.map +1 -1
  31. package/build/module/hyperlineError.d.ts +5 -0
  32. package/build/module/hyperlineError.js +16 -0
  33. package/build/module/hyperlineError.js.map +1 -0
  34. package/build/module/index.d.ts +1 -0
  35. package/build/module/index.js +1 -0
  36. package/build/module/index.js.map +1 -1
  37. package/build/module/types.d.ts +3 -10
  38. package/build/module/types.js.map +1 -1
  39. package/build/module/utils/calculateMrr.d.ts +5 -5
  40. package/build/module/utils/calculateMrr.js +7 -16
  41. package/build/module/utils/calculateMrr.js.map +1 -1
  42. package/build/module/utils/index.d.ts +0 -1
  43. package/build/module/utils/index.js +0 -1
  44. package/build/module/utils/index.js.map +1 -1
  45. package/package.json +4 -4
  46. package/src/_types.generated.ts +44918 -16274
  47. package/src/client.ts +152 -92
  48. package/src/const.ts +41 -28
  49. package/src/hyperlineError.ts +17 -0
  50. package/src/index.ts +1 -0
  51. package/src/types.ts +3 -11
  52. package/src/utils/calculateMrr.ts +15 -33
  53. package/src/utils/index.ts +0 -1
  54. package/build/main/utils/isTestingTeam.d.ts +0 -5
  55. package/build/main/utils/isTestingTeam.js +0 -4
  56. package/build/main/utils/isTestingTeam.js.map +0 -1
  57. package/build/module/utils/isTestingTeam.d.ts +0 -5
  58. package/build/module/utils/isTestingTeam.js +0 -4
  59. package/build/module/utils/isTestingTeam.js.map +0 -1
  60. package/src/utils/isTestingTeam.ts +0 -11
@@ -1,4 +1,4 @@
1
- import { utc } from '@vrplatform/utils';
1
+ import { HyperlineError } from './hyperlineError';
2
2
  import { arrayBufferToBase64 } from './utils';
3
3
  export class HyperlineAPI {
4
4
  constructor(token, logger = console) {
@@ -47,19 +47,11 @@ export class HyperlineAPI {
47
47
  (typeof content === 'string' ? content : null) ||
48
48
  (content ? JSON.stringify(content) : null) ||
49
49
  'Unknown error';
50
- if (status === 429) {
51
- // get difference between rate limit reset and now
52
- const rateLimitReset = utc(result?.headers.get('x-ratelimit-reset'));
53
- const diff = rateLimitReset.diff(utc(), 'milliseconds');
54
- // wait until rate limit resets
55
- await new Promise((resolve) => setTimeout(resolve, diff));
56
- return await this.fetchBasic(path, options, data);
57
- }
58
- else if (status === 404 && method === 'GET') {
50
+ if (status === 404 && method === 'GET') {
59
51
  return null;
60
52
  }
61
53
  else {
62
- throw new Error(`Hyperline Error ${status} (${statusText}) in ${path} for ${method}: ${message}`);
54
+ throw new HyperlineError(`Hyperline Error ${status} (${statusText}) in ${path} for ${method}: ${message}`, status, result.headers.get('Retry-After'));
63
55
  }
64
56
  }
65
57
  else if (result.headers.get('content-type')?.includes('application/pdf'))
@@ -86,42 +78,60 @@ export class HyperlineAPI {
86
78
  return await this.fetch(`/v1/invoicing-entities/${id}`);
87
79
  }
88
80
  // CUSTOMER
81
+ async getOrganisation(id) {
82
+ if (!id)
83
+ throw new Error('Missing organisation ID');
84
+ return await this.fetch(`/v1/organisations/${id}`);
85
+ }
86
+ async updateOrganisation(id, data) {
87
+ if (!id)
88
+ throw new Error('Missing organisation ID');
89
+ return await this.fetch(`/v1/organisations/${id}`, { method: 'PATCH' }, data);
90
+ }
89
91
  async getCustomer(id) {
90
92
  if (!id) {
91
93
  this.logger.error('Missing customer ID', { id });
92
94
  throw new Error('Missing customer ID');
93
95
  }
94
- return await this.fetch(`/v1/customers/${id}`);
96
+ return await this.fetch(`/v2/customers/${id}`);
95
97
  }
96
98
  async getCustomerById(id) {
97
99
  if (!id) {
98
100
  this.logger.error('Missing tenant ID', { id });
99
101
  throw new Error('Missing tenant ID');
100
102
  }
101
- const results = await this.fetch(`/v1/customers?external_id__equals=${id}`);
103
+ const results = await this.getCustomers({
104
+ external_id__equals: id,
105
+ status: 'all',
106
+ limit: 1,
107
+ });
102
108
  return results?.data[0];
103
109
  }
104
- async getCustomers(skip = 0, take = 100, query = {}) {
110
+ async getCustomers(query = {}) {
105
111
  const queryParams = new URLSearchParams();
106
- queryParams.set('take', take.toString());
107
- queryParams.set('skip', skip.toString());
108
- for (const [key, value] of Object.entries(query)) {
112
+ for (const [key, value] of Object.entries({ limit: 100, ...query })) {
109
113
  if (value === undefined || value === null)
110
114
  continue;
111
115
  queryParams.set(key, value.toString());
112
116
  }
113
- return await this.fetch(`/v1/customers?${queryParams.toString()}`);
117
+ return await this.fetch(`/v2/customers?${queryParams.toString()}`);
114
118
  }
115
119
  async getAllCustomers(items = [], query = {}) {
116
- const { data } = (await this.getCustomers(items.length, 100, {
120
+ await new Promise((resolve) => setTimeout(resolve, 300));
121
+ const page = await this.getCustomers({
117
122
  status: 'all',
118
123
  ...query,
119
- })) || {
120
- data: [],
121
- };
122
- return data.length
123
- ? this.getAllCustomers([...items, ...data], { status: 'all', ...query })
124
- : [...items, ...data];
124
+ });
125
+ if (!page)
126
+ throw new Error('Customer list not found');
127
+ if (page.has_more && !page.next_cursor)
128
+ throw new Error('Incomplete customer list');
129
+ return page.next_cursor
130
+ ? this.getAllCustomers([...items, ...page.data], {
131
+ ...query,
132
+ cursor: page.next_cursor,
133
+ })
134
+ : [...items, ...page.data];
125
135
  }
126
136
  async createCustomer(data) {
127
137
  return await this.fetch('/v1/customers', { method: 'POST' }, { currency: 'USD', timezone: 'Etc/UTC', ...data });
@@ -153,6 +163,20 @@ export class HyperlineAPI {
153
163
  async getCustomerPortal(id) {
154
164
  return await this.fetch(`/v1/customers/${id}/portal`);
155
165
  }
166
+ // SUBSCRIPTION TEMPLATES
167
+ async getSubscriptionTemplate(id) {
168
+ if (!id) {
169
+ this.logger.error('Missing subscription template ID', { id });
170
+ throw new Error('Missing subscription template ID');
171
+ }
172
+ return await this.fetch(`/v1/subscriptions/templates/${id}`);
173
+ }
174
+ async previewSubscriptionTransition(data) {
175
+ return await this.fetch('/v2/subscriptions/transitions/preview', { method: 'POST' }, data);
176
+ }
177
+ async createSubscriptionTransition(data) {
178
+ return await this.fetch('/v2/subscriptions/transitions', { method: 'POST' }, data);
179
+ }
156
180
  // SUBSCRIPTION
157
181
  async getSubscription(id, liveBilling = false) {
158
182
  if (!id) {
@@ -183,12 +207,18 @@ export class HyperlineAPI {
183
207
  async createSubscription(data) {
184
208
  return await this.fetch('/v2/subscriptions', { method: 'POST' }, data);
185
209
  }
210
+ async activateSubscription(id) {
211
+ return await this.fetch(`/v1/subscriptions/${id}/activate`, { method: 'POST' });
212
+ }
186
213
  async updateSubscription(id, data) {
187
214
  return await this.fetch(`/v2/subscriptions/${id}`, { method: 'PUT' }, data);
188
215
  }
189
216
  async createSubscriptionUpdate(id, data) {
190
217
  return await this.fetch(`/v1/subscriptions/${id}/update`, { method: 'POST' }, data);
191
218
  }
219
+ async createSubscriptionUpdates(id, data) {
220
+ return await this.fetch(`/v1/subscriptions/${id}/update-many`, { method: 'POST' }, data);
221
+ }
192
222
  async cancelSubscription(id, data) {
193
223
  return await this.fetch(`/v1/subscriptions/${id}/cancel`, {
194
224
  method: 'POST',
@@ -199,47 +229,42 @@ export class HyperlineAPI {
199
229
  method: 'POST',
200
230
  });
201
231
  }
202
- // PLAN
203
- async getPlan(id) {
204
- if (!id) {
205
- this.logger.error('Missing plan ID', { id });
206
- throw new Error('Missing plan ID');
207
- }
208
- return await this.fetch(`/v1/plans/${id}`);
232
+ // INVOICE
233
+ async createInvoice(data) {
234
+ return await this.fetch('/v1/invoices', { method: 'POST' }, data);
209
235
  }
210
- async getPlans(skip = 0, take = 100) {
211
- return await this.fetch(`/v1/plans?take=${take}&skip=${skip}`);
236
+ async updateInvoice(id, data) {
237
+ if (!id)
238
+ throw new Error('Missing invoice ID');
239
+ return await this.fetch(`/v1/invoices/${id}`, { method: 'PATCH' }, data);
212
240
  }
213
- // INVOICE
214
241
  async getInvoice(id) {
215
242
  if (!id) {
216
243
  this.logger.error('Missing invoice ID', { id });
217
244
  throw new Error('Missing invoice ID');
218
245
  }
219
- return await this.fetch(`/v1/invoices/${id}`);
246
+ return await this.fetch(`/v2/invoices/${id}`);
247
+ }
248
+ async validateInvoice(id) {
249
+ if (!id)
250
+ throw new Error('Missing invoice ID');
251
+ return await this.fetch(`/v1/invoices/${id}/validate`, { method: 'POST' });
220
252
  }
221
- async getInvoices(skip = 0, take = 100, query = { status: 'all' }) {
253
+ async getInvoices(query = {}) {
222
254
  const queryParams = new URLSearchParams();
223
- queryParams.set('take', take.toString());
224
- queryParams.set('skip', skip.toString());
225
- for (const [key, value] of Object.entries(query)) {
255
+ for (const [key, value] of Object.entries({
256
+ limit: 100,
257
+ status: 'all',
258
+ ...query,
259
+ })) {
226
260
  if (value === undefined || value === null)
227
261
  continue;
228
262
  queryParams.set(key, value.toString());
229
263
  }
230
- return await this.fetch(`/v1/invoices?${queryParams.toString()}`);
264
+ return await this.fetch(`/v2/invoices?${queryParams.toString()}`);
231
265
  }
232
266
  async getInvoicesByCustomerId(id, filters) {
233
- const queryParams = new URLSearchParams();
234
- queryParams.append('customerId__equals', id);
235
- if (filters) {
236
- Object.entries(filters).forEach(([key, value]) => {
237
- if (value !== undefined && value !== null) {
238
- queryParams.append(key, value.toString());
239
- }
240
- });
241
- }
242
- return await this.fetch(`/v1/invoices?${queryParams.toString()}`);
267
+ return await this.getInvoices({ ...filters, customer_id: id });
243
268
  }
244
269
  async getInvoiceDownload(id) {
245
270
  return await this.fetch(
@@ -248,16 +273,16 @@ export class HyperlineAPI {
248
273
  headers: { 'Content-type': 'application/pdf' },
249
274
  });
250
275
  }
251
- async getAllInvoices(items = [], query = { status: 'all' }) {
252
- const { data } = (await this.getInvoices(items.length, 100, {
253
- status: 'all',
254
- ...query,
255
- })) || {
256
- data: [],
257
- };
258
- return data.length
259
- ? this.getAllInvoices([...items, ...data], { status: 'all', ...query })
260
- : [...items, ...data];
276
+ async getAllInvoices(items = [], query = {}) {
277
+ const page = await this.getInvoices(query);
278
+ if (!page)
279
+ throw new Error('Invoice list not found');
280
+ return page.next_cursor
281
+ ? this.getAllInvoices([...items, ...page.data], {
282
+ ...query,
283
+ cursor: page.next_cursor,
284
+ })
285
+ : [...items, ...page.data];
261
286
  }
262
287
  async voidInvoice(id, data = { send_email: false }) {
263
288
  if (!id) {
@@ -286,7 +311,7 @@ export class HyperlineAPI {
286
311
  }
287
312
  async createBillableEvent(data) {
288
313
  if (!data.length)
289
- return { events_created: [] };
314
+ return { events_created: [], events_failed: [] };
290
315
  return await this.fetchIngest('/v1/events/batch', { method: 'POST' }, data);
291
316
  }
292
317
  async getComponentToken(data) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"src/","sources":["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"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"src/","sources":["client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { paths } from './_types.generated';\nimport { HyperlineError } from './hyperlineError';\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 === 404 && method === 'GET') {\n return null;\n } else {\n throw new HyperlineError(\n `Hyperline Error ${status} (${statusText}) in ${path} for ${method}: ${message}`,\n status,\n result.headers.get('Retry-After')\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 getOrganisation(id: string) {\n if (!id) throw new Error('Missing organisation ID');\n return await this.fetch<\n paths['/v1/organisations/{id}']['get']['responses'][200]['content']['application/json']\n >(`/v1/organisations/${id}`);\n }\n\n async updateOrganisation(\n id: string,\n data: NonNullable<\n paths['/v1/organisations/{id}']['patch']['requestBody']\n >['content']['application/json']\n ) {\n if (!id) throw new Error('Missing organisation ID');\n return await this.fetch<\n paths['/v1/organisations/{id}']['patch']['responses'][200]['content']['application/json']\n >(`/v1/organisations/${id}`, { method: 'PATCH' }, data);\n }\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['/v2/customers/{id}']['get']['responses'][200]['content']['application/json']\n >(`/v2/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.getCustomers({\n external_id__equals: id,\n status: 'all',\n limit: 1,\n });\n\n return results?.data[0];\n }\n\n async getCustomers(\n query: paths['/v2/customers']['get']['parameters']['query'] = {}\n ) {\n const queryParams = new URLSearchParams();\n\n for (const [key, value] of Object.entries({ limit: 100, ...query })) {\n if (value === undefined || value === null) continue;\n queryParams.set(key, value.toString());\n }\n\n return await this.fetch<\n paths['/v2/customers']['get']['responses'][200]['content']['application/json']\n >(`/v2/customers?${queryParams.toString()}`);\n }\n\n async getAllCustomers(\n items: paths['/v2/customers']['get']['responses'][200]['content']['application/json']['data'] = [],\n query: paths['/v2/customers']['get']['parameters']['query'] = {}\n ): Promise<\n paths['/v2/customers']['get']['responses'][200]['content']['application/json']['data']\n > {\n await new Promise((resolve) => setTimeout(resolve, 300));\n const page = await this.getCustomers({\n status: 'all',\n ...query,\n });\n if (!page) throw new Error('Customer list not found');\n if (page.has_more && !page.next_cursor)\n throw new Error('Incomplete customer list');\n\n return page.next_cursor\n ? this.getAllCustomers([...items, ...page.data], {\n ...query,\n cursor: page.next_cursor,\n })\n : [...items, ...page.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 TEMPLATES\n\n async getSubscriptionTemplate(id: string) {\n if (!id) {\n this.logger.error('Missing subscription template ID', { id });\n throw new Error('Missing subscription template ID');\n }\n\n return await this.fetch<\n paths['/v1/subscriptions/templates/{id}']['get']['responses'][200]['content']['application/json']\n >(`/v1/subscriptions/templates/${id}`);\n }\n\n async previewSubscriptionTransition(\n data: NonNullable<\n paths['/v2/subscriptions/transitions/preview']['post']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v2/subscriptions/transitions/preview']['post']['responses'][200]['content']['application/json']\n >('/v2/subscriptions/transitions/preview', { method: 'POST' }, data);\n }\n\n async createSubscriptionTransition(\n data: NonNullable<\n paths['/v2/subscriptions/transitions']['post']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v2/subscriptions/transitions']['post']['responses'][200]['content']['application/json']\n >('/v2/subscriptions/transitions', { method: 'POST' }, data);\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: paths['/v2/subscriptions']['get']['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: paths['/v2/subscriptions']['get']['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 activateSubscription(id: string) {\n return await this.fetch<\n paths['/v1/subscriptions/{id}/activate']['post']['responses'][200]['content']['application/json']\n >(`/v1/subscriptions/${id}/activate`, { method: 'POST' });\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 createSubscriptionUpdates(\n id: string,\n data: NonNullable<\n paths['/v1/subscriptions/{id}/update-many']['post']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v1/subscriptions/{id}/update-many']['post']['responses'][201]['content']['application/json']\n >(`/v1/subscriptions/${id}/update-many`, { 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 // INVOICE\n\n async createInvoice(\n data: NonNullable<\n paths['/v1/invoices']['post']['requestBody']\n >['content']['application/json']\n ) {\n return await this.fetch<\n paths['/v1/invoices']['post']['responses'][201]['content']['application/json']\n >('/v1/invoices', { method: 'POST' }, data);\n }\n\n async updateInvoice(\n id: string,\n data: NonNullable<\n paths['/v1/invoices/{id}']['patch']['requestBody']\n >['content']['application/json']\n ) {\n if (!id) throw new Error('Missing invoice ID');\n return await this.fetch<\n paths['/v1/invoices/{id}']['patch']['responses'][200]['content']['application/json']\n >(`/v1/invoices/${id}`, { method: 'PATCH' }, data);\n }\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['/v2/invoices/{id}']['get']['responses'][200]['content']['application/json']\n >(`/v2/invoices/${id}`);\n }\n\n async validateInvoice(id: string) {\n if (!id) throw new Error('Missing invoice ID');\n return await this.fetch<\n paths['/v1/invoices/{id}/validate']['post']['responses'][200]['content']['application/json']\n >(`/v1/invoices/${id}/validate`, { method: 'POST' });\n }\n\n async getInvoices(\n query: paths['/v2/invoices']['get']['parameters']['query'] = {}\n ) {\n const queryParams = new URLSearchParams();\n for (const [key, value] of Object.entries({\n limit: 100,\n status: 'all',\n ...query,\n })) {\n if (value === undefined || value === null) continue;\n queryParams.set(key, value.toString());\n }\n\n return await this.fetch<\n paths['/v2/invoices']['get']['responses'][200]['content']['application/json']\n >(`/v2/invoices?${queryParams.toString()}`);\n }\n\n async getInvoicesByCustomerId(\n id: string,\n filters?: paths['/v2/invoices']['get']['parameters']['query']\n ) {\n return await this.getInvoices({ ...filters, customer_id: id });\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['/v2/invoices']['get']['responses'][200]['content']['application/json']['data'] = [],\n query: paths['/v2/invoices']['get']['parameters']['query'] = {}\n ): Promise<\n paths['/v2/invoices']['get']['responses'][200]['content']['application/json']['data']\n > {\n const page = await this.getInvoices(query);\n if (!page) throw new Error('Invoice list not found');\n\n return page.next_cursor\n ? this.getAllInvoices([...items, ...page.data], {\n ...query,\n cursor: page.next_cursor,\n })\n : [...items, ...page.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: [], events_failed: [] };\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"]}
@@ -2,10 +2,11 @@ export declare const VRP_TENANT_ID = "7bfec41f-aa3f-4602-95d2-f7996e4f0e59";
2
2
  export declare const DEMO_TEST_PARTNER_TENANT_ID = "0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa";
3
3
  export declare const XIMPLIFI_TENANT_ID = "d6ab2bbe-e0fc-48d9-89a3-c3c05f4e79b5";
4
4
  export declare const TEST_TENANT_ID = "fa4d1a20-2f47-4021-9c72-c5a809be9c48";
5
- export declare const XIMPLIFI_CUSTOMER_ID = "cus_HDUZawnaJbPa9p";
6
- export declare const XIMPLIFI_DEV_CUSTOMER_ID = "cus_dNUGCETGYVu3ZV";
7
- export declare const XIMPLIFI_COUPON_ID = "cou_MXCaik3r19_Xkn";
8
- export declare const XIMPLIFI_DEV_COUPON_ID = "cou_MGtxHbT8IR1gK9";
5
+ export declare const BOBW_TENANT_ID = "cb23b44b-c96b-4fc4-95aa-1bf71b1c0f92";
6
+ export declare const HOSTAWAY_PRODUCTION_TENANT_ID = "4d1583e6-1c76-4bd2-bf8d-ca07d45eedb7";
7
+ export declare const HOSTAWAY_STAGING_TENANT_ID = "10834664-606b-4b92-acb9-f3e454632f7a";
8
+ export declare const HOSTAWAY_COSELLING_TENANT_ID = "636dcf13-7b34-4a7f-9b45-60bbb1380d15";
9
+ export declare const HOSTAWAY_PARTNER_TENANT_IDS: string[];
9
10
  export declare const ACCOUNTING_PARTNER_COUPON_ID = "cou_PJQ328MBAD9kxY";
10
11
  export declare const ACCOUNTING_PARTNER_DEV_COUPON_ID = "cou_y6UfaI2X1m34Qg";
11
12
  export declare const VRTRUST_HALF_PRICE_COUPON_ID = "cou_CTOQqs0SOeSc-e";
@@ -26,32 +27,30 @@ export declare const HYPERLINE_PARTNER_TIER_COUPON_IDS: {
26
27
  readonly 50: "cou_1saVofWCoJsVyz";
27
28
  readonly 60: "cou_tJI9hmHkQXjXOp";
28
29
  };
29
- export declare const HYPERLINE_DEFAULT_PLAN_ID = "plan_Dyb5P0ICZ6HsIT";
30
- export declare const HYPERLINE_DEFAULT_DEV_PLAN_ID = "plan_UTCVXFQnKD0oMS";
31
- export declare const HYPERLINE_DEFAULT_PLAN_NAME = "All-in-One VRP Subscription";
30
+ export declare const DIRECT_PRICING_TEMPLATE_ID = "subt_Knj7TspKQNAdgE";
31
+ export declare const DIRECT_PRICING_DEV_TEMPLATE_ID = "subt_3kdBL2APUz94Vh";
32
+ export declare const PARTNER_CLIENT_PRICING_TEMPLATE_ID = "subt_p0bWvUpe59ilo4";
33
+ export declare const PARTNER_CLIENT_PRICING_DEV_TEMPLATE_ID = "subt_c972Mz800ZB3C8";
34
+ export declare const PARTNER_PRICING_TEMPLATE_ID = "subt_qt58CknWGtPHxH";
35
+ export declare const PARTNER_PRICING_DEV_TEMPLATE_ID = "subt_NIoe1kA3Xs4353";
36
+ export declare const HOSTAWAY_PRICING_TEMPLATE_ID = "subt_gVo8boDZBZvsZk";
37
+ export declare const HOSTAWAY_PRICING_DEV_TEMPLATE_ID = "subt_PkEm701PH78Bgn";
38
+ export declare const BOBW_PRICING_TEMPLATE_ID = "subt_XpHcieqR2Exn4q";
39
+ export declare const BOBW_PRICING_DEV_TEMPLATE_ID = "subt_yRmLj6Fdr5R9Sh";
40
+ export declare const SUBSCRIPTION_TEMPLATE_NAMES: readonly ["VRPlatform Subscription - Direct", "VRPlatform Subscription - Partner Clients", "VRPlatform Subscription - Partner", "VRPlatform Subscription - Hostaway", "VRPlatform Subscription - BobW"];
32
41
  export declare const HYPERLINE_DEFAULT_PRODUCT_ID = "itm_9NU7ffT14I4ris";
33
- export declare const HYPERLINE_DEFAULT_MIN_AMOUNT = 12500;
34
- export declare const HYPERLINE_NEW_PRICING_DIRECT_PRODUCT_ID = "itm_VeR6AJi9OyUQN2";
35
- export declare const HYPERLINE_NEW_PRICING_PARTNER_CLIENT_PRODUCT_ID = "itm_wrrT0HuAZ8Tlh1";
36
- export declare const HYPERLINE_PARTNER_PLAN_ID = "plan_vkYJcCz7z0XD0N";
37
- export declare const HYPERLINE_PARTNER_DEV_PLAN_ID = "plan_8qtj8T4j0W3oiS";
38
- export declare const HYPERLINE_PARTNER_PLAN_NAME = "VRP Subscription - Partners";
39
42
  export declare const HYPERLINE_PARTNER_PRODUCT_ID = "itm_AJBM0_jPsrqizl";
40
- export declare const GL_HYPERLINE_DEFAULT_PLAN_ID = "plan_JXviWSpU5yuokD";
41
- export declare const GL_HYPERLINE_DEFAULT_DEV_PLAN_ID = "plan_Nnozk8_TfYqTkj";
42
- export declare const GL_HYPERLINE_DEFAULT_PLAN_NAME = "VRTrust Subscription";
43
43
  export declare const GL_HYPERLINE_DEFAULT_PRODUCT_ID = "itm_NRTRBQ0fc8bFGW";
44
- export declare const GL_HYPERLINE_DEFAULT_MIN_AMOUNT = 25000;
45
- export declare const GL_HYPERLINE_PARTNER_PLAN_ID = "plan_vyxckdvUi8X_mr";
46
- export declare const GL_HYPERLINE_PARTNER_DEV_PLAN_ID = "plan_CVXQ47ErOWANhJ";
47
- export declare const GL_HYPERLINE_PARTNER_PLAN_NAME = "VRTrust Subscription - Partners";
48
44
  export declare const GL_HYPERLINE_PARTNER_PRODUCT_ID = "itm_bE4y9lhrZ6Qtsf";
45
+ export declare const HYPERLINE_NEW_PRICING_DIRECT_PRODUCT_ID = "itm_VeR6AJi9OyUQN2";
46
+ export declare const HYPERLINE_NEW_PRICING_PARTNER_CLIENT_PRODUCT_ID = "itm_wrrT0HuAZ8Tlh1";
49
47
  export declare const WEBHOOKS: {
50
48
  'payment_method.created': "hyperline_payment_method_created";
51
49
  'payment_method.errored': "hyperline_payment_method_errored";
52
50
  'payment_method.deleted': "hyperline_payment_method_deleted";
53
51
  'payment_method.expired': "hyperline_payment_method_expired";
54
52
  'subscription.activated': "hyperline_subscription_status_changed";
53
+ 'subscription.updated': "hyperline_subscription_status_changed";
55
54
  'subscription.reactivated': "hyperline_subscription_status_changed";
56
55
  'subscription.cancellation_scheduled': "hyperline_subscription_cancellation_scheduled";
57
56
  'subscription.cancelled': "hyperline_subscription_status_changed";
@@ -3,12 +3,16 @@ export const VRP_TENANT_ID = '7bfec41f-aa3f-4602-95d2-f7996e4f0e59';
3
3
  export const DEMO_TEST_PARTNER_TENANT_ID = '0b6a7bd6-56cc-46b5-b2ab-1bd7d1e994fa';
4
4
  export const XIMPLIFI_TENANT_ID = 'd6ab2bbe-e0fc-48d9-89a3-c3c05f4e79b5';
5
5
  export const TEST_TENANT_ID = 'fa4d1a20-2f47-4021-9c72-c5a809be9c48';
6
- // Customers
7
- export const XIMPLIFI_CUSTOMER_ID = 'cus_HDUZawnaJbPa9p';
8
- export const XIMPLIFI_DEV_CUSTOMER_ID = 'cus_dNUGCETGYVu3ZV';
6
+ export const BOBW_TENANT_ID = 'cb23b44b-c96b-4fc4-95aa-1bf71b1c0f92';
7
+ export const HOSTAWAY_PRODUCTION_TENANT_ID = '4d1583e6-1c76-4bd2-bf8d-ca07d45eedb7';
8
+ export const HOSTAWAY_STAGING_TENANT_ID = '10834664-606b-4b92-acb9-f3e454632f7a';
9
+ export const HOSTAWAY_COSELLING_TENANT_ID = '636dcf13-7b34-4a7f-9b45-60bbb1380d15';
10
+ export const HOSTAWAY_PARTNER_TENANT_IDS = [
11
+ HOSTAWAY_STAGING_TENANT_ID,
12
+ HOSTAWAY_PRODUCTION_TENANT_ID,
13
+ HOSTAWAY_COSELLING_TENANT_ID,
14
+ ];
9
15
  // Coupons
10
- export const XIMPLIFI_COUPON_ID = 'cou_MXCaik3r19_Xkn';
11
- export const XIMPLIFI_DEV_COUPON_ID = 'cou_MGtxHbT8IR1gK9';
12
16
  export const ACCOUNTING_PARTNER_COUPON_ID = 'cou_PJQ328MBAD9kxY';
13
17
  export const ACCOUNTING_PARTNER_DEV_COUPON_ID = 'cou_y6UfaI2X1m34Qg';
14
18
  export const VRTRUST_HALF_PRICE_COUPON_ID = 'cou_CTOQqs0SOeSc-e'; // 50% off
@@ -29,33 +33,38 @@ export const HYPERLINE_PARTNER_TIER_COUPON_IDS = {
29
33
  50: HYPERLINE_PARTNER_TIER_50_PERCENT_COUPON_ID,
30
34
  60: HYPERLINE_PARTNER_TIER_60_PERCENT_COUPON_ID,
31
35
  };
32
- // Plans
33
- export const HYPERLINE_DEFAULT_PLAN_ID = 'plan_Dyb5P0ICZ6HsIT';
34
- export const HYPERLINE_DEFAULT_DEV_PLAN_ID = 'plan_UTCVXFQnKD0oMS';
35
- export const HYPERLINE_DEFAULT_PLAN_NAME = 'All-in-One VRP Subscription';
36
+ // Subscription templates
37
+ export const DIRECT_PRICING_TEMPLATE_ID = 'subt_Knj7TspKQNAdgE';
38
+ export const DIRECT_PRICING_DEV_TEMPLATE_ID = 'subt_3kdBL2APUz94Vh';
39
+ export const PARTNER_CLIENT_PRICING_TEMPLATE_ID = 'subt_p0bWvUpe59ilo4';
40
+ export const PARTNER_CLIENT_PRICING_DEV_TEMPLATE_ID = 'subt_c972Mz800ZB3C8';
41
+ export const PARTNER_PRICING_TEMPLATE_ID = 'subt_qt58CknWGtPHxH';
42
+ export const PARTNER_PRICING_DEV_TEMPLATE_ID = 'subt_NIoe1kA3Xs4353';
43
+ export const HOSTAWAY_PRICING_TEMPLATE_ID = 'subt_gVo8boDZBZvsZk';
44
+ export const HOSTAWAY_PRICING_DEV_TEMPLATE_ID = 'subt_PkEm701PH78Bgn';
45
+ export const BOBW_PRICING_TEMPLATE_ID = 'subt_XpHcieqR2Exn4q';
46
+ export const BOBW_PRICING_DEV_TEMPLATE_ID = 'subt_yRmLj6Fdr5R9Sh';
47
+ export const SUBSCRIPTION_TEMPLATE_NAMES = [
48
+ 'VRPlatform Subscription - Direct',
49
+ 'VRPlatform Subscription - Partner Clients',
50
+ 'VRPlatform Subscription - Partner',
51
+ 'VRPlatform Subscription - Hostaway',
52
+ 'VRPlatform Subscription - BobW',
53
+ ];
54
+ // Product identifiers retained only for historical invoice comparisons.
36
55
  export const HYPERLINE_DEFAULT_PRODUCT_ID = 'itm_9NU7ffT14I4ris';
37
- export const HYPERLINE_DEFAULT_MIN_AMOUNT = 12500;
38
- export const HYPERLINE_NEW_PRICING_DIRECT_PRODUCT_ID = 'itm_VeR6AJi9OyUQN2';
39
- export const HYPERLINE_NEW_PRICING_PARTNER_CLIENT_PRODUCT_ID = 'itm_wrrT0HuAZ8Tlh1';
40
- export const HYPERLINE_PARTNER_PLAN_ID = 'plan_vkYJcCz7z0XD0N';
41
- export const HYPERLINE_PARTNER_DEV_PLAN_ID = 'plan_8qtj8T4j0W3oiS';
42
- export const HYPERLINE_PARTNER_PLAN_NAME = 'VRP Subscription - Partners';
43
56
  export const HYPERLINE_PARTNER_PRODUCT_ID = 'itm_AJBM0_jPsrqizl';
44
- export const GL_HYPERLINE_DEFAULT_PLAN_ID = 'plan_JXviWSpU5yuokD';
45
- export const GL_HYPERLINE_DEFAULT_DEV_PLAN_ID = 'plan_Nnozk8_TfYqTkj';
46
- export const GL_HYPERLINE_DEFAULT_PLAN_NAME = 'VRTrust Subscription';
47
57
  export const GL_HYPERLINE_DEFAULT_PRODUCT_ID = 'itm_NRTRBQ0fc8bFGW';
48
- export const GL_HYPERLINE_DEFAULT_MIN_AMOUNT = 25000;
49
- export const GL_HYPERLINE_PARTNER_PLAN_ID = 'plan_vyxckdvUi8X_mr';
50
- export const GL_HYPERLINE_PARTNER_DEV_PLAN_ID = 'plan_CVXQ47ErOWANhJ';
51
- export const GL_HYPERLINE_PARTNER_PLAN_NAME = 'VRTrust Subscription - Partners';
52
58
  export const GL_HYPERLINE_PARTNER_PRODUCT_ID = 'itm_bE4y9lhrZ6Qtsf';
59
+ export const HYPERLINE_NEW_PRICING_DIRECT_PRODUCT_ID = 'itm_VeR6AJi9OyUQN2';
60
+ export const HYPERLINE_NEW_PRICING_PARTNER_CLIENT_PRODUCT_ID = 'itm_wrrT0HuAZ8Tlh1';
53
61
  export const WEBHOOKS = {
54
62
  'payment_method.created': 'hyperline_payment_method_created',
55
63
  'payment_method.errored': 'hyperline_payment_method_errored',
56
64
  'payment_method.deleted': 'hyperline_payment_method_deleted',
57
65
  'payment_method.expired': 'hyperline_payment_method_expired',
58
66
  'subscription.activated': 'hyperline_subscription_status_changed',
67
+ 'subscription.updated': 'hyperline_subscription_status_changed',
59
68
  'subscription.reactivated': 'hyperline_subscription_status_changed',
60
69
  'subscription.cancellation_scheduled': 'hyperline_subscription_cancellation_scheduled',
61
70
  'subscription.cancelled': 'hyperline_subscription_status_changed',