@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) {
@@ -45,19 +45,11 @@ export class HyperlineAPI {
45
45
  (typeof content === 'string' ? content : null) ||
46
46
  (content ? JSON.stringify(content) : null) ||
47
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') {
48
+ if (status === 404 && method === 'GET') {
57
49
  return null;
58
50
  }
59
51
  else {
60
- throw new Error(`Hyperline Error ${status} (${statusText}) in ${path} for ${method}: ${message}`);
52
+ throw new HyperlineError(`Hyperline Error ${status} (${statusText}) in ${path} for ${method}: ${message}`, status, result.headers.get('Retry-After'));
61
53
  }
62
54
  }
63
55
  else if (result.headers.get('content-type')?.includes('application/pdf'))
@@ -84,42 +76,60 @@ export class HyperlineAPI {
84
76
  return await this.fetch(`/v1/invoicing-entities/${id}`);
85
77
  }
86
78
  // CUSTOMER
79
+ async getOrganisation(id) {
80
+ if (!id)
81
+ throw new Error('Missing organisation ID');
82
+ return await this.fetch(`/v1/organisations/${id}`);
83
+ }
84
+ async updateOrganisation(id, data) {
85
+ if (!id)
86
+ throw new Error('Missing organisation ID');
87
+ return await this.fetch(`/v1/organisations/${id}`, { method: 'PATCH' }, data);
88
+ }
87
89
  async getCustomer(id) {
88
90
  if (!id) {
89
91
  this.logger.error('Missing customer ID', { id });
90
92
  throw new Error('Missing customer ID');
91
93
  }
92
- return await this.fetch(`/v1/customers/${id}`);
94
+ return await this.fetch(`/v2/customers/${id}`);
93
95
  }
94
96
  async getCustomerById(id) {
95
97
  if (!id) {
96
98
  this.logger.error('Missing tenant ID', { id });
97
99
  throw new Error('Missing tenant ID');
98
100
  }
99
- const results = await this.fetch(`/v1/customers?external_id__equals=${id}`);
101
+ const results = await this.getCustomers({
102
+ external_id__equals: id,
103
+ status: 'all',
104
+ limit: 1,
105
+ });
100
106
  return results?.data[0];
101
107
  }
102
- async getCustomers(skip = 0, take = 100, query = {}) {
108
+ async getCustomers(query = {}) {
103
109
  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)) {
110
+ for (const [key, value] of Object.entries({ limit: 100, ...query })) {
107
111
  if (value === undefined || value === null)
108
112
  continue;
109
113
  queryParams.set(key, value.toString());
110
114
  }
111
- return await this.fetch(`/v1/customers?${queryParams.toString()}`);
115
+ return await this.fetch(`/v2/customers?${queryParams.toString()}`);
112
116
  }
113
117
  async getAllCustomers(items = [], query = {}) {
114
- const { data } = (await this.getCustomers(items.length, 100, {
118
+ await new Promise((resolve) => setTimeout(resolve, 300));
119
+ const page = await this.getCustomers({
115
120
  status: 'all',
116
121
  ...query,
117
- })) || {
118
- data: [],
119
- };
120
- return data.length
121
- ? this.getAllCustomers([...items, ...data], { status: 'all', ...query })
122
- : [...items, ...data];
122
+ });
123
+ if (!page)
124
+ throw new Error('Customer list not found');
125
+ if (page.has_more && !page.next_cursor)
126
+ throw new Error('Incomplete customer list');
127
+ return page.next_cursor
128
+ ? this.getAllCustomers([...items, ...page.data], {
129
+ ...query,
130
+ cursor: page.next_cursor,
131
+ })
132
+ : [...items, ...page.data];
123
133
  }
124
134
  async createCustomer(data) {
125
135
  return await this.fetch('/v1/customers', { method: 'POST' }, { currency: 'USD', timezone: 'Etc/UTC', ...data });
@@ -151,6 +161,20 @@ export class HyperlineAPI {
151
161
  async getCustomerPortal(id) {
152
162
  return await this.fetch(`/v1/customers/${id}/portal`);
153
163
  }
164
+ // SUBSCRIPTION TEMPLATES
165
+ async getSubscriptionTemplate(id) {
166
+ if (!id) {
167
+ this.logger.error('Missing subscription template ID', { id });
168
+ throw new Error('Missing subscription template ID');
169
+ }
170
+ return await this.fetch(`/v1/subscriptions/templates/${id}`);
171
+ }
172
+ async previewSubscriptionTransition(data) {
173
+ return await this.fetch('/v2/subscriptions/transitions/preview', { method: 'POST' }, data);
174
+ }
175
+ async createSubscriptionTransition(data) {
176
+ return await this.fetch('/v2/subscriptions/transitions', { method: 'POST' }, data);
177
+ }
154
178
  // SUBSCRIPTION
155
179
  async getSubscription(id, liveBilling = false) {
156
180
  if (!id) {
@@ -181,12 +205,18 @@ export class HyperlineAPI {
181
205
  async createSubscription(data) {
182
206
  return await this.fetch('/v2/subscriptions', { method: 'POST' }, data);
183
207
  }
208
+ async activateSubscription(id) {
209
+ return await this.fetch(`/v1/subscriptions/${id}/activate`, { method: 'POST' });
210
+ }
184
211
  async updateSubscription(id, data) {
185
212
  return await this.fetch(`/v2/subscriptions/${id}`, { method: 'PUT' }, data);
186
213
  }
187
214
  async createSubscriptionUpdate(id, data) {
188
215
  return await this.fetch(`/v1/subscriptions/${id}/update`, { method: 'POST' }, data);
189
216
  }
217
+ async createSubscriptionUpdates(id, data) {
218
+ return await this.fetch(`/v1/subscriptions/${id}/update-many`, { method: 'POST' }, data);
219
+ }
190
220
  async cancelSubscription(id, data) {
191
221
  return await this.fetch(`/v1/subscriptions/${id}/cancel`, {
192
222
  method: 'POST',
@@ -197,47 +227,42 @@ export class HyperlineAPI {
197
227
  method: 'POST',
198
228
  });
199
229
  }
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}`);
230
+ // INVOICE
231
+ async createInvoice(data) {
232
+ return await this.fetch('/v1/invoices', { method: 'POST' }, data);
207
233
  }
208
- async getPlans(skip = 0, take = 100) {
209
- return await this.fetch(`/v1/plans?take=${take}&skip=${skip}`);
234
+ async updateInvoice(id, data) {
235
+ if (!id)
236
+ throw new Error('Missing invoice ID');
237
+ return await this.fetch(`/v1/invoices/${id}`, { method: 'PATCH' }, data);
210
238
  }
211
- // INVOICE
212
239
  async getInvoice(id) {
213
240
  if (!id) {
214
241
  this.logger.error('Missing invoice ID', { id });
215
242
  throw new Error('Missing invoice ID');
216
243
  }
217
- return await this.fetch(`/v1/invoices/${id}`);
244
+ return await this.fetch(`/v2/invoices/${id}`);
245
+ }
246
+ async validateInvoice(id) {
247
+ if (!id)
248
+ throw new Error('Missing invoice ID');
249
+ return await this.fetch(`/v1/invoices/${id}/validate`, { method: 'POST' });
218
250
  }
219
- async getInvoices(skip = 0, take = 100, query = { status: 'all' }) {
251
+ async getInvoices(query = {}) {
220
252
  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)) {
253
+ for (const [key, value] of Object.entries({
254
+ limit: 100,
255
+ status: 'all',
256
+ ...query,
257
+ })) {
224
258
  if (value === undefined || value === null)
225
259
  continue;
226
260
  queryParams.set(key, value.toString());
227
261
  }
228
- return await this.fetch(`/v1/invoices?${queryParams.toString()}`);
262
+ return await this.fetch(`/v2/invoices?${queryParams.toString()}`);
229
263
  }
230
264
  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()}`);
265
+ return await this.getInvoices({ ...filters, customer_id: id });
241
266
  }
242
267
  async getInvoiceDownload(id) {
243
268
  return await this.fetch(
@@ -246,16 +271,16 @@ export class HyperlineAPI {
246
271
  headers: { 'Content-type': 'application/pdf' },
247
272
  });
248
273
  }
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];
274
+ async getAllInvoices(items = [], query = {}) {
275
+ const page = await this.getInvoices(query);
276
+ if (!page)
277
+ throw new Error('Invoice list not found');
278
+ return page.next_cursor
279
+ ? this.getAllInvoices([...items, ...page.data], {
280
+ ...query,
281
+ cursor: page.next_cursor,
282
+ })
283
+ : [...items, ...page.data];
259
284
  }
260
285
  async voidInvoice(id, data = { send_email: false }) {
261
286
  if (!id) {
@@ -284,7 +309,7 @@ export class HyperlineAPI {
284
309
  }
285
310
  async createBillableEvent(data) {
286
311
  if (!data.length)
287
- return { events_created: [] };
312
+ return { events_created: [], events_failed: [] };
288
313
  return await this.fetchIngest('/v1/events/batch', { method: 'POST' }, data);
289
314
  }
290
315
  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',