@meaple-com/core 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/index.cjs +14 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -5
- package/dist/index.d.ts +12 -5
- package/dist/index.js +14 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ bun add @meaple-com/core @meaple-com/types
|
|
|
20
20
|
import { MeapleSDK } from '@meaple-com/core';
|
|
21
21
|
|
|
22
22
|
const sdk = new MeapleSDK({
|
|
23
|
-
|
|
23
|
+
clientId: 'YOUR_CLIENT_ID',
|
|
24
24
|
baseURL: 'https://api.meaple.com',
|
|
25
25
|
});
|
|
26
26
|
|
|
@@ -60,10 +60,10 @@ All methods are typed with `@meaple-com/types`.
|
|
|
60
60
|
## Options
|
|
61
61
|
|
|
62
62
|
```ts
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
type MeapleSDKOptions = {
|
|
64
|
+
clientId: string; // App id, the same as the OAuth client_id (X-Client-Id)
|
|
65
65
|
baseURL: string; // e.g. https://api.meaple.com
|
|
66
|
-
}
|
|
66
|
+
};
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
## Utilities
|
package/dist/index.cjs
CHANGED
|
@@ -194,17 +194,20 @@ var EventsResource = class {
|
|
|
194
194
|
});
|
|
195
195
|
return response.data;
|
|
196
196
|
}
|
|
197
|
-
// Cities with upcoming published events (
|
|
197
|
+
// Cities with upcoming published events (scoped by the x-client-id header)
|
|
198
198
|
async getCities() {
|
|
199
199
|
const response = await api.get(
|
|
200
200
|
"/v1/events/cities"
|
|
201
201
|
);
|
|
202
202
|
return response.data.cities;
|
|
203
203
|
}
|
|
204
|
-
// Get event by slug
|
|
205
|
-
async getBySlug(
|
|
204
|
+
// Get event by slug. Event slugs are unique per channel, so the channel slug is required.
|
|
205
|
+
async getBySlug({
|
|
206
|
+
eventSlug,
|
|
207
|
+
channelSlug
|
|
208
|
+
}) {
|
|
206
209
|
const response = await api.get(
|
|
207
|
-
`/v1/events/${eventSlug}`
|
|
210
|
+
`/v1/channels/${channelSlug}/events/${eventSlug}`
|
|
208
211
|
);
|
|
209
212
|
return response.data.event;
|
|
210
213
|
}
|
|
@@ -269,9 +272,13 @@ var OrdersResource = class {
|
|
|
269
272
|
|
|
270
273
|
// src/resources/payments/index.ts
|
|
271
274
|
var PaymentsResource = class {
|
|
272
|
-
|
|
275
|
+
// Fees can be overridden per channel, so the event's channel is required
|
|
276
|
+
async getFee({
|
|
277
|
+
eventId,
|
|
278
|
+
channelId
|
|
279
|
+
}) {
|
|
273
280
|
const response = await api.get("/v1/payments/fee", {
|
|
274
|
-
params: { eventId }
|
|
281
|
+
params: { eventId, channelId }
|
|
275
282
|
});
|
|
276
283
|
return response.data;
|
|
277
284
|
}
|
|
@@ -327,7 +334,7 @@ var MeapleSDK = class {
|
|
|
327
334
|
tickets;
|
|
328
335
|
constructor(config) {
|
|
329
336
|
api.setBaseURL(config.baseURL);
|
|
330
|
-
api.setDefaultHeader("X-
|
|
337
|
+
api.setDefaultHeader("X-Client-Id", config.clientId);
|
|
331
338
|
this.users = new UsersResource();
|
|
332
339
|
this.events = new EventsResource();
|
|
333
340
|
this.orders = new OrdersResource();
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/http/api.ts","../src/resources/categories/index.ts","../src/resources/coupon/index.ts","../src/resources/events/index.ts","../src/resources/orders/index.ts","../src/resources/payments/index.ts","../src/resources/tickets/index.ts","../src/resources/users/index.ts","../src/meaple-sdk.ts","../src/utils/colorMapping.ts","../src/utils/descriptionToHtml.ts"],"sourcesContent":["export { api } from './core/http/api';\nexport type { MeapleSDKOptions } from './meaple-sdk';\nexport { MeapleSDK } from './meaple-sdk';\nexport { descriptionToHtml } from './utils/descriptionToHtml';\n\n// Export resources for use in hooks\nexport { CategoriesResource } from './resources/categories';\nexport { CouponResource } from './resources/coupon';\nexport { EventsResource } from './resources/events';\nexport { OrdersResource } from './resources/orders';\nexport { PaymentsResource } from './resources/payments';\nexport { TicketsResource } from './resources/tickets';\nexport { UsersResource } from './resources/users';\n","import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport interface ApiResponse<T = any> {\n data: T;\n success?: boolean;\n timestamp?: string;\n requestId?: string;\n}\n\nexport interface ApiConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n}\n\ninterface RequestInterceptor {\n onRequest(config: any): Promise<any>;\n}\n\n// ============================================================================\n// API Client\n// ============================================================================\n\nexport class SimpleApiClient {\n private axios: AxiosInstance;\n private interceptors: {\n request: RequestInterceptor[];\n response: ((response: any) => any)[];\n } = { request: [], response: [] };\n\n constructor(config: ApiConfig = {}) {\n this.axios = axios.create({\n baseURL: config.baseURL ?? 'http://localhost:1234',\n timeout: config.timeout ?? 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n });\n\n this.setupInterceptors();\n }\n\n // --------------------------------------------------------------------------\n // Configuration Methods\n // --------------------------------------------------------------------------\n\n setDefaultHeader(name: string, value: string): void {\n this.axios.defaults.headers.common[name] = value;\n }\n\n removeDefaultHeader(name: string): void {\n delete this.axios.defaults.headers.common[name];\n }\n\n setBaseURL(baseURL: string): void {\n this.axios.defaults.baseURL = baseURL;\n }\n\n setBearerToken(token: string): void {\n this.setDefaultHeader('Authorization', `Bearer ${token}`);\n }\n\n get axiosInstance(): AxiosInstance {\n return this.axios;\n }\n\n // --------------------------------------------------------------------------\n // Interceptors\n // --------------------------------------------------------------------------\n\n addRequestInterceptor(interceptor: RequestInterceptor): void {\n this.interceptors.request.push(interceptor);\n }\n\n addResponseInterceptor(\n onFulfilled?: (response: any) => any,\n onRejected?: (error: any) => any\n ): void {\n if (onFulfilled) {\n this.interceptors.response.push(onFulfilled);\n }\n if (onRejected) {\n this.axios.interceptors.response.use(undefined, onRejected);\n }\n }\n\n clearInterceptors(): void {\n this.interceptors.request = [];\n this.interceptors.response = [];\n }\n\n // --------------------------------------------------------------------------\n // HTTP Methods\n // --------------------------------------------------------------------------\n\n async get<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.get(url, config);\n return this.formatResponse(response);\n }\n\n async post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.post(url, data, config);\n return this.formatResponse(response);\n }\n\n async put<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.put(url, data, config);\n return this.formatResponse(response);\n }\n\n async patch<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.patch(url, data, config);\n return this.formatResponse(response);\n }\n\n async delete<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.delete(url, config);\n return this.formatResponse(response);\n }\n\n // --------------------------------------------------------------------------\n // Private Methods\n // --------------------------------------------------------------------------\n\n private setupInterceptors(): void {\n // Request interceptor\n this.axios.interceptors.request.use(async config => {\n let processedConfig = config;\n for (const interceptor of this.interceptors.request) {\n processedConfig = await interceptor.onRequest(processedConfig);\n }\n return processedConfig;\n });\n\n // Response interceptor\n this.axios.interceptors.response.use(response => {\n let processedResponse = response;\n for (const interceptor of this.interceptors.response) {\n processedResponse = interceptor(processedResponse);\n }\n return processedResponse;\n });\n }\n\n private formatResponse<T>(response: AxiosResponse): ApiResponse<T> {\n const requestId = response.headers['x-request-id'];\n\n // Se response.data for um Blob, retornar diretamente sem formatação adicional\n if (response.data instanceof Blob) {\n return {\n data: response.data as any,\n success: response.status >= 200 && response.status < 300,\n timestamp: new Date().toISOString(),\n ...(requestId && { requestId }),\n };\n }\n\n return {\n data: response.data,\n success: response.status >= 200 && response.status < 300,\n timestamp: new Date().toISOString(),\n ...(requestId && { requestId }),\n };\n }\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport const api = new SimpleApiClient();\n","import { CategoryProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class CategoriesResource {\n async find(): Promise<CategoryProps[]> {\n const response = await api.get<{ categories: CategoryProps[] }>(\n '/v1/categories'\n );\n return response.data.categories;\n }\n}\n","import { CheckCouponProps, CouponProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class CouponResource {\n async check({ eventId, couponCode }: CheckCouponProps): Promise<CouponProps> {\n const response = await api.get<{ coupon: CouponProps }>(\n `/v1/events/${eventId}/coupons/${couponCode}/check`\n );\n return response.data.coupon;\n }\n}\n","import type {\n CreateEventReminderProps,\n EventCityProps,\n EventProps,\n FindEventsParams,\n FindEventsResponseProps,\n GetChannelEventProps,\n GetEventProductProps,\n GetEventProductsResponseProps,\n GetEventTicketProps,\n GetEventTicketsResponseProps,\n UserTicketProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\n// Helper functions\nconst formatTicket = (ticket: GetEventTicketProps): GetEventTicketProps => ({\n ...ticket,\n price: Number(ticket.price.toFixed(2)),\n});\n\nconst formatProducts = (\n product: GetEventProductProps\n): GetEventProductProps => ({\n ...product,\n price: Number(product.price.toFixed(2)),\n});\n\nexport class EventsResource {\n // Find events\n async find(params?: FindEventsParams): Promise<FindEventsResponseProps> {\n const response = await api.get<FindEventsResponseProps>('/v1/events', {\n params,\n });\n return response.data;\n }\n\n // Cities with upcoming published events (uses x-channel-id header)\n async getCities(): Promise<EventCityProps[]> {\n const response = await api.get<{ cities: EventCityProps[] }>(\n '/v1/events/cities'\n );\n return response.data.cities;\n }\n\n // Get event by slug (uses x-channel-id header)\n async getBySlug(eventSlug: string): Promise<EventProps> {\n const response = await api.get<GetChannelEventProps>(\n `/v1/events/${eventSlug}`\n );\n return response.data.event;\n }\n\n // Event products\n async getProducts(\n eventId: string,\n privateToken?: string | null\n ): Promise<GetEventProductsResponseProps> {\n const response = await api.get<GetEventProductsResponseProps>(\n `/v1/events/${eventId}/products`,\n { params: { privateToken } }\n );\n\n const products = response.data.products.map(formatProducts);\n\n return { ...response.data, products };\n }\n\n // Event tickets\n async getTickets(\n eventId: string,\n privateToken?: string | null,\n predecessorIds?: string[]\n ): Promise<GetEventTicketsResponseProps> {\n const response = await api.get<GetEventTicketsResponseProps>(\n `/v1/events/${eventId}/tickets`,\n { params: { privateToken, predecessorIds } }\n );\n\n const tickets = response.data.tickets.map(formatTicket);\n\n const groups = response.data.groups.map(group => ({\n ...group,\n tickets: group.tickets.map(formatTicket),\n }));\n\n return { ...response.data, tickets, groups };\n }\n\n // User event tickets\n async getUserEventTickets(eventId: string): Promise<UserTicketProps[]> {\n const response = await api.get<{ userTickets: UserTicketProps[] }>(\n `/v1/events/${eventId}/user-tickets`\n );\n return response.data.userTickets;\n }\n\n // Create event reminder\n async createReminder(\n eventId: string,\n data: CreateEventReminderProps\n ): Promise<{ message: string }> {\n const response = await api.post<{ message: string }>(\n `/v1/events/${eventId}/reminder`,\n { reminder: data }\n );\n return response.data;\n }\n}\n","import type {\n CreatedOrderResponseProps,\n CreateOrderParams,\n GetOrderResponseProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\nimport type { Headers } from '../../core/types/common';\n\nexport class OrdersResource {\n async create(data: CreateOrderParams): Promise<CreatedOrderResponseProps> {\n const response = await api.post<CreatedOrderResponseProps>(\n '/v1/orders',\n data\n );\n return response.data;\n }\n\n async get(\n orderId: string,\n headers?: Headers\n ): Promise<GetOrderResponseProps> {\n const response = await api.get<GetOrderResponseProps>(\n `/v1/orders/${orderId}`,\n {\n headers,\n }\n );\n return response.data;\n }\n}\n","import type { PlatformFeeProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class PaymentsResource {\n async getFee(eventId?: string): Promise<PlatformFeeProps> {\n const response = await api.get<PlatformFeeProps>('/v1/payments/fee', {\n params: { eventId },\n });\n return response.data;\n }\n}\n","import type {\n CreateTicketFileProps,\n TransferTicketProps,\n UpdateUserTicketProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class TicketsResource {\n async createFile(\n userTicketId: string,\n params: CreateTicketFileProps\n ): Promise<Blob> {\n const response = await api.get(\n `/v1/tickets/user-tickets/${userTicketId}/file`,\n { params, responseType: 'blob' }\n );\n return response.data;\n }\n\n async editUserTicket(\n userTicketId: string,\n data: UpdateUserTicketProps\n ): Promise<void> {\n await api.put(`/v1/tickets/user-tickets/${userTicketId}`, data);\n }\n\n async transfer(ticketId: string, data: TransferTicketProps): Promise<void> {\n await api.post(`/v1/tickets/${ticketId}/transfer`, data);\n }\n}\n","import type {\n GetMeUserProps,\n GetUserEventProps,\n GetUserOrderProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\nimport type { QueryParams } from '../../core/types/common';\n\nexport class UsersResource {\n async getMe(): Promise<GetMeUserProps> {\n const response = await api.get<{ user: GetMeUserProps }>('/v1/users/me');\n return response.data.user;\n }\n\n async getOrders(params: QueryParams = {}): Promise<GetUserOrderProps[]> {\n const response = await api.get<{ orders: GetUserOrderProps[] }>(\n '/v1/users/orders',\n { params }\n );\n return response.data.orders;\n }\n\n async getEvents(params: QueryParams = {}): Promise<GetUserEventProps[]> {\n const response = await api.get<{ events: GetUserEventProps[] }>(\n '/v1/users/events',\n { params }\n );\n return response.data.events;\n }\n}\n","import { api } from './core/http/api';\nimport { CategoriesResource } from './resources/categories';\nimport { CouponResource } from './resources/coupon';\nimport { EventsResource } from './resources/events';\nimport { OrdersResource } from './resources/orders';\nimport { PaymentsResource } from './resources/payments';\nimport { TicketsResource } from './resources/tickets';\nimport { UsersResource } from './resources/users';\n\nexport interface MeapleSDKOptions {\n publicKey: string;\n baseURL: string;\n}\n\nexport class MeapleSDK {\n public users: UsersResource;\n public events: EventsResource;\n public orders: OrdersResource;\n public categories: CategoriesResource;\n public coupon: CouponResource;\n public payments: PaymentsResource;\n public tickets: TicketsResource;\n\n constructor(config: MeapleSDKOptions) {\n // Configura a instância global de API\n api.setBaseURL(config.baseURL);\n api.setDefaultHeader('X-Channel-Id', config.publicKey);\n\n // Inicializa todos os recursos\n this.users = new UsersResource();\n this.events = new EventsResource();\n this.orders = new OrdersResource();\n this.categories = new CategoriesResource();\n this.coupon = new CouponResource();\n this.payments = new PaymentsResource();\n this.tickets = new TicketsResource();\n }\n\n setGlobalToken(token: string): void {\n api.setBearerToken(token);\n }\n\n removeGlobalToken(): void {\n api.removeDefaultHeader('Authorization');\n }\n}\n","export const COLOR_MAP = {\n white: {\n hex: `#ffffff`,\n rgb: `rgb(255, 255, 255)`,\n },\n 'text-400': {\n hex: `#c7c7c7`,\n rgb: `rgb(199, 199, 199)`,\n },\n primary: {\n hex: `#00a0fc`,\n rgb: `rgb(0, 160, 252)`,\n },\n secondary: {\n hex: `#fca600`,\n rgb: `rgb(252, 166, 0)`,\n },\n tertiary: {\n hex: `#ab71f4`,\n rgb: `rgb(171, 113, 244)`,\n },\n} as const;\n\nexport const slateNameToHex = (name: string): string | undefined => {\n const colorData = COLOR_MAP[name as keyof typeof COLOR_MAP];\n return colorData?.hex;\n};\n","import { slateNameToHex } from './colorMapping';\n\nconst isEmbedUrl = (url?: string): boolean => {\n if (!url) return false;\n const patterns = [\n /youtube\\.com\\/embed\\//,\n /youtu\\.be\\//,\n /open\\.spotify\\.com\\/embed\\//,\n ];\n return patterns.some(p => p.test(url));\n};\n\nconst isSpotifyUrl = (url?: string): boolean => {\n if (!url) return false;\n return /open\\.spotify\\.com\\/embed\\//.test(url);\n};\n\nconst escapeHtml = (text: string): string =>\n text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\ntype SlateNode = Record<string, unknown>;\ntype SlateElement = SlateNode & { type?: string; children?: SlateNode[] };\ntype SlateText = SlateNode & { text?: string };\n\nfunction isTextNode(node: SlateNode): node is SlateText {\n return typeof (node as SlateText).text === 'string';\n}\n\nfunction renderMarks(text: string, marks: SlateText): string {\n let result = escapeHtml(text);\n if (!result) return result;\n\n const wrap = (tag: string, attrs = '') =>\n `<${tag}${attrs ? ` ${attrs}` : ''}>${result}</${tag}>`;\n\n if (marks.bold) result = wrap('strong');\n if (marks.italic) result = wrap('em');\n if (marks.underline) result = wrap('u');\n if (marks.strike) result = wrap('s');\n if (marks.color) {\n const hex = slateNameToHex(marks.color as string);\n if (hex) result = wrap('span', `style=\"color: ${hex}\"`);\n }\n return result;\n}\n\nfunction renderChildren(children: SlateNode[]): string {\n return children\n .map(child =>\n isTextNode(child)\n ? renderMarks((child as SlateText).text ?? '', child as SlateText)\n : renderElement(child as SlateElement)\n )\n .join('');\n}\n\nfunction isWhitespaceOnly(children: SlateNode[]): boolean {\n return children.every(child => {\n if (!isTextNode(child)) return false;\n const text = (child as SlateText).text ?? '';\n return /^\\s*$/.test(text);\n });\n}\n\nfunction renderElement(node: SlateElement): string {\n const children = node.children ?? [];\n const type = node.type ?? 'paragraph';\n\n switch (type) {\n case 'paragraph': {\n const content = renderChildren(children);\n if (isWhitespaceOnly(children) || /^\\s*$/.test(content)) {\n return content.replace(/\\n/g, '<br>') || '<br>';\n }\n return `<p>${content}</p>`;\n }\n case 'heading-one':\n return `<h1>${renderChildren(children)}</h1>`;\n case 'heading-two':\n return `<h2>${renderChildren(children)}</h2>`;\n case 'heading-three':\n return `<h3>${renderChildren(children)}</h3>`;\n case 'bulleted-list':\n return `<ul>${renderChildren(children)}</ul>`;\n case 'numbered-list':\n return `<ol>${renderChildren(children)}</ol>`;\n case 'list-item':\n return `<li>${renderChildren(children)}</li>`;\n case 'link': {\n const url = node.url as string | undefined;\n if (isEmbedUrl(url)) {\n const style = isSpotifyUrl(url)\n ? 'width: 100%; height: 152px; display: block'\n : 'width: 100%; aspect-ratio: 16/9; display: block';\n return `<iframe src=\"${escapeHtml(url ?? '')}\" frameborder=\"0\" allowfullscreen=\"true\" style=\"${style}\"></iframe>`;\n }\n const href = url ? ` href=\"${escapeHtml(url)}\"` : '';\n return `<a${href} target=\"_blank\" rel=\"noopener noreferrer\">${renderChildren(children)}</a>`;\n }\n case 'image': {\n const url = node.url as string | undefined;\n const alt = node.alt as string | undefined;\n const size = node.size as number | undefined;\n const attrs: string[] = [];\n if (url) attrs.push(`src=\"${escapeHtml(url)}\"`);\n if (alt) attrs.push(`alt=\"${escapeHtml(alt)}\"`);\n if (size !== undefined)\n attrs.push(`style=\"width: ${size}%; height: auto\"`);\n return `<img ${attrs.join(' ')}>`;\n }\n default:\n return renderChildren(children) || '<p></p>';\n }\n}\n\nexport function descriptionToHtml(\n description: Record<string, unknown>[] | null | undefined\n): string {\n if (!description || !Array.isArray(description) || description.length === 0) {\n return '';\n }\n try {\n return description.map(n => renderElement(n as SlateElement)).join('');\n } catch {\n return '';\n }\n}\n"],"mappings":"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","names":["axios"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core/http/api.ts","../src/resources/categories/index.ts","../src/resources/coupon/index.ts","../src/resources/events/index.ts","../src/resources/orders/index.ts","../src/resources/payments/index.ts","../src/resources/tickets/index.ts","../src/resources/users/index.ts","../src/meaple-sdk.ts","../src/utils/colorMapping.ts","../src/utils/descriptionToHtml.ts"],"sourcesContent":["export { api } from './core/http/api';\nexport type { MeapleSDKOptions } from './meaple-sdk';\nexport { MeapleSDK } from './meaple-sdk';\nexport { descriptionToHtml } from './utils/descriptionToHtml';\n\n// Export resources for use in hooks\nexport { CategoriesResource } from './resources/categories';\nexport { CouponResource } from './resources/coupon';\nexport { EventsResource } from './resources/events';\nexport { OrdersResource } from './resources/orders';\nexport { PaymentsResource } from './resources/payments';\nexport { TicketsResource } from './resources/tickets';\nexport { UsersResource } from './resources/users';\n","import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport interface ApiResponse<T = any> {\n data: T;\n success?: boolean;\n timestamp?: string;\n requestId?: string;\n}\n\nexport interface ApiConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n}\n\ninterface RequestInterceptor {\n onRequest(config: any): Promise<any>;\n}\n\n// ============================================================================\n// API Client\n// ============================================================================\n\nexport class SimpleApiClient {\n private axios: AxiosInstance;\n private interceptors: {\n request: RequestInterceptor[];\n response: ((response: any) => any)[];\n } = { request: [], response: [] };\n\n constructor(config: ApiConfig = {}) {\n this.axios = axios.create({\n baseURL: config.baseURL ?? 'http://localhost:1234',\n timeout: config.timeout ?? 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n });\n\n this.setupInterceptors();\n }\n\n // --------------------------------------------------------------------------\n // Configuration Methods\n // --------------------------------------------------------------------------\n\n setDefaultHeader(name: string, value: string): void {\n this.axios.defaults.headers.common[name] = value;\n }\n\n removeDefaultHeader(name: string): void {\n delete this.axios.defaults.headers.common[name];\n }\n\n setBaseURL(baseURL: string): void {\n this.axios.defaults.baseURL = baseURL;\n }\n\n setBearerToken(token: string): void {\n this.setDefaultHeader('Authorization', `Bearer ${token}`);\n }\n\n get axiosInstance(): AxiosInstance {\n return this.axios;\n }\n\n // --------------------------------------------------------------------------\n // Interceptors\n // --------------------------------------------------------------------------\n\n addRequestInterceptor(interceptor: RequestInterceptor): void {\n this.interceptors.request.push(interceptor);\n }\n\n addResponseInterceptor(\n onFulfilled?: (response: any) => any,\n onRejected?: (error: any) => any\n ): void {\n if (onFulfilled) {\n this.interceptors.response.push(onFulfilled);\n }\n if (onRejected) {\n this.axios.interceptors.response.use(undefined, onRejected);\n }\n }\n\n clearInterceptors(): void {\n this.interceptors.request = [];\n this.interceptors.response = [];\n }\n\n // --------------------------------------------------------------------------\n // HTTP Methods\n // --------------------------------------------------------------------------\n\n async get<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.get(url, config);\n return this.formatResponse(response);\n }\n\n async post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.post(url, data, config);\n return this.formatResponse(response);\n }\n\n async put<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.put(url, data, config);\n return this.formatResponse(response);\n }\n\n async patch<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.patch(url, data, config);\n return this.formatResponse(response);\n }\n\n async delete<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.delete(url, config);\n return this.formatResponse(response);\n }\n\n // --------------------------------------------------------------------------\n // Private Methods\n // --------------------------------------------------------------------------\n\n private setupInterceptors(): void {\n // Request interceptor\n this.axios.interceptors.request.use(async config => {\n let processedConfig = config;\n for (const interceptor of this.interceptors.request) {\n processedConfig = await interceptor.onRequest(processedConfig);\n }\n return processedConfig;\n });\n\n // Response interceptor\n this.axios.interceptors.response.use(response => {\n let processedResponse = response;\n for (const interceptor of this.interceptors.response) {\n processedResponse = interceptor(processedResponse);\n }\n return processedResponse;\n });\n }\n\n private formatResponse<T>(response: AxiosResponse): ApiResponse<T> {\n const requestId = response.headers['x-request-id'];\n\n // Se response.data for um Blob, retornar diretamente sem formatação adicional\n if (response.data instanceof Blob) {\n return {\n data: response.data as any,\n success: response.status >= 200 && response.status < 300,\n timestamp: new Date().toISOString(),\n ...(requestId && { requestId }),\n };\n }\n\n return {\n data: response.data,\n success: response.status >= 200 && response.status < 300,\n timestamp: new Date().toISOString(),\n ...(requestId && { requestId }),\n };\n }\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport const api = new SimpleApiClient();\n","import { CategoryProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class CategoriesResource {\n async find(): Promise<CategoryProps[]> {\n const response = await api.get<{ categories: CategoryProps[] }>(\n '/v1/categories'\n );\n return response.data.categories;\n }\n}\n","import { CheckCouponProps, CouponProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class CouponResource {\n async check({ eventId, couponCode }: CheckCouponProps): Promise<CouponProps> {\n const response = await api.get<{ coupon: CouponProps }>(\n `/v1/events/${eventId}/coupons/${couponCode}/check`\n );\n return response.data.coupon;\n }\n}\n","import type {\n CreateEventReminderProps,\n EventCityProps,\n EventProps,\n FindEventsParams,\n FindEventsResponseProps,\n GetChannelEventProps,\n GetEventProductProps,\n GetEventProductsResponseProps,\n GetEventTicketProps,\n GetEventTicketsResponseProps,\n UserTicketProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\n// Helper functions\nconst formatTicket = (ticket: GetEventTicketProps): GetEventTicketProps => ({\n ...ticket,\n price: Number(ticket.price.toFixed(2)),\n});\n\nconst formatProducts = (\n product: GetEventProductProps\n): GetEventProductProps => ({\n ...product,\n price: Number(product.price.toFixed(2)),\n});\n\nexport class EventsResource {\n // Find events\n async find(params?: FindEventsParams): Promise<FindEventsResponseProps> {\n const response = await api.get<FindEventsResponseProps>('/v1/events', {\n params,\n });\n return response.data;\n }\n\n // Cities with upcoming published events (scoped by the x-client-id header)\n async getCities(): Promise<EventCityProps[]> {\n const response = await api.get<{ cities: EventCityProps[] }>(\n '/v1/events/cities'\n );\n return response.data.cities;\n }\n\n // Get event by slug. Event slugs are unique per channel, so the channel slug is required.\n async getBySlug({\n eventSlug,\n channelSlug,\n }: {\n eventSlug: string;\n channelSlug: string;\n }): Promise<EventProps> {\n const response = await api.get<GetChannelEventProps>(\n `/v1/channels/${channelSlug}/events/${eventSlug}`\n );\n return response.data.event;\n }\n\n // Event products\n async getProducts(\n eventId: string,\n privateToken?: string | null\n ): Promise<GetEventProductsResponseProps> {\n const response = await api.get<GetEventProductsResponseProps>(\n `/v1/events/${eventId}/products`,\n { params: { privateToken } }\n );\n\n const products = response.data.products.map(formatProducts);\n\n return { ...response.data, products };\n }\n\n // Event tickets\n async getTickets(\n eventId: string,\n privateToken?: string | null,\n predecessorIds?: string[]\n ): Promise<GetEventTicketsResponseProps> {\n const response = await api.get<GetEventTicketsResponseProps>(\n `/v1/events/${eventId}/tickets`,\n { params: { privateToken, predecessorIds } }\n );\n\n const tickets = response.data.tickets.map(formatTicket);\n\n const groups = response.data.groups.map(group => ({\n ...group,\n tickets: group.tickets.map(formatTicket),\n }));\n\n return { ...response.data, tickets, groups };\n }\n\n // User event tickets\n async getUserEventTickets(eventId: string): Promise<UserTicketProps[]> {\n const response = await api.get<{ userTickets: UserTicketProps[] }>(\n `/v1/events/${eventId}/user-tickets`\n );\n return response.data.userTickets;\n }\n\n // Create event reminder\n async createReminder(\n eventId: string,\n data: CreateEventReminderProps\n ): Promise<{ message: string }> {\n const response = await api.post<{ message: string }>(\n `/v1/events/${eventId}/reminder`,\n { reminder: data }\n );\n return response.data;\n }\n}\n","import type {\n CreatedOrderResponseProps,\n CreateOrderParams,\n GetOrderResponseProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\nimport type { Headers } from '../../core/types/common';\n\nexport class OrdersResource {\n async create(data: CreateOrderParams): Promise<CreatedOrderResponseProps> {\n const response = await api.post<CreatedOrderResponseProps>(\n '/v1/orders',\n data\n );\n return response.data;\n }\n\n async get(\n orderId: string,\n headers?: Headers\n ): Promise<GetOrderResponseProps> {\n const response = await api.get<GetOrderResponseProps>(\n `/v1/orders/${orderId}`,\n {\n headers,\n }\n );\n return response.data;\n }\n}\n","import type { PlatformFeeProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class PaymentsResource {\n // Fees can be overridden per channel, so the event's channel is required\n async getFee({\n eventId,\n channelId,\n }: {\n eventId: string;\n channelId: string;\n }): Promise<PlatformFeeProps> {\n const response = await api.get<PlatformFeeProps>('/v1/payments/fee', {\n params: { eventId, channelId },\n });\n return response.data;\n }\n}\n","import type {\n CreateTicketFileProps,\n TransferTicketProps,\n UpdateUserTicketProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class TicketsResource {\n async createFile(\n userTicketId: string,\n params: CreateTicketFileProps\n ): Promise<Blob> {\n const response = await api.get(\n `/v1/tickets/user-tickets/${userTicketId}/file`,\n { params, responseType: 'blob' }\n );\n return response.data;\n }\n\n async editUserTicket(\n userTicketId: string,\n data: UpdateUserTicketProps\n ): Promise<void> {\n await api.put(`/v1/tickets/user-tickets/${userTicketId}`, data);\n }\n\n async transfer(ticketId: string, data: TransferTicketProps): Promise<void> {\n await api.post(`/v1/tickets/${ticketId}/transfer`, data);\n }\n}\n","import type {\n GetMeUserProps,\n GetUserEventProps,\n GetUserOrderProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\nimport type { QueryParams } from '../../core/types/common';\n\nexport class UsersResource {\n async getMe(): Promise<GetMeUserProps> {\n const response = await api.get<{ user: GetMeUserProps }>('/v1/users/me');\n return response.data.user;\n }\n\n async getOrders(params: QueryParams = {}): Promise<GetUserOrderProps[]> {\n const response = await api.get<{ orders: GetUserOrderProps[] }>(\n '/v1/users/orders',\n { params }\n );\n return response.data.orders;\n }\n\n async getEvents(params: QueryParams = {}): Promise<GetUserEventProps[]> {\n const response = await api.get<{ events: GetUserEventProps[] }>(\n '/v1/users/events',\n { params }\n );\n return response.data.events;\n }\n}\n","import { api } from './core/http/api';\nimport { CategoriesResource } from './resources/categories';\nimport { CouponResource } from './resources/coupon';\nimport { EventsResource } from './resources/events';\nimport { OrdersResource } from './resources/orders';\nimport { PaymentsResource } from './resources/payments';\nimport { TicketsResource } from './resources/tickets';\nimport { UsersResource } from './resources/users';\n\nexport type MeapleSDKOptions = {\n /** App id, the same as the OAuth `client_id`. */\n clientId: string;\n baseURL: string;\n};\n\nexport class MeapleSDK {\n public users: UsersResource;\n public events: EventsResource;\n public orders: OrdersResource;\n public categories: CategoriesResource;\n public coupon: CouponResource;\n public payments: PaymentsResource;\n public tickets: TicketsResource;\n\n constructor(config: MeapleSDKOptions) {\n // Configura a instância global de API\n api.setBaseURL(config.baseURL);\n api.setDefaultHeader('X-Client-Id', config.clientId);\n\n // Inicializa todos os recursos\n this.users = new UsersResource();\n this.events = new EventsResource();\n this.orders = new OrdersResource();\n this.categories = new CategoriesResource();\n this.coupon = new CouponResource();\n this.payments = new PaymentsResource();\n this.tickets = new TicketsResource();\n }\n\n setGlobalToken(token: string): void {\n api.setBearerToken(token);\n }\n\n removeGlobalToken(): void {\n api.removeDefaultHeader('Authorization');\n }\n}\n","export const COLOR_MAP = {\n white: {\n hex: `#ffffff`,\n rgb: `rgb(255, 255, 255)`,\n },\n 'text-400': {\n hex: `#c7c7c7`,\n rgb: `rgb(199, 199, 199)`,\n },\n primary: {\n hex: `#00a0fc`,\n rgb: `rgb(0, 160, 252)`,\n },\n secondary: {\n hex: `#fca600`,\n rgb: `rgb(252, 166, 0)`,\n },\n tertiary: {\n hex: `#ab71f4`,\n rgb: `rgb(171, 113, 244)`,\n },\n} as const;\n\nexport const slateNameToHex = (name: string): string | undefined => {\n const colorData = COLOR_MAP[name as keyof typeof COLOR_MAP];\n return colorData?.hex;\n};\n","import { slateNameToHex } from './colorMapping';\n\nconst isEmbedUrl = (url?: string): boolean => {\n if (!url) return false;\n const patterns = [\n /youtube\\.com\\/embed\\//,\n /youtu\\.be\\//,\n /open\\.spotify\\.com\\/embed\\//,\n ];\n return patterns.some(p => p.test(url));\n};\n\nconst isSpotifyUrl = (url?: string): boolean => {\n if (!url) return false;\n return /open\\.spotify\\.com\\/embed\\//.test(url);\n};\n\nconst escapeHtml = (text: string): string =>\n text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\ntype SlateNode = Record<string, unknown>;\ntype SlateElement = SlateNode & { type?: string; children?: SlateNode[] };\ntype SlateText = SlateNode & { text?: string };\n\nfunction isTextNode(node: SlateNode): node is SlateText {\n return typeof (node as SlateText).text === 'string';\n}\n\nfunction renderMarks(text: string, marks: SlateText): string {\n let result = escapeHtml(text);\n if (!result) return result;\n\n const wrap = (tag: string, attrs = '') =>\n `<${tag}${attrs ? ` ${attrs}` : ''}>${result}</${tag}>`;\n\n if (marks.bold) result = wrap('strong');\n if (marks.italic) result = wrap('em');\n if (marks.underline) result = wrap('u');\n if (marks.strike) result = wrap('s');\n if (marks.color) {\n const hex = slateNameToHex(marks.color as string);\n if (hex) result = wrap('span', `style=\"color: ${hex}\"`);\n }\n return result;\n}\n\nfunction renderChildren(children: SlateNode[]): string {\n return children\n .map(child =>\n isTextNode(child)\n ? renderMarks((child as SlateText).text ?? '', child as SlateText)\n : renderElement(child as SlateElement)\n )\n .join('');\n}\n\nfunction isWhitespaceOnly(children: SlateNode[]): boolean {\n return children.every(child => {\n if (!isTextNode(child)) return false;\n const text = (child as SlateText).text ?? '';\n return /^\\s*$/.test(text);\n });\n}\n\nfunction renderElement(node: SlateElement): string {\n const children = node.children ?? [];\n const type = node.type ?? 'paragraph';\n\n switch (type) {\n case 'paragraph': {\n const content = renderChildren(children);\n if (isWhitespaceOnly(children) || /^\\s*$/.test(content)) {\n return content.replace(/\\n/g, '<br>') || '<br>';\n }\n return `<p>${content}</p>`;\n }\n case 'heading-one':\n return `<h1>${renderChildren(children)}</h1>`;\n case 'heading-two':\n return `<h2>${renderChildren(children)}</h2>`;\n case 'heading-three':\n return `<h3>${renderChildren(children)}</h3>`;\n case 'bulleted-list':\n return `<ul>${renderChildren(children)}</ul>`;\n case 'numbered-list':\n return `<ol>${renderChildren(children)}</ol>`;\n case 'list-item':\n return `<li>${renderChildren(children)}</li>`;\n case 'link': {\n const url = node.url as string | undefined;\n if (isEmbedUrl(url)) {\n const style = isSpotifyUrl(url)\n ? 'width: 100%; height: 152px; display: block'\n : 'width: 100%; aspect-ratio: 16/9; display: block';\n return `<iframe src=\"${escapeHtml(url ?? '')}\" frameborder=\"0\" allowfullscreen=\"true\" style=\"${style}\"></iframe>`;\n }\n const href = url ? ` href=\"${escapeHtml(url)}\"` : '';\n return `<a${href} target=\"_blank\" rel=\"noopener noreferrer\">${renderChildren(children)}</a>`;\n }\n case 'image': {\n const url = node.url as string | undefined;\n const alt = node.alt as string | undefined;\n const size = node.size as number | undefined;\n const attrs: string[] = [];\n if (url) attrs.push(`src=\"${escapeHtml(url)}\"`);\n if (alt) attrs.push(`alt=\"${escapeHtml(alt)}\"`);\n if (size !== undefined)\n attrs.push(`style=\"width: ${size}%; height: auto\"`);\n return `<img ${attrs.join(' ')}>`;\n }\n default:\n return renderChildren(children) || '<p></p>';\n }\n}\n\nexport function descriptionToHtml(\n description: Record<string, unknown>[] | null | undefined\n): string {\n if (!description || !Array.isArray(description) || description.length === 0) {\n return '';\n }\n try {\n return description.map(n => renderElement(n as SlateElement)).join('');\n } catch {\n return '';\n }\n}\n"],"mappings":"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","names":["axios"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -48,7 +48,10 @@ declare class CouponResource {
|
|
|
48
48
|
declare class EventsResource {
|
|
49
49
|
find(params?: FindEventsParams): Promise<FindEventsResponseProps>;
|
|
50
50
|
getCities(): Promise<EventCityProps[]>;
|
|
51
|
-
getBySlug(eventSlug
|
|
51
|
+
getBySlug({ eventSlug, channelSlug, }: {
|
|
52
|
+
eventSlug: string;
|
|
53
|
+
channelSlug: string;
|
|
54
|
+
}): Promise<EventProps>;
|
|
52
55
|
getProducts(eventId: string, privateToken?: string | null): Promise<GetEventProductsResponseProps>;
|
|
53
56
|
getTickets(eventId: string, privateToken?: string | null, predecessorIds?: string[]): Promise<GetEventTicketsResponseProps>;
|
|
54
57
|
getUserEventTickets(eventId: string): Promise<UserTicketProps[]>;
|
|
@@ -70,7 +73,10 @@ declare class OrdersResource {
|
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
declare class PaymentsResource {
|
|
73
|
-
getFee(eventId
|
|
76
|
+
getFee({ eventId, channelId, }: {
|
|
77
|
+
eventId: string;
|
|
78
|
+
channelId: string;
|
|
79
|
+
}): Promise<PlatformFeeProps>;
|
|
74
80
|
}
|
|
75
81
|
|
|
76
82
|
declare class TicketsResource {
|
|
@@ -85,10 +91,11 @@ declare class UsersResource {
|
|
|
85
91
|
getEvents(params?: QueryParams): Promise<GetUserEventProps[]>;
|
|
86
92
|
}
|
|
87
93
|
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
type MeapleSDKOptions = {
|
|
95
|
+
/** App id, the same as the OAuth `client_id`. */
|
|
96
|
+
clientId: string;
|
|
90
97
|
baseURL: string;
|
|
91
|
-
}
|
|
98
|
+
};
|
|
92
99
|
declare class MeapleSDK {
|
|
93
100
|
users: UsersResource;
|
|
94
101
|
events: EventsResource;
|
package/dist/index.d.ts
CHANGED
|
@@ -48,7 +48,10 @@ declare class CouponResource {
|
|
|
48
48
|
declare class EventsResource {
|
|
49
49
|
find(params?: FindEventsParams): Promise<FindEventsResponseProps>;
|
|
50
50
|
getCities(): Promise<EventCityProps[]>;
|
|
51
|
-
getBySlug(eventSlug
|
|
51
|
+
getBySlug({ eventSlug, channelSlug, }: {
|
|
52
|
+
eventSlug: string;
|
|
53
|
+
channelSlug: string;
|
|
54
|
+
}): Promise<EventProps>;
|
|
52
55
|
getProducts(eventId: string, privateToken?: string | null): Promise<GetEventProductsResponseProps>;
|
|
53
56
|
getTickets(eventId: string, privateToken?: string | null, predecessorIds?: string[]): Promise<GetEventTicketsResponseProps>;
|
|
54
57
|
getUserEventTickets(eventId: string): Promise<UserTicketProps[]>;
|
|
@@ -70,7 +73,10 @@ declare class OrdersResource {
|
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
declare class PaymentsResource {
|
|
73
|
-
getFee(eventId
|
|
76
|
+
getFee({ eventId, channelId, }: {
|
|
77
|
+
eventId: string;
|
|
78
|
+
channelId: string;
|
|
79
|
+
}): Promise<PlatformFeeProps>;
|
|
74
80
|
}
|
|
75
81
|
|
|
76
82
|
declare class TicketsResource {
|
|
@@ -85,10 +91,11 @@ declare class UsersResource {
|
|
|
85
91
|
getEvents(params?: QueryParams): Promise<GetUserEventProps[]>;
|
|
86
92
|
}
|
|
87
93
|
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
type MeapleSDKOptions = {
|
|
95
|
+
/** App id, the same as the OAuth `client_id`. */
|
|
96
|
+
clientId: string;
|
|
90
97
|
baseURL: string;
|
|
91
|
-
}
|
|
98
|
+
};
|
|
92
99
|
declare class MeapleSDK {
|
|
93
100
|
users: UsersResource;
|
|
94
101
|
events: EventsResource;
|
package/dist/index.js
CHANGED
|
@@ -149,17 +149,20 @@ var EventsResource = class {
|
|
|
149
149
|
});
|
|
150
150
|
return response.data;
|
|
151
151
|
}
|
|
152
|
-
// Cities with upcoming published events (
|
|
152
|
+
// Cities with upcoming published events (scoped by the x-client-id header)
|
|
153
153
|
async getCities() {
|
|
154
154
|
const response = await api.get(
|
|
155
155
|
"/v1/events/cities"
|
|
156
156
|
);
|
|
157
157
|
return response.data.cities;
|
|
158
158
|
}
|
|
159
|
-
// Get event by slug
|
|
160
|
-
async getBySlug(
|
|
159
|
+
// Get event by slug. Event slugs are unique per channel, so the channel slug is required.
|
|
160
|
+
async getBySlug({
|
|
161
|
+
eventSlug,
|
|
162
|
+
channelSlug
|
|
163
|
+
}) {
|
|
161
164
|
const response = await api.get(
|
|
162
|
-
`/v1/events/${eventSlug}`
|
|
165
|
+
`/v1/channels/${channelSlug}/events/${eventSlug}`
|
|
163
166
|
);
|
|
164
167
|
return response.data.event;
|
|
165
168
|
}
|
|
@@ -224,9 +227,13 @@ var OrdersResource = class {
|
|
|
224
227
|
|
|
225
228
|
// src/resources/payments/index.ts
|
|
226
229
|
var PaymentsResource = class {
|
|
227
|
-
|
|
230
|
+
// Fees can be overridden per channel, so the event's channel is required
|
|
231
|
+
async getFee({
|
|
232
|
+
eventId,
|
|
233
|
+
channelId
|
|
234
|
+
}) {
|
|
228
235
|
const response = await api.get("/v1/payments/fee", {
|
|
229
|
-
params: { eventId }
|
|
236
|
+
params: { eventId, channelId }
|
|
230
237
|
});
|
|
231
238
|
return response.data;
|
|
232
239
|
}
|
|
@@ -282,7 +289,7 @@ var MeapleSDK = class {
|
|
|
282
289
|
tickets;
|
|
283
290
|
constructor(config) {
|
|
284
291
|
api.setBaseURL(config.baseURL);
|
|
285
|
-
api.setDefaultHeader("X-
|
|
292
|
+
api.setDefaultHeader("X-Client-Id", config.clientId);
|
|
286
293
|
this.users = new UsersResource();
|
|
287
294
|
this.events = new EventsResource();
|
|
288
295
|
this.orders = new OrdersResource();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/http/api.ts","../src/resources/categories/index.ts","../src/resources/coupon/index.ts","../src/resources/events/index.ts","../src/resources/orders/index.ts","../src/resources/payments/index.ts","../src/resources/tickets/index.ts","../src/resources/users/index.ts","../src/meaple-sdk.ts","../src/utils/colorMapping.ts","../src/utils/descriptionToHtml.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport interface ApiResponse<T = any> {\n data: T;\n success?: boolean;\n timestamp?: string;\n requestId?: string;\n}\n\nexport interface ApiConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n}\n\ninterface RequestInterceptor {\n onRequest(config: any): Promise<any>;\n}\n\n// ============================================================================\n// API Client\n// ============================================================================\n\nexport class SimpleApiClient {\n private axios: AxiosInstance;\n private interceptors: {\n request: RequestInterceptor[];\n response: ((response: any) => any)[];\n } = { request: [], response: [] };\n\n constructor(config: ApiConfig = {}) {\n this.axios = axios.create({\n baseURL: config.baseURL ?? 'http://localhost:1234',\n timeout: config.timeout ?? 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n });\n\n this.setupInterceptors();\n }\n\n // --------------------------------------------------------------------------\n // Configuration Methods\n // --------------------------------------------------------------------------\n\n setDefaultHeader(name: string, value: string): void {\n this.axios.defaults.headers.common[name] = value;\n }\n\n removeDefaultHeader(name: string): void {\n delete this.axios.defaults.headers.common[name];\n }\n\n setBaseURL(baseURL: string): void {\n this.axios.defaults.baseURL = baseURL;\n }\n\n setBearerToken(token: string): void {\n this.setDefaultHeader('Authorization', `Bearer ${token}`);\n }\n\n get axiosInstance(): AxiosInstance {\n return this.axios;\n }\n\n // --------------------------------------------------------------------------\n // Interceptors\n // --------------------------------------------------------------------------\n\n addRequestInterceptor(interceptor: RequestInterceptor): void {\n this.interceptors.request.push(interceptor);\n }\n\n addResponseInterceptor(\n onFulfilled?: (response: any) => any,\n onRejected?: (error: any) => any\n ): void {\n if (onFulfilled) {\n this.interceptors.response.push(onFulfilled);\n }\n if (onRejected) {\n this.axios.interceptors.response.use(undefined, onRejected);\n }\n }\n\n clearInterceptors(): void {\n this.interceptors.request = [];\n this.interceptors.response = [];\n }\n\n // --------------------------------------------------------------------------\n // HTTP Methods\n // --------------------------------------------------------------------------\n\n async get<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.get(url, config);\n return this.formatResponse(response);\n }\n\n async post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.post(url, data, config);\n return this.formatResponse(response);\n }\n\n async put<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.put(url, data, config);\n return this.formatResponse(response);\n }\n\n async patch<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.patch(url, data, config);\n return this.formatResponse(response);\n }\n\n async delete<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.delete(url, config);\n return this.formatResponse(response);\n }\n\n // --------------------------------------------------------------------------\n // Private Methods\n // --------------------------------------------------------------------------\n\n private setupInterceptors(): void {\n // Request interceptor\n this.axios.interceptors.request.use(async config => {\n let processedConfig = config;\n for (const interceptor of this.interceptors.request) {\n processedConfig = await interceptor.onRequest(processedConfig);\n }\n return processedConfig;\n });\n\n // Response interceptor\n this.axios.interceptors.response.use(response => {\n let processedResponse = response;\n for (const interceptor of this.interceptors.response) {\n processedResponse = interceptor(processedResponse);\n }\n return processedResponse;\n });\n }\n\n private formatResponse<T>(response: AxiosResponse): ApiResponse<T> {\n const requestId = response.headers['x-request-id'];\n\n // Se response.data for um Blob, retornar diretamente sem formatação adicional\n if (response.data instanceof Blob) {\n return {\n data: response.data as any,\n success: response.status >= 200 && response.status < 300,\n timestamp: new Date().toISOString(),\n ...(requestId && { requestId }),\n };\n }\n\n return {\n data: response.data,\n success: response.status >= 200 && response.status < 300,\n timestamp: new Date().toISOString(),\n ...(requestId && { requestId }),\n };\n }\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport const api = new SimpleApiClient();\n","import { CategoryProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class CategoriesResource {\n async find(): Promise<CategoryProps[]> {\n const response = await api.get<{ categories: CategoryProps[] }>(\n '/v1/categories'\n );\n return response.data.categories;\n }\n}\n","import { CheckCouponProps, CouponProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class CouponResource {\n async check({ eventId, couponCode }: CheckCouponProps): Promise<CouponProps> {\n const response = await api.get<{ coupon: CouponProps }>(\n `/v1/events/${eventId}/coupons/${couponCode}/check`\n );\n return response.data.coupon;\n }\n}\n","import type {\n CreateEventReminderProps,\n EventCityProps,\n EventProps,\n FindEventsParams,\n FindEventsResponseProps,\n GetChannelEventProps,\n GetEventProductProps,\n GetEventProductsResponseProps,\n GetEventTicketProps,\n GetEventTicketsResponseProps,\n UserTicketProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\n// Helper functions\nconst formatTicket = (ticket: GetEventTicketProps): GetEventTicketProps => ({\n ...ticket,\n price: Number(ticket.price.toFixed(2)),\n});\n\nconst formatProducts = (\n product: GetEventProductProps\n): GetEventProductProps => ({\n ...product,\n price: Number(product.price.toFixed(2)),\n});\n\nexport class EventsResource {\n // Find events\n async find(params?: FindEventsParams): Promise<FindEventsResponseProps> {\n const response = await api.get<FindEventsResponseProps>('/v1/events', {\n params,\n });\n return response.data;\n }\n\n // Cities with upcoming published events (uses x-channel-id header)\n async getCities(): Promise<EventCityProps[]> {\n const response = await api.get<{ cities: EventCityProps[] }>(\n '/v1/events/cities'\n );\n return response.data.cities;\n }\n\n // Get event by slug (uses x-channel-id header)\n async getBySlug(eventSlug: string): Promise<EventProps> {\n const response = await api.get<GetChannelEventProps>(\n `/v1/events/${eventSlug}`\n );\n return response.data.event;\n }\n\n // Event products\n async getProducts(\n eventId: string,\n privateToken?: string | null\n ): Promise<GetEventProductsResponseProps> {\n const response = await api.get<GetEventProductsResponseProps>(\n `/v1/events/${eventId}/products`,\n { params: { privateToken } }\n );\n\n const products = response.data.products.map(formatProducts);\n\n return { ...response.data, products };\n }\n\n // Event tickets\n async getTickets(\n eventId: string,\n privateToken?: string | null,\n predecessorIds?: string[]\n ): Promise<GetEventTicketsResponseProps> {\n const response = await api.get<GetEventTicketsResponseProps>(\n `/v1/events/${eventId}/tickets`,\n { params: { privateToken, predecessorIds } }\n );\n\n const tickets = response.data.tickets.map(formatTicket);\n\n const groups = response.data.groups.map(group => ({\n ...group,\n tickets: group.tickets.map(formatTicket),\n }));\n\n return { ...response.data, tickets, groups };\n }\n\n // User event tickets\n async getUserEventTickets(eventId: string): Promise<UserTicketProps[]> {\n const response = await api.get<{ userTickets: UserTicketProps[] }>(\n `/v1/events/${eventId}/user-tickets`\n );\n return response.data.userTickets;\n }\n\n // Create event reminder\n async createReminder(\n eventId: string,\n data: CreateEventReminderProps\n ): Promise<{ message: string }> {\n const response = await api.post<{ message: string }>(\n `/v1/events/${eventId}/reminder`,\n { reminder: data }\n );\n return response.data;\n }\n}\n","import type {\n CreatedOrderResponseProps,\n CreateOrderParams,\n GetOrderResponseProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\nimport type { Headers } from '../../core/types/common';\n\nexport class OrdersResource {\n async create(data: CreateOrderParams): Promise<CreatedOrderResponseProps> {\n const response = await api.post<CreatedOrderResponseProps>(\n '/v1/orders',\n data\n );\n return response.data;\n }\n\n async get(\n orderId: string,\n headers?: Headers\n ): Promise<GetOrderResponseProps> {\n const response = await api.get<GetOrderResponseProps>(\n `/v1/orders/${orderId}`,\n {\n headers,\n }\n );\n return response.data;\n }\n}\n","import type { PlatformFeeProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class PaymentsResource {\n async getFee(eventId?: string): Promise<PlatformFeeProps> {\n const response = await api.get<PlatformFeeProps>('/v1/payments/fee', {\n params: { eventId },\n });\n return response.data;\n }\n}\n","import type {\n CreateTicketFileProps,\n TransferTicketProps,\n UpdateUserTicketProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class TicketsResource {\n async createFile(\n userTicketId: string,\n params: CreateTicketFileProps\n ): Promise<Blob> {\n const response = await api.get(\n `/v1/tickets/user-tickets/${userTicketId}/file`,\n { params, responseType: 'blob' }\n );\n return response.data;\n }\n\n async editUserTicket(\n userTicketId: string,\n data: UpdateUserTicketProps\n ): Promise<void> {\n await api.put(`/v1/tickets/user-tickets/${userTicketId}`, data);\n }\n\n async transfer(ticketId: string, data: TransferTicketProps): Promise<void> {\n await api.post(`/v1/tickets/${ticketId}/transfer`, data);\n }\n}\n","import type {\n GetMeUserProps,\n GetUserEventProps,\n GetUserOrderProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\nimport type { QueryParams } from '../../core/types/common';\n\nexport class UsersResource {\n async getMe(): Promise<GetMeUserProps> {\n const response = await api.get<{ user: GetMeUserProps }>('/v1/users/me');\n return response.data.user;\n }\n\n async getOrders(params: QueryParams = {}): Promise<GetUserOrderProps[]> {\n const response = await api.get<{ orders: GetUserOrderProps[] }>(\n '/v1/users/orders',\n { params }\n );\n return response.data.orders;\n }\n\n async getEvents(params: QueryParams = {}): Promise<GetUserEventProps[]> {\n const response = await api.get<{ events: GetUserEventProps[] }>(\n '/v1/users/events',\n { params }\n );\n return response.data.events;\n }\n}\n","import { api } from './core/http/api';\nimport { CategoriesResource } from './resources/categories';\nimport { CouponResource } from './resources/coupon';\nimport { EventsResource } from './resources/events';\nimport { OrdersResource } from './resources/orders';\nimport { PaymentsResource } from './resources/payments';\nimport { TicketsResource } from './resources/tickets';\nimport { UsersResource } from './resources/users';\n\nexport interface MeapleSDKOptions {\n publicKey: string;\n baseURL: string;\n}\n\nexport class MeapleSDK {\n public users: UsersResource;\n public events: EventsResource;\n public orders: OrdersResource;\n public categories: CategoriesResource;\n public coupon: CouponResource;\n public payments: PaymentsResource;\n public tickets: TicketsResource;\n\n constructor(config: MeapleSDKOptions) {\n // Configura a instância global de API\n api.setBaseURL(config.baseURL);\n api.setDefaultHeader('X-Channel-Id', config.publicKey);\n\n // Inicializa todos os recursos\n this.users = new UsersResource();\n this.events = new EventsResource();\n this.orders = new OrdersResource();\n this.categories = new CategoriesResource();\n this.coupon = new CouponResource();\n this.payments = new PaymentsResource();\n this.tickets = new TicketsResource();\n }\n\n setGlobalToken(token: string): void {\n api.setBearerToken(token);\n }\n\n removeGlobalToken(): void {\n api.removeDefaultHeader('Authorization');\n }\n}\n","export const COLOR_MAP = {\n white: {\n hex: `#ffffff`,\n rgb: `rgb(255, 255, 255)`,\n },\n 'text-400': {\n hex: `#c7c7c7`,\n rgb: `rgb(199, 199, 199)`,\n },\n primary: {\n hex: `#00a0fc`,\n rgb: `rgb(0, 160, 252)`,\n },\n secondary: {\n hex: `#fca600`,\n rgb: `rgb(252, 166, 0)`,\n },\n tertiary: {\n hex: `#ab71f4`,\n rgb: `rgb(171, 113, 244)`,\n },\n} as const;\n\nexport const slateNameToHex = (name: string): string | undefined => {\n const colorData = COLOR_MAP[name as keyof typeof COLOR_MAP];\n return colorData?.hex;\n};\n","import { slateNameToHex } from './colorMapping';\n\nconst isEmbedUrl = (url?: string): boolean => {\n if (!url) return false;\n const patterns = [\n /youtube\\.com\\/embed\\//,\n /youtu\\.be\\//,\n /open\\.spotify\\.com\\/embed\\//,\n ];\n return patterns.some(p => p.test(url));\n};\n\nconst isSpotifyUrl = (url?: string): boolean => {\n if (!url) return false;\n return /open\\.spotify\\.com\\/embed\\//.test(url);\n};\n\nconst escapeHtml = (text: string): string =>\n text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\ntype SlateNode = Record<string, unknown>;\ntype SlateElement = SlateNode & { type?: string; children?: SlateNode[] };\ntype SlateText = SlateNode & { text?: string };\n\nfunction isTextNode(node: SlateNode): node is SlateText {\n return typeof (node as SlateText).text === 'string';\n}\n\nfunction renderMarks(text: string, marks: SlateText): string {\n let result = escapeHtml(text);\n if (!result) return result;\n\n const wrap = (tag: string, attrs = '') =>\n `<${tag}${attrs ? ` ${attrs}` : ''}>${result}</${tag}>`;\n\n if (marks.bold) result = wrap('strong');\n if (marks.italic) result = wrap('em');\n if (marks.underline) result = wrap('u');\n if (marks.strike) result = wrap('s');\n if (marks.color) {\n const hex = slateNameToHex(marks.color as string);\n if (hex) result = wrap('span', `style=\"color: ${hex}\"`);\n }\n return result;\n}\n\nfunction renderChildren(children: SlateNode[]): string {\n return children\n .map(child =>\n isTextNode(child)\n ? renderMarks((child as SlateText).text ?? '', child as SlateText)\n : renderElement(child as SlateElement)\n )\n .join('');\n}\n\nfunction isWhitespaceOnly(children: SlateNode[]): boolean {\n return children.every(child => {\n if (!isTextNode(child)) return false;\n const text = (child as SlateText).text ?? '';\n return /^\\s*$/.test(text);\n });\n}\n\nfunction renderElement(node: SlateElement): string {\n const children = node.children ?? [];\n const type = node.type ?? 'paragraph';\n\n switch (type) {\n case 'paragraph': {\n const content = renderChildren(children);\n if (isWhitespaceOnly(children) || /^\\s*$/.test(content)) {\n return content.replace(/\\n/g, '<br>') || '<br>';\n }\n return `<p>${content}</p>`;\n }\n case 'heading-one':\n return `<h1>${renderChildren(children)}</h1>`;\n case 'heading-two':\n return `<h2>${renderChildren(children)}</h2>`;\n case 'heading-three':\n return `<h3>${renderChildren(children)}</h3>`;\n case 'bulleted-list':\n return `<ul>${renderChildren(children)}</ul>`;\n case 'numbered-list':\n return `<ol>${renderChildren(children)}</ol>`;\n case 'list-item':\n return `<li>${renderChildren(children)}</li>`;\n case 'link': {\n const url = node.url as string | undefined;\n if (isEmbedUrl(url)) {\n const style = isSpotifyUrl(url)\n ? 'width: 100%; height: 152px; display: block'\n : 'width: 100%; aspect-ratio: 16/9; display: block';\n return `<iframe src=\"${escapeHtml(url ?? '')}\" frameborder=\"0\" allowfullscreen=\"true\" style=\"${style}\"></iframe>`;\n }\n const href = url ? ` href=\"${escapeHtml(url)}\"` : '';\n return `<a${href} target=\"_blank\" rel=\"noopener noreferrer\">${renderChildren(children)}</a>`;\n }\n case 'image': {\n const url = node.url as string | undefined;\n const alt = node.alt as string | undefined;\n const size = node.size as number | undefined;\n const attrs: string[] = [];\n if (url) attrs.push(`src=\"${escapeHtml(url)}\"`);\n if (alt) attrs.push(`alt=\"${escapeHtml(alt)}\"`);\n if (size !== undefined)\n attrs.push(`style=\"width: ${size}%; height: auto\"`);\n return `<img ${attrs.join(' ')}>`;\n }\n default:\n return renderChildren(children) || '<p></p>';\n }\n}\n\nexport function descriptionToHtml(\n description: Record<string, unknown>[] | null | undefined\n): string {\n if (!description || !Array.isArray(description) || description.length === 0) {\n return '';\n }\n try {\n return description.map(n => renderElement(n as SlateElement)).join('');\n } catch {\n return '';\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/core/http/api.ts","../src/resources/categories/index.ts","../src/resources/coupon/index.ts","../src/resources/events/index.ts","../src/resources/orders/index.ts","../src/resources/payments/index.ts","../src/resources/tickets/index.ts","../src/resources/users/index.ts","../src/meaple-sdk.ts","../src/utils/colorMapping.ts","../src/utils/descriptionToHtml.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport interface ApiResponse<T = any> {\n data: T;\n success?: boolean;\n timestamp?: string;\n requestId?: string;\n}\n\nexport interface ApiConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n}\n\ninterface RequestInterceptor {\n onRequest(config: any): Promise<any>;\n}\n\n// ============================================================================\n// API Client\n// ============================================================================\n\nexport class SimpleApiClient {\n private axios: AxiosInstance;\n private interceptors: {\n request: RequestInterceptor[];\n response: ((response: any) => any)[];\n } = { request: [], response: [] };\n\n constructor(config: ApiConfig = {}) {\n this.axios = axios.create({\n baseURL: config.baseURL ?? 'http://localhost:1234',\n timeout: config.timeout ?? 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n });\n\n this.setupInterceptors();\n }\n\n // --------------------------------------------------------------------------\n // Configuration Methods\n // --------------------------------------------------------------------------\n\n setDefaultHeader(name: string, value: string): void {\n this.axios.defaults.headers.common[name] = value;\n }\n\n removeDefaultHeader(name: string): void {\n delete this.axios.defaults.headers.common[name];\n }\n\n setBaseURL(baseURL: string): void {\n this.axios.defaults.baseURL = baseURL;\n }\n\n setBearerToken(token: string): void {\n this.setDefaultHeader('Authorization', `Bearer ${token}`);\n }\n\n get axiosInstance(): AxiosInstance {\n return this.axios;\n }\n\n // --------------------------------------------------------------------------\n // Interceptors\n // --------------------------------------------------------------------------\n\n addRequestInterceptor(interceptor: RequestInterceptor): void {\n this.interceptors.request.push(interceptor);\n }\n\n addResponseInterceptor(\n onFulfilled?: (response: any) => any,\n onRejected?: (error: any) => any\n ): void {\n if (onFulfilled) {\n this.interceptors.response.push(onFulfilled);\n }\n if (onRejected) {\n this.axios.interceptors.response.use(undefined, onRejected);\n }\n }\n\n clearInterceptors(): void {\n this.interceptors.request = [];\n this.interceptors.response = [];\n }\n\n // --------------------------------------------------------------------------\n // HTTP Methods\n // --------------------------------------------------------------------------\n\n async get<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.get(url, config);\n return this.formatResponse(response);\n }\n\n async post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.post(url, data, config);\n return this.formatResponse(response);\n }\n\n async put<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.put(url, data, config);\n return this.formatResponse(response);\n }\n\n async patch<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.patch(url, data, config);\n return this.formatResponse(response);\n }\n\n async delete<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.axios.delete(url, config);\n return this.formatResponse(response);\n }\n\n // --------------------------------------------------------------------------\n // Private Methods\n // --------------------------------------------------------------------------\n\n private setupInterceptors(): void {\n // Request interceptor\n this.axios.interceptors.request.use(async config => {\n let processedConfig = config;\n for (const interceptor of this.interceptors.request) {\n processedConfig = await interceptor.onRequest(processedConfig);\n }\n return processedConfig;\n });\n\n // Response interceptor\n this.axios.interceptors.response.use(response => {\n let processedResponse = response;\n for (const interceptor of this.interceptors.response) {\n processedResponse = interceptor(processedResponse);\n }\n return processedResponse;\n });\n }\n\n private formatResponse<T>(response: AxiosResponse): ApiResponse<T> {\n const requestId = response.headers['x-request-id'];\n\n // Se response.data for um Blob, retornar diretamente sem formatação adicional\n if (response.data instanceof Blob) {\n return {\n data: response.data as any,\n success: response.status >= 200 && response.status < 300,\n timestamp: new Date().toISOString(),\n ...(requestId && { requestId }),\n };\n }\n\n return {\n data: response.data,\n success: response.status >= 200 && response.status < 300,\n timestamp: new Date().toISOString(),\n ...(requestId && { requestId }),\n };\n }\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport const api = new SimpleApiClient();\n","import { CategoryProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class CategoriesResource {\n async find(): Promise<CategoryProps[]> {\n const response = await api.get<{ categories: CategoryProps[] }>(\n '/v1/categories'\n );\n return response.data.categories;\n }\n}\n","import { CheckCouponProps, CouponProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class CouponResource {\n async check({ eventId, couponCode }: CheckCouponProps): Promise<CouponProps> {\n const response = await api.get<{ coupon: CouponProps }>(\n `/v1/events/${eventId}/coupons/${couponCode}/check`\n );\n return response.data.coupon;\n }\n}\n","import type {\n CreateEventReminderProps,\n EventCityProps,\n EventProps,\n FindEventsParams,\n FindEventsResponseProps,\n GetChannelEventProps,\n GetEventProductProps,\n GetEventProductsResponseProps,\n GetEventTicketProps,\n GetEventTicketsResponseProps,\n UserTicketProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\n// Helper functions\nconst formatTicket = (ticket: GetEventTicketProps): GetEventTicketProps => ({\n ...ticket,\n price: Number(ticket.price.toFixed(2)),\n});\n\nconst formatProducts = (\n product: GetEventProductProps\n): GetEventProductProps => ({\n ...product,\n price: Number(product.price.toFixed(2)),\n});\n\nexport class EventsResource {\n // Find events\n async find(params?: FindEventsParams): Promise<FindEventsResponseProps> {\n const response = await api.get<FindEventsResponseProps>('/v1/events', {\n params,\n });\n return response.data;\n }\n\n // Cities with upcoming published events (scoped by the x-client-id header)\n async getCities(): Promise<EventCityProps[]> {\n const response = await api.get<{ cities: EventCityProps[] }>(\n '/v1/events/cities'\n );\n return response.data.cities;\n }\n\n // Get event by slug. Event slugs are unique per channel, so the channel slug is required.\n async getBySlug({\n eventSlug,\n channelSlug,\n }: {\n eventSlug: string;\n channelSlug: string;\n }): Promise<EventProps> {\n const response = await api.get<GetChannelEventProps>(\n `/v1/channels/${channelSlug}/events/${eventSlug}`\n );\n return response.data.event;\n }\n\n // Event products\n async getProducts(\n eventId: string,\n privateToken?: string | null\n ): Promise<GetEventProductsResponseProps> {\n const response = await api.get<GetEventProductsResponseProps>(\n `/v1/events/${eventId}/products`,\n { params: { privateToken } }\n );\n\n const products = response.data.products.map(formatProducts);\n\n return { ...response.data, products };\n }\n\n // Event tickets\n async getTickets(\n eventId: string,\n privateToken?: string | null,\n predecessorIds?: string[]\n ): Promise<GetEventTicketsResponseProps> {\n const response = await api.get<GetEventTicketsResponseProps>(\n `/v1/events/${eventId}/tickets`,\n { params: { privateToken, predecessorIds } }\n );\n\n const tickets = response.data.tickets.map(formatTicket);\n\n const groups = response.data.groups.map(group => ({\n ...group,\n tickets: group.tickets.map(formatTicket),\n }));\n\n return { ...response.data, tickets, groups };\n }\n\n // User event tickets\n async getUserEventTickets(eventId: string): Promise<UserTicketProps[]> {\n const response = await api.get<{ userTickets: UserTicketProps[] }>(\n `/v1/events/${eventId}/user-tickets`\n );\n return response.data.userTickets;\n }\n\n // Create event reminder\n async createReminder(\n eventId: string,\n data: CreateEventReminderProps\n ): Promise<{ message: string }> {\n const response = await api.post<{ message: string }>(\n `/v1/events/${eventId}/reminder`,\n { reminder: data }\n );\n return response.data;\n }\n}\n","import type {\n CreatedOrderResponseProps,\n CreateOrderParams,\n GetOrderResponseProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\nimport type { Headers } from '../../core/types/common';\n\nexport class OrdersResource {\n async create(data: CreateOrderParams): Promise<CreatedOrderResponseProps> {\n const response = await api.post<CreatedOrderResponseProps>(\n '/v1/orders',\n data\n );\n return response.data;\n }\n\n async get(\n orderId: string,\n headers?: Headers\n ): Promise<GetOrderResponseProps> {\n const response = await api.get<GetOrderResponseProps>(\n `/v1/orders/${orderId}`,\n {\n headers,\n }\n );\n return response.data;\n }\n}\n","import type { PlatformFeeProps } from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class PaymentsResource {\n // Fees can be overridden per channel, so the event's channel is required\n async getFee({\n eventId,\n channelId,\n }: {\n eventId: string;\n channelId: string;\n }): Promise<PlatformFeeProps> {\n const response = await api.get<PlatformFeeProps>('/v1/payments/fee', {\n params: { eventId, channelId },\n });\n return response.data;\n }\n}\n","import type {\n CreateTicketFileProps,\n TransferTicketProps,\n UpdateUserTicketProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\n\nexport class TicketsResource {\n async createFile(\n userTicketId: string,\n params: CreateTicketFileProps\n ): Promise<Blob> {\n const response = await api.get(\n `/v1/tickets/user-tickets/${userTicketId}/file`,\n { params, responseType: 'blob' }\n );\n return response.data;\n }\n\n async editUserTicket(\n userTicketId: string,\n data: UpdateUserTicketProps\n ): Promise<void> {\n await api.put(`/v1/tickets/user-tickets/${userTicketId}`, data);\n }\n\n async transfer(ticketId: string, data: TransferTicketProps): Promise<void> {\n await api.post(`/v1/tickets/${ticketId}/transfer`, data);\n }\n}\n","import type {\n GetMeUserProps,\n GetUserEventProps,\n GetUserOrderProps,\n} from '@meaple-com/types';\n\nimport { api } from '../../core/http/api';\nimport type { QueryParams } from '../../core/types/common';\n\nexport class UsersResource {\n async getMe(): Promise<GetMeUserProps> {\n const response = await api.get<{ user: GetMeUserProps }>('/v1/users/me');\n return response.data.user;\n }\n\n async getOrders(params: QueryParams = {}): Promise<GetUserOrderProps[]> {\n const response = await api.get<{ orders: GetUserOrderProps[] }>(\n '/v1/users/orders',\n { params }\n );\n return response.data.orders;\n }\n\n async getEvents(params: QueryParams = {}): Promise<GetUserEventProps[]> {\n const response = await api.get<{ events: GetUserEventProps[] }>(\n '/v1/users/events',\n { params }\n );\n return response.data.events;\n }\n}\n","import { api } from './core/http/api';\nimport { CategoriesResource } from './resources/categories';\nimport { CouponResource } from './resources/coupon';\nimport { EventsResource } from './resources/events';\nimport { OrdersResource } from './resources/orders';\nimport { PaymentsResource } from './resources/payments';\nimport { TicketsResource } from './resources/tickets';\nimport { UsersResource } from './resources/users';\n\nexport type MeapleSDKOptions = {\n /** App id, the same as the OAuth `client_id`. */\n clientId: string;\n baseURL: string;\n};\n\nexport class MeapleSDK {\n public users: UsersResource;\n public events: EventsResource;\n public orders: OrdersResource;\n public categories: CategoriesResource;\n public coupon: CouponResource;\n public payments: PaymentsResource;\n public tickets: TicketsResource;\n\n constructor(config: MeapleSDKOptions) {\n // Configura a instância global de API\n api.setBaseURL(config.baseURL);\n api.setDefaultHeader('X-Client-Id', config.clientId);\n\n // Inicializa todos os recursos\n this.users = new UsersResource();\n this.events = new EventsResource();\n this.orders = new OrdersResource();\n this.categories = new CategoriesResource();\n this.coupon = new CouponResource();\n this.payments = new PaymentsResource();\n this.tickets = new TicketsResource();\n }\n\n setGlobalToken(token: string): void {\n api.setBearerToken(token);\n }\n\n removeGlobalToken(): void {\n api.removeDefaultHeader('Authorization');\n }\n}\n","export const COLOR_MAP = {\n white: {\n hex: `#ffffff`,\n rgb: `rgb(255, 255, 255)`,\n },\n 'text-400': {\n hex: `#c7c7c7`,\n rgb: `rgb(199, 199, 199)`,\n },\n primary: {\n hex: `#00a0fc`,\n rgb: `rgb(0, 160, 252)`,\n },\n secondary: {\n hex: `#fca600`,\n rgb: `rgb(252, 166, 0)`,\n },\n tertiary: {\n hex: `#ab71f4`,\n rgb: `rgb(171, 113, 244)`,\n },\n} as const;\n\nexport const slateNameToHex = (name: string): string | undefined => {\n const colorData = COLOR_MAP[name as keyof typeof COLOR_MAP];\n return colorData?.hex;\n};\n","import { slateNameToHex } from './colorMapping';\n\nconst isEmbedUrl = (url?: string): boolean => {\n if (!url) return false;\n const patterns = [\n /youtube\\.com\\/embed\\//,\n /youtu\\.be\\//,\n /open\\.spotify\\.com\\/embed\\//,\n ];\n return patterns.some(p => p.test(url));\n};\n\nconst isSpotifyUrl = (url?: string): boolean => {\n if (!url) return false;\n return /open\\.spotify\\.com\\/embed\\//.test(url);\n};\n\nconst escapeHtml = (text: string): string =>\n text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\ntype SlateNode = Record<string, unknown>;\ntype SlateElement = SlateNode & { type?: string; children?: SlateNode[] };\ntype SlateText = SlateNode & { text?: string };\n\nfunction isTextNode(node: SlateNode): node is SlateText {\n return typeof (node as SlateText).text === 'string';\n}\n\nfunction renderMarks(text: string, marks: SlateText): string {\n let result = escapeHtml(text);\n if (!result) return result;\n\n const wrap = (tag: string, attrs = '') =>\n `<${tag}${attrs ? ` ${attrs}` : ''}>${result}</${tag}>`;\n\n if (marks.bold) result = wrap('strong');\n if (marks.italic) result = wrap('em');\n if (marks.underline) result = wrap('u');\n if (marks.strike) result = wrap('s');\n if (marks.color) {\n const hex = slateNameToHex(marks.color as string);\n if (hex) result = wrap('span', `style=\"color: ${hex}\"`);\n }\n return result;\n}\n\nfunction renderChildren(children: SlateNode[]): string {\n return children\n .map(child =>\n isTextNode(child)\n ? renderMarks((child as SlateText).text ?? '', child as SlateText)\n : renderElement(child as SlateElement)\n )\n .join('');\n}\n\nfunction isWhitespaceOnly(children: SlateNode[]): boolean {\n return children.every(child => {\n if (!isTextNode(child)) return false;\n const text = (child as SlateText).text ?? '';\n return /^\\s*$/.test(text);\n });\n}\n\nfunction renderElement(node: SlateElement): string {\n const children = node.children ?? [];\n const type = node.type ?? 'paragraph';\n\n switch (type) {\n case 'paragraph': {\n const content = renderChildren(children);\n if (isWhitespaceOnly(children) || /^\\s*$/.test(content)) {\n return content.replace(/\\n/g, '<br>') || '<br>';\n }\n return `<p>${content}</p>`;\n }\n case 'heading-one':\n return `<h1>${renderChildren(children)}</h1>`;\n case 'heading-two':\n return `<h2>${renderChildren(children)}</h2>`;\n case 'heading-three':\n return `<h3>${renderChildren(children)}</h3>`;\n case 'bulleted-list':\n return `<ul>${renderChildren(children)}</ul>`;\n case 'numbered-list':\n return `<ol>${renderChildren(children)}</ol>`;\n case 'list-item':\n return `<li>${renderChildren(children)}</li>`;\n case 'link': {\n const url = node.url as string | undefined;\n if (isEmbedUrl(url)) {\n const style = isSpotifyUrl(url)\n ? 'width: 100%; height: 152px; display: block'\n : 'width: 100%; aspect-ratio: 16/9; display: block';\n return `<iframe src=\"${escapeHtml(url ?? '')}\" frameborder=\"0\" allowfullscreen=\"true\" style=\"${style}\"></iframe>`;\n }\n const href = url ? ` href=\"${escapeHtml(url)}\"` : '';\n return `<a${href} target=\"_blank\" rel=\"noopener noreferrer\">${renderChildren(children)}</a>`;\n }\n case 'image': {\n const url = node.url as string | undefined;\n const alt = node.alt as string | undefined;\n const size = node.size as number | undefined;\n const attrs: string[] = [];\n if (url) attrs.push(`src=\"${escapeHtml(url)}\"`);\n if (alt) attrs.push(`alt=\"${escapeHtml(alt)}\"`);\n if (size !== undefined)\n attrs.push(`style=\"width: ${size}%; height: auto\"`);\n return `<img ${attrs.join(' ')}>`;\n }\n default:\n return renderChildren(children) || '<p></p>';\n }\n}\n\nexport function descriptionToHtml(\n description: Record<string, unknown>[] | null | undefined\n): string {\n if (!description || !Array.isArray(description) || description.length === 0) {\n return '';\n }\n try {\n return description.map(n => renderElement(n as SlateElement)).join('');\n } catch {\n return '';\n }\n}\n"],"mappings":"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","names":[]}
|