signalbird 1.4.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 +576 -0
- package/dist/angular.d.mts +53 -0
- package/dist/angular.d.ts +53 -0
- package/dist/angular.js +578 -0
- package/dist/angular.js.map +1 -0
- package/dist/angular.mjs +574 -0
- package/dist/angular.mjs.map +1 -0
- package/dist/app.d.mts +343 -0
- package/dist/app.d.ts +343 -0
- package/dist/app.js +518 -0
- package/dist/app.js.map +1 -0
- package/dist/app.mjs +514 -0
- package/dist/app.mjs.map +1 -0
- package/dist/browser.d.mts +56 -0
- package/dist/browser.d.ts +56 -0
- package/dist/browser.js +113 -0
- package/dist/browser.js.map +1 -0
- package/dist/browser.mjs +109 -0
- package/dist/browser.mjs.map +1 -0
- package/dist/index.d.mts +1170 -0
- package/dist/index.d.ts +1170 -0
- package/dist/index.js +853 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +841 -0
- package/dist/index.mjs.map +1 -0
- package/dist/react-native.d.mts +46 -0
- package/dist/react-native.d.ts +46 -0
- package/dist/react-native.js +576 -0
- package/dist/react-native.js.map +1 -0
- package/dist/react-native.mjs +569 -0
- package/dist/react-native.mjs.map +1 -0
- package/dist/react.d.mts +43 -0
- package/dist/react.d.ts +43 -0
- package/dist/react.js +587 -0
- package/dist/react.js.map +1 -0
- package/dist/react.mjs +580 -0
- package/dist/react.mjs.map +1 -0
- package/dist/signalbird.js +141 -0
- package/dist/vue.d.mts +46 -0
- package/dist/vue.d.ts +46 -0
- package/dist/vue.js +575 -0
- package/dist/vue.js.map +1 -0
- package/dist/vue.mjs +568 -0
- package/dist/vue.mjs.map +1 -0
- package/package.json +125 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/node/types.ts","../src/node/client.ts","../src/node/messaging.ts","../src/node/http.ts","../src/node/management.ts","../src/node/partner.ts","../src/node/webhook.ts","../src/node/index.ts"],"names":["code","message","buildQuery","createHmac","timingSafeEqual"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Telsiz (Radio) istemcisinin ortak tipleri.\n *\n * SDK'nın tek işi vardır: bir kanala mesaj yazmak. Bildirimin kime, hangi\n * kanaldan ve hangi saatte gideceği SUNUCUDA, kanal ayarlarında durur —\n * istemci bunu bilmez ve bilmemelidir. Aksi hâlde bildirim kuralını\n * değiştirmek için müşterinin kodunu yeniden yayınlaması gerekirdi.\n */\n\n/** Kanalın seviyesi; verilmezse kanalın kendi varsayılanı geçerlidir. */\nexport type Level = 'debug' | 'info' | 'warn' | 'error' | 'critical';\n\nexport interface SignalbirdConfig {\n /**\n * Sunucu anahtarı (`sbr_live_…`).\n *\n * Bu anahtar GİZLİDİR ve tarayıcıya gömülemez: sunucu `Origin` başlığı taşıyan\n * istekleri reddeder. Tarayıcı için `signalbird/browser` ve açık anahtar\n * (`sbr_pub_…`) kullanılır.\n */\n apiKey: string;\n\n /** Varsayılan: https://signalbird.io/api */\n baseUrl?: string;\n\n /** Her olaya eklenen köken adı (sunucu adı, servis adı). */\n source?: string;\n\n /** İstek zaman aşımı (ms). Varsayılan 5000 — log göndermek isteği bekletmemeli. */\n timeout?: number;\n\n /**\n * Hata fırlatılsın mı. Varsayılan `false`.\n *\n * Log göndermek uygulamanın ASIL işi değildir: telsiz erişilemezse müşterinin\n * ödeme akışı çökmemelidir. Varsayılan davranış sessizce yutup `ok: false`\n * dönmektir; geliştirme sırasında `throwOnError: true` ile açılabilir.\n */\n throwOnError?: boolean;\n\n /** Konsola uyarı yazılsın mı (varsayılan: NODE_ENV !== 'production'). */\n debug?: boolean;\n}\n\nexport interface LogInput {\n channel: string;\n message: string;\n level?: Level;\n context?: Record<string, unknown>;\n source?: string;\n}\n\nexport interface LogResult {\n ok: boolean;\n /** Sunucunun döndüğü olay kimliği (rev_…). */\n eventId?: string;\n /** Reddedildiyse sebep: INVALID_KEY, MODULE_DISABLED, LIMIT_REACHED… */\n code?: string;\n status?: number;\n}\n\nexport interface BatchResult {\n accepted: number;\n total: number;\n results: Record<number, { ok: boolean; eventId?: string; code?: string }>;\n}\n\n/** `throwOnError: true` iken fırlatılır. */\nexport class SignalbirdError extends Error {\n constructor(\n message: string,\n readonly status: number,\n readonly code?: string,\n /** Sunucunun ham yanıt gövdesi (varsa) — gönderim istemcisi doldurur. */\n readonly body?: unknown\n ) {\n super(message);\n this.name = 'SignalbirdError';\n }\n}\n\nexport const DEFAULT_BASE_URL = 'https://signalbird.io/api';\n","/**\n * Telsiz istemcisi (sunucu tarafı).\n *\n * Bağımlılığı yoktur: Node 18+ ile gelen `fetch` kullanılır. Bir log\n * kütüphanesinin kendi bağımlılık zincirini müşterinin projesine taşıması,\n * sürüm çakışmalarının en sinir bozucu kaynağıdır.\n */\nimport {\n DEFAULT_BASE_URL,\n SignalbirdError,\n type BatchResult,\n type Level,\n type LogInput,\n type LogResult,\n type SignalbirdConfig,\n} from './types';\n\nexport class SignalbirdClient {\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly throwOnError: boolean;\n private readonly debug: boolean;\n private readonly source?: string;\n\n constructor(private readonly config: SignalbirdConfig) {\n if (!config.apiKey) {\n throw new SignalbirdError('Signalbird: apiKey zorunlu.', 0, 'NO_KEY');\n }\n\n // Açık anahtarın sunucuda kullanılması sessiz bir güvenlik hatasıdır:\n // çalışır görünür ama kanal kısıtlarına takılır. Baştan söylüyoruz.\n if (config.apiKey.startsWith('sbr_pub_')) {\n throw new SignalbirdError(\n 'Signalbird: sunucu istemcisine tarayıcı anahtarı (sbr_pub_…) verildi. ' +\n 'Sunucu anahtarı (sbr_live_…) kullanın.',\n 0,\n 'WRONG_KEY_TYPE'\n );\n }\n\n this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.timeout = config.timeout ?? 5000;\n this.throwOnError = config.throwOnError ?? false;\n this.debug = config.debug ?? process.env.NODE_ENV !== 'production';\n this.source = config.source;\n }\n\n /** Tek kayıt gönderir. */\n async log(input: LogInput): Promise<LogResult> {\n return this.send('/v1/radio/log', {\n channel: input.channel,\n message: input.message,\n level: input.level,\n context: input.context,\n source: input.source ?? this.source,\n });\n }\n\n /**\n * Toplu gönderim — 100 kayda kadar.\n *\n * Kısmi başarı normaldir (kota tam ortada dolabilir), o yüzden sonuç tek bir\n * durum değil satır satır döner.\n */\n async batch(events: LogInput[]): Promise<BatchResult> {\n const payload = {\n events: events.slice(0, 100).map((event) => ({\n channel: event.channel,\n message: event.message,\n level: event.level,\n context: event.context,\n source: event.source ?? this.source,\n })),\n };\n\n const response = await this.request('/v1/radio/log/batch', payload);\n\n if (!response) {\n return { accepted: 0, total: events.length, results: {} };\n }\n\n const results: BatchResult['results'] = {};\n\n for (const [index, row] of Object.entries(response.body?.results ?? {})) {\n const value = row as { ok: boolean; event_id?: string; code?: string };\n results[Number(index)] = { ok: value.ok, eventId: value.event_id, code: value.code };\n }\n\n return {\n accepted: Number(response.body?.accepted ?? 0),\n total: Number(response.body?.total ?? events.length),\n results,\n };\n }\n\n // ── Seviye kısayolları ────────────────────────────────────────────────\n // `log('critical', …)` yerine `critical(…)`: kanal adı ile seviye çoğu\n // projede aynıdır, ikisini ayrı ayrı yazdırmak gereksiz tekrar olurdu.\n\n debugLog(channel: string, message: string, context?: Record<string, unknown>) {\n return this.log({ channel, message, level: 'debug', context });\n }\n\n info(channel: string, message: string, context?: Record<string, unknown>) {\n return this.log({ channel, message, level: 'info', context });\n }\n\n warn(channel: string, message: string, context?: Record<string, unknown>) {\n return this.log({ channel, message, level: 'warn', context });\n }\n\n error(channel: string, message: string, context?: Record<string, unknown>) {\n return this.log({ channel, message, level: 'error', context });\n }\n\n critical(channel: string, message: string, context?: Record<string, unknown>) {\n return this.log({ channel, message, level: 'critical', context });\n }\n\n /**\n * Yakalanmamış hataları Telsiz'e bağlar.\n *\n * Kancayı takıp süreci ÖLDÜRMEYE devam eder: `uncaughtException` sonrası\n * süreci ayakta tutmak, bozuk durumdaki bir uygulamayı çalıştırmaya devam\n * etmek demektir — log göndermek bunu meşrulaştırmaz.\n */\n captureUncaught(channel = 'critical'): () => void {\n const onError = (error: Error) => {\n void this.log({\n channel,\n message: error.message,\n level: 'critical',\n context: { stack: error.stack?.split('\\n').slice(0, 20).join('\\n') },\n });\n };\n\n const onRejection = (reason: unknown) => {\n void this.log({\n channel,\n message: reason instanceof Error ? reason.message : String(reason),\n level: 'error',\n context: reason instanceof Error ? { stack: reason.stack } : undefined,\n });\n };\n\n process.on('uncaughtException', onError);\n process.on('unhandledRejection', onRejection);\n\n return () => {\n process.off('uncaughtException', onError);\n process.off('unhandledRejection', onRejection);\n };\n }\n\n private async send(path: string, payload: unknown): Promise<LogResult> {\n const response = await this.request(path, payload);\n\n if (!response) {\n return { ok: false, code: 'NETWORK_ERROR' };\n }\n\n if (!response.ok) {\n const code = response.body?.code ?? 'UNKNOWN';\n\n if (this.throwOnError) {\n throw new SignalbirdError(`Signalbird: ${code}`, response.status, code);\n }\n\n if (this.debug) {\n console.warn(`[signalbird] gönderilemedi: ${code} (HTTP ${response.status})`);\n }\n\n return { ok: false, code, status: response.status };\n }\n\n return { ok: true, eventId: response.body?.event_id, status: response.status };\n }\n\n private async request(\n path: string,\n payload: unknown\n ): Promise<{ ok: boolean; status: number; body: any } | null> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(this.baseUrl + path, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `Bearer ${this.config.apiKey}`,\n },\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n\n const body = await response.json().catch(() => ({}));\n\n return { ok: response.ok, status: response.status, body };\n } catch (error) {\n if (this.throwOnError) {\n throw new SignalbirdError(\n error instanceof Error ? error.message : 'network error',\n 0,\n 'NETWORK_ERROR'\n );\n }\n\n if (this.debug) {\n console.warn('[signalbird] ulaşılamadı:', error);\n }\n\n return null;\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\nexport type { Level, LogInput, LogResult, BatchResult, SignalbirdConfig };\n","/**\n * Gönderim (Messaging) istemcisi — sunucu tarafı.\n *\n * Takım API anahtarıyla (`sb_…`) e-posta/SMS/push gönderir, kişi ve liste\n * yönetir, kampanya açar, mesaj durumlarını okur. Telsiz istemcisinden\n * (`SignalbirdClient`) ayrıdır: farklı anahtar, farklı kapı, farklı kota.\n *\n * Bağımlılığı yoktur (Node 18+ `fetch`). Retry yoktur: aynı iletiyi iki kez\n * göndermek, hiç göndermemekten pahalıdır — yeniden deneme kararı çağıranındır.\n *\n * Sözleşme: docs/CONTRACT.md § 8\n */\nimport { DEFAULT_BASE_URL, SignalbirdError } from './types';\nimport type {\n Batch,\n BulkContactsInput,\n BulkContactsResult,\n CampaignCreateResult,\n CampaignDetail,\n Contact,\n ContactInput,\n ContactList,\n CreateCampaignInput,\n CreateContactListInput,\n ListCampaignMessagesQuery,\n ListCampaignsQuery,\n ListContactsQuery,\n ListMessagesQuery,\n Message,\n MessagingConfig,\n Paginated,\n SbResult,\n SendEmailInput,\n SendPushInput,\n SendResult,\n SendSmsInput,\n SmsPreview,\n} from './messaging-types';\n\n/** Toplu kişi yüklemede tek istekteki üst sınır (API tarafı da bunu kabul eder). */\nconst BULK_CHUNK = 1000;\n\ntype Query = object | undefined;\n\nexport class SignalbirdMessaging {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly throwOnError: boolean;\n private readonly debug: boolean;\n\n constructor(config: MessagingConfig) {\n if (!config.apiKey) {\n throw new SignalbirdError('Signalbird: apiKey zorunlu.', 0, 'NO_KEY');\n }\n\n // Telsiz (`sbr_`) ya da uygulama (`sbw_pub_`) anahtarı buraya verilirse\n // her istek 401 döner; baştan söylemek haftalar sonra bulunacak hatayı önler.\n if (!config.apiKey.startsWith('sb_')) {\n throw new SignalbirdError(\n 'Signalbird: gönderim istemcisi takım API anahtarı ister (sb_…). ' +\n 'Telsiz (sbr_…) ve uygulama (sbw_pub_…) anahtarları burada çalışmaz.',\n 0,\n 'WRONG_KEY_TYPE'\n );\n }\n\n this.apiKey = config.apiKey;\n this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.timeout = config.timeout ?? 15000;\n this.throwOnError = config.throwOnError ?? false;\n this.debug = config.debug ?? false;\n }\n\n // ── Gönderim ──────────────────────────────────────────────────────────\n\n sendEmail(input: SendEmailInput): Promise<SbResult<SendResult>> {\n return this.request('POST', '/v1/email/send', input);\n }\n\n sendSms(input: SendSmsInput): Promise<SbResult<SendResult>> {\n return this.request('POST', '/v1/sms/send', input);\n }\n\n /** SMS parça/karakter hesabı — kota harcamaz. */\n previewSms(body: string): Promise<SbResult<SmsPreview>> {\n return this.request('POST', '/v1/sms/preview', { body });\n }\n\n sendPush(input: SendPushInput): Promise<SbResult<SendResult>> {\n return this.request('POST', '/v1/push/send', input);\n }\n\n // ── Kişiler ───────────────────────────────────────────────────────────\n\n listContacts(query?: ListContactsQuery): Promise<SbResult<Paginated<Contact>>> {\n return this.request('GET', '/v1/contacts', undefined, query);\n }\n\n createContact(contact: ContactInput): Promise<SbResult<Contact>> {\n return this.request('POST', '/v1/contacts', contact);\n }\n\n updateContact(id: number | string, contact: Partial<ContactInput>): Promise<SbResult<Contact>> {\n return this.request('PATCH', `/v1/contacts/${encodeURIComponent(id)}`, contact);\n }\n\n deleteContact(id: number | string): Promise<SbResult<unknown>> {\n return this.request('DELETE', `/v1/contacts/${encodeURIComponent(id)}`);\n }\n\n /**\n * Toplu kişi yükleme.\n *\n * 1000'lik parçalara bölünür ve SIRAYLA gönderilir (paralel değil: aynı\n * e-posta iki parçada da varsa yarış olmasın). Sonuçlar tek yanıtta\n * birleştirilir. Bir parça başarısız olursa o noktada durulur ve o ana kadar\n * biriken sayımlar `data` içinde döner — çağıran kaç kişinin işlendiğini görür.\n */\n async bulkContacts(input: BulkContactsInput): Promise<SbResult<BulkContactsResult>> {\n const merged: BulkContactsResult = { imported: 0, updated: 0, skipped: [] };\n const { contacts, ...rest } = input;\n let status = 200;\n\n if (contacts.length === 0) {\n return { ok: true, status, data: merged };\n }\n\n for (let offset = 0; offset < contacts.length; offset += BULK_CHUNK) {\n const chunk = contacts.slice(offset, offset + BULK_CHUNK);\n const result = await this.request<BulkContactsResult>('POST', '/v1/contacts/bulk', {\n ...rest,\n contacts: chunk,\n });\n\n if (!result.ok) {\n return { ...result, data: merged };\n }\n\n status = result.status;\n merged.imported += Number(result.data?.imported ?? 0);\n merged.updated += Number(result.data?.updated ?? 0);\n if (Array.isArray(result.data?.skipped)) {\n merged.skipped.push(...result.data.skipped);\n }\n }\n\n return { ok: true, status, data: merged };\n }\n\n // ── Listeler ──────────────────────────────────────────────────────────\n\n listContactLists(): Promise<SbResult<ContactList[] | Paginated<ContactList>>> {\n return this.request('GET', '/v1/contact-lists');\n }\n\n createContactList(input: CreateContactListInput): Promise<SbResult<ContactList>> {\n return this.request('POST', '/v1/contact-lists', input);\n }\n\n deleteContactList(id: number | string): Promise<SbResult<unknown>> {\n return this.request('DELETE', `/v1/contact-lists/${encodeURIComponent(id)}`);\n }\n\n // ── Kampanyalar ───────────────────────────────────────────────────────\n\n listCampaigns(query?: ListCampaignsQuery): Promise<SbResult<Paginated<Batch> | Batch[]>> {\n return this.request('GET', '/v1/campaigns', undefined, query);\n }\n\n createCampaign(input: CreateCampaignInput): Promise<SbResult<CampaignCreateResult>> {\n return this.request('POST', '/v1/campaigns', input);\n }\n\n getCampaign(id: number | string): Promise<SbResult<CampaignDetail>> {\n return this.request('GET', `/v1/campaigns/${encodeURIComponent(id)}`);\n }\n\n cancelCampaign(id: number | string): Promise<SbResult<unknown>> {\n return this.request('POST', `/v1/campaigns/${encodeURIComponent(id)}/cancel`);\n }\n\n listCampaignMessages(\n id: number | string,\n query?: ListCampaignMessagesQuery\n ): Promise<SbResult<Paginated<Message>>> {\n return this.request('GET', `/v1/campaigns/${encodeURIComponent(id)}/messages`, undefined, query);\n }\n\n /**\n * Bir kampanyanın tüm mesajlarını sayfa sayfa gezer.\n *\n * for await (const m of sdk.iterateCampaignMessages(42)) { … }\n *\n * Bir sayfa alınamazsa `SignalbirdError` fırlatır (sessiz yarım liste,\n * \"hepsi bu\" sanılır — o daha tehlikeli).\n */\n async *iterateCampaignMessages(\n id: number | string,\n query: Omit<ListCampaignMessagesQuery, 'page'> = {}\n ): AsyncGenerator<Message, void, undefined> {\n let page = 1;\n\n while (true) {\n const result = await this.listCampaignMessages(id, { per_page: 100, ...query, page });\n\n if (!result.ok) {\n throw new SignalbirdError(`Signalbird: ${result.code}`, result.status, result.code, result.data);\n }\n\n for (const message of result.data.data ?? []) {\n yield message;\n }\n\n if (page >= (result.data.last_page ?? 1) || (result.data.data ?? []).length === 0) {\n return;\n }\n\n page++;\n }\n }\n\n // ── Mesajlar ──────────────────────────────────────────────────────────\n\n listMessages(query?: ListMessagesQuery): Promise<SbResult<Paginated<Message>>> {\n return this.request('GET', '/v1/messages', undefined, query);\n }\n\n getMessage(id: string): Promise<SbResult<Message>> {\n return this.request('GET', `/v1/messages/${encodeURIComponent(id)}`);\n }\n\n // ── HTTP ──────────────────────────────────────────────────────────────\n\n private async request<T>(\n method: 'GET' | 'POST' | 'PATCH' | 'DELETE',\n path: string,\n body?: unknown,\n query?: Query\n ): Promise<SbResult<T>> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n const url = this.baseUrl + path + buildQuery(query);\n\n let status = 0;\n let data: any;\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),\n },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n status = response.status;\n const text = await response.text();\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n\n if (response.ok) {\n return { ok: true, status, data: data as T };\n }\n } catch (error) {\n const timedOut = error instanceof Error && error.name === 'AbortError';\n const code = timedOut ? 'TIMEOUT' : 'NETWORK_ERROR';\n const message = error instanceof Error ? error.message : 'network error';\n\n return this.fail(0, code, message, undefined);\n } finally {\n clearTimeout(timer);\n }\n\n // HTTP hatası: API `{message, code}` döner; Laravel doğrulama hatası\n // `{message, errors}` döner (kodsuz) — onu VALIDATION_ERROR sayarız.\n const code: string =\n (data && typeof data === 'object' && typeof data.code === 'string' && data.code) ||\n (status === 422 ? 'VALIDATION_ERROR' : status === 401 ? 'API_KEY_INVALID' : `HTTP_${status}`);\n const message: string =\n (data && typeof data === 'object' && typeof data.message === 'string' && data.message) ||\n `HTTP ${status}`;\n\n return this.fail(status, code, message, data);\n }\n\n private fail<T>(status: number, code: string, message: string, data: unknown): SbResult<T> {\n if (this.throwOnError) {\n throw new SignalbirdError(`Signalbird: ${code} — ${message}`, status, code, data);\n }\n\n if (this.debug) {\n console.warn(`[signalbird] ${code} (HTTP ${status}): ${message}`);\n }\n\n return { ok: false, status, code, message, data };\n }\n}\n\n/** `undefined`/`null` alanlar atlanır; diziler `key[]=` biçiminde gider. */\nfunction buildQuery(query: Query): string {\n if (!query) return '';\n\n const params = new URLSearchParams();\n\n for (const [key, value] of Object.entries(query as Record<string, unknown>)) {\n if (value === undefined || value === null) continue;\n\n if (Array.isArray(value)) {\n for (const item of value) params.append(`${key}[]`, String(item));\n } else {\n params.append(key, String(value));\n }\n }\n\n const encoded = params.toString();\n\n return encoded ? `?${encoded}` : '';\n}\n","/**\n * Anahtarlı istemcilerin ortak taşıma katmanı.\n *\n * Gönderim ve Yönetim istemcileri aynı kapıyı kullanır (`Authorization: Bearer\n * sb_…`), aynı zarfı döner ve aynı kod eşlemesini uygular. İki yerde ayrı ayrı\n * yazılsaydı biri düzeltilip diğeri unutulurdu — hata kodları da sözleşmenin\n * bir parçasıdır.\n *\n * Sözleşme: docs/CONTRACT.md § 8.2 (zarf) ve § 8.5 (sorgu dizesi)\n */\nimport { SignalbirdError } from './types';\n\n/** Her metodun döndüğü zarf. Başarısızlık istisna değil, veridir. */\nexport interface SbResult<T = unknown> {\n ok: boolean;\n status: number;\n data?: T;\n code?: string;\n message?: string;\n}\n\nexport type HttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE';\n\nexport interface TransportConfig {\n apiKey: string;\n baseUrl: string;\n timeout: number;\n throwOnError: boolean;\n debug: boolean;\n}\n\nexport class SbTransport {\n constructor(private readonly config: TransportConfig) {}\n\n async request<T>(\n method: HttpMethod,\n path: string,\n body?: unknown,\n query?: object\n ): Promise<SbResult<T>> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.config.timeout);\n const url = this.config.baseUrl + path + buildQuery(query);\n\n let status = 0;\n let data: any;\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${this.config.apiKey}`,\n ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),\n },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n status = response.status;\n const text = await response.text();\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n\n if (response.ok) {\n return { ok: true, status, data: data as T };\n }\n } catch (error) {\n const timedOut = error instanceof Error && error.name === 'AbortError';\n\n return this.fail(\n 0,\n timedOut ? 'TIMEOUT' : 'NETWORK_ERROR',\n error instanceof Error ? error.message : 'network error',\n undefined\n );\n } finally {\n clearTimeout(timer);\n }\n\n // API `{message, code}` döner; Laravel doğrulama hatası `{message, errors}`\n // döner (kodsuz) — onu VALIDATION_ERROR sayarız.\n const code: string =\n (data && typeof data === 'object' && typeof data.code === 'string' && data.code) ||\n (status === 422 ? 'VALIDATION_ERROR' : status === 401 ? 'API_KEY_INVALID' : `HTTP_${status}`);\n const message: string =\n (data && typeof data === 'object' && typeof data.message === 'string' && data.message) ||\n `HTTP ${status}`;\n\n return this.fail(status, code, message, data);\n }\n\n private fail<T>(status: number, code: string, message: string, data: unknown): SbResult<T> {\n if (this.config.throwOnError) {\n throw new SignalbirdError(`Signalbird: ${code} — ${message}`, status, code, data);\n }\n\n if (this.config.debug) {\n console.warn(`[signalbird] ${code} (HTTP ${status}): ${message}`);\n }\n\n return { ok: false, status, code, message, data: data as T };\n }\n}\n\n/** `undefined`/`null` alanlar atlanır; diziler `key[]=` biçiminde gider. */\nexport function buildQuery(query: object | undefined): string {\n if (!query) return '';\n\n const params = new URLSearchParams();\n\n for (const [key, value] of Object.entries(query as Record<string, unknown>)) {\n if (value === undefined || value === null) continue;\n\n if (Array.isArray(value)) {\n for (const item of value) params.append(`${key}[]`, String(item));\n } else {\n params.append(key, String(value));\n }\n }\n\n const encoded = params.toString();\n\n return encoded ? `?${encoded}` : '';\n}\n\n/** Yol parçası — kimlikler URL'e gömülmeden önce kodlanır. */\nexport function seg(value: string | number): string {\n return encodeURIComponent(String(value));\n}\n","/**\n * Yönetim (Management) istemcisi — sunucu tarafı.\n *\n * Müşterinin panelde tıklayarak yaptığı her şeyi kodla yapar: Telsiz projesi ve\n * kanalı açar, olay akışını okur, sohbet gelen kutusunu işler, uygulama kaydı\n * ve cihaz listesi yönetir.\n *\n * Bu ADMIN yüzeyi DEĞİLDİR. Anahtar tek bir takıma bağlıdır ve yalnız o takımın\n * kayıtlarına dokunur; başka takımın kaydı 404 döner.\n *\n * Neden ayrı sınıf: Gönderim (`SignalbirdMessaging`) ileti gönderir ve kota\n * harcar; bu istemci yapılandırma değiştirir. Aynı anahtar ailesini kullanırlar\n * (`sb_…`) ama scope'ları ve hata kümeleri farklıdır — tek sınıfta birleşseydi\n * \"hangi scope gerekiyordu\" sorusu her metotta yeniden sorulurdu.\n *\n * Sözleşme: docs/CONTRACT.md § 10\n */\nimport { SbTransport, seg, type SbResult } from './http';\nimport { DEFAULT_BASE_URL, SignalbirdError } from './types';\nimport type {\n AppDevice,\n AppInput,\n AppRecord,\n CannedReply,\n CannedReplyInput,\n ChatConversation,\n ChatMessage,\n ChatReport,\n ChatReportRange,\n ChatTrigger,\n ChatTriggerInput,\n ChatVisitor,\n ConversationStatus,\n CreateRadioProjectInput,\n ListAppDevicesQuery,\n ListChatMessagesQuery,\n ListConversationsQuery,\n ListRadioEventsQuery,\n ManagementConfig,\n Paginated,\n RadioChannel,\n RadioChannelInput,\n RadioEvent,\n RadioProject,\n RadioProjectCreated,\n ReplyInput,\n StartConversationInput,\n UpdateConversationInput,\n UpdateRadioProjectInput,\n UpdateVisitorInput,\n} from './management-types';\n\nexport class SignalbirdManagement {\n private readonly http: SbTransport;\n\n constructor(config: ManagementConfig) {\n if (!config.apiKey) {\n throw new SignalbirdError('Signalbird: apiKey zorunlu.', 0, 'NO_KEY');\n }\n\n // Telsiz (`sbr_`) ya da uygulama (`sbw_pub_`) anahtarı buraya verilirse her\n // istek 401 döner; kurulum anında söylemek haftalar sonra bulunacak hatayı önler.\n if (!config.apiKey.startsWith('sb_')) {\n throw new SignalbirdError(\n 'Signalbird: yönetim istemcisi takım API anahtarı ister (sb_…). ' +\n 'Telsiz (sbr_…) ve uygulama (sbw_pub_…) anahtarları burada çalışmaz.',\n 0,\n 'WRONG_KEY_TYPE'\n );\n }\n\n this.http = new SbTransport({\n apiKey: config.apiKey,\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, ''),\n timeout: config.timeout ?? 15000,\n throwOnError: config.throwOnError ?? false,\n debug: config.debug ?? false,\n });\n }\n\n // ── Telsiz: projeler ──────────────────────────────────────────────────\n\n /** Panelin Telsiz özeti: proje sayısı, günlük hacim, son olaylar. */\n radioSummary(): Promise<SbResult<Record<string, unknown>>> {\n return this.http.request('GET', '/v1/radio/summary');\n }\n\n /** Olay akışı — kanal, seviye ve tarihe göre süzülür. */\n radioEvents(query?: ListRadioEventsQuery): Promise<SbResult<Paginated<RadioEvent>>> {\n return this.http.request('GET', '/v1/radio/events', undefined, query);\n }\n\n listRadioProjects(): Promise<SbResult<{ data: RadioProject[] }>> {\n return this.http.request('GET', '/v1/radio/projects');\n }\n\n /**\n * Proje açar.\n *\n * Dönen `secret` (`sbr_live_…`) YALNIZ BURADA görünür: sunucuda yalnız\n * SHA-256 özeti saklanır. Kaybedilirse `rotateRadioSecret` ile yenilenir.\n */\n createRadioProject(input: CreateRadioProjectInput): Promise<SbResult<RadioProjectCreated>> {\n return this.http.request('POST', '/v1/radio/projects', input);\n }\n\n getRadioProject(id: number | string): Promise<SbResult<{ project: RadioProject }>> {\n return this.http.request('GET', `/v1/radio/projects/${seg(id)}`);\n }\n\n updateRadioProject(\n id: number | string,\n input: UpdateRadioProjectInput\n ): Promise<SbResult<{ project: RadioProject }>> {\n return this.http.request('PATCH', `/v1/radio/projects/${seg(id)}`, input);\n }\n\n deleteRadioProject(id: number | string): Promise<SbResult<unknown>> {\n return this.http.request('DELETE', `/v1/radio/projects/${seg(id)}`);\n }\n\n /** Gizli anahtarı yeniler; eski anahtar ANINDA geçersizleşir. */\n rotateRadioSecret(id: number | string): Promise<SbResult<{ secret: string }>> {\n return this.http.request('POST', `/v1/radio/projects/${seg(id)}/rotate`);\n }\n\n // ── Telsiz: kanallar ──────────────────────────────────────────────────\n\n createRadioChannel(\n projectId: number | string,\n input: RadioChannelInput\n ): Promise<SbResult<{ channel: RadioChannel }>> {\n return this.http.request('POST', `/v1/radio/projects/${seg(projectId)}/channels`, input);\n }\n\n /**\n * Kanalı günceller. `key` DEĞİŞMEZ — müşterinin kodundaki `log('critical', …)`\n * çağrısı ona bağlıdır; sunucu gönderilse de yok sayar.\n */\n updateRadioChannel(\n projectId: number | string,\n channelId: number | string,\n input: RadioChannelInput\n ): Promise<SbResult<{ channel: RadioChannel }>> {\n return this.http.request(\n 'PATCH',\n `/v1/radio/projects/${seg(projectId)}/channels/${seg(channelId)}`,\n input\n );\n }\n\n deleteRadioChannel(\n projectId: number | string,\n channelId: number | string\n ): Promise<SbResult<unknown>> {\n return this.http.request(\n 'DELETE',\n `/v1/radio/projects/${seg(projectId)}/channels/${seg(channelId)}`\n );\n }\n\n // ── Sohbet: gelen kutusu ──────────────────────────────────────────────\n\n chatSummary(): Promise<SbResult<Record<string, unknown>>> {\n return this.http.request('GET', '/v1/chat/summary');\n }\n\n /** Kısa aralıklı yoklama için: yalnız değişenler + çevrimiçi ajanlar. */\n chatUpdates(): Promise<SbResult<Record<string, unknown>>> {\n return this.http.request('GET', '/v1/chat/updates');\n }\n\n listConversations(\n query?: ListConversationsQuery\n ): Promise<SbResult<Paginated<ChatConversation>>> {\n return this.http.request('GET', '/v1/chat/conversations', undefined, query);\n }\n\n getConversation(id: string): Promise<SbResult<{ conversation: ChatConversation }>> {\n return this.http.request('GET', `/v1/chat/conversations/${seg(id)}`);\n }\n\n /** `after` imleci `cm_…` mesaj kimliğidir; yoklamada tam listeyi çekmez. */\n listConversationMessages(\n id: string,\n query?: ListChatMessagesQuery\n ): Promise<SbResult<{ messages: ChatMessage[] }>> {\n return this.http.request('GET', `/v1/chat/conversations/${seg(id)}/messages`, undefined, query);\n }\n\n /** Proaktif sohbet — ziyaretçi yazmadan ajan başlatır. */\n startConversation(input: StartConversationInput): Promise<SbResult<{ conversation: ChatConversation }>> {\n return this.http.request('POST', '/v1/chat/conversations', input);\n }\n\n updateConversation(\n id: string,\n input: UpdateConversationInput\n ): Promise<SbResult<{ conversation: ChatConversation }>> {\n return this.http.request('PATCH', `/v1/chat/conversations/${seg(id)}`, input);\n }\n\n setConversationStatus(\n id: string,\n status: ConversationStatus\n ): Promise<SbResult<{ conversation: ChatConversation }>> {\n return this.http.request('POST', `/v1/chat/conversations/${seg(id)}/status`, { status });\n }\n\n /**\n * Atama atomiktir: `userId` verilmezse çağıran anahtarın sahibine atanır.\n * Başkasına atanmış sohbeti devralmak `chat:write` ister.\n */\n assignConversation(\n id: string,\n userId?: number | null\n ): Promise<SbResult<{ conversation: ChatConversation }>> {\n return this.http.request('POST', `/v1/chat/conversations/${seg(id)}/assign`, {\n user_id: userId ?? null,\n });\n }\n\n readConversation(id: string, lastMessageId?: string): Promise<SbResult<unknown>> {\n return this.http.request('POST', `/v1/chat/conversations/${seg(id)}/read`, {\n last_message_id: lastMessageId,\n });\n }\n\n setTyping(id: string, isTyping: boolean): Promise<SbResult<unknown>> {\n return this.http.request('POST', `/v1/chat/conversations/${seg(id)}/typing`, {\n is_typing: isTyping,\n });\n }\n\n reply(id: string, input: ReplyInput): Promise<SbResult<{ message: ChatMessage }>> {\n return this.http.request('POST', `/v1/chat/conversations/${seg(id)}/messages`, input);\n }\n\n editChatMessage(\n id: string,\n messageId: string,\n body: string\n ): Promise<SbResult<{ message: ChatMessage }>> {\n return this.http.request('PATCH', `/v1/chat/conversations/${seg(id)}/messages/${seg(messageId)}`, {\n body,\n });\n }\n\n deleteChatMessage(id: string, messageId: string): Promise<SbResult<unknown>> {\n return this.http.request(\n 'DELETE',\n `/v1/chat/conversations/${seg(id)}/messages/${seg(messageId)}`\n );\n }\n\n /** Tepki açma/kapama — aynı emoji ikinci kez gönderilirse kaldırılır. */\n reactToChatMessage(\n id: string,\n messageId: string,\n emoji: string\n ): Promise<SbResult<{ message: ChatMessage }>> {\n return this.http.request(\n 'POST',\n `/v1/chat/conversations/${seg(id)}/messages/${seg(messageId)}/reactions`,\n { emoji }\n );\n }\n\n // ── Sohbet: ziyaretçi ve hazır yanıtlar ───────────────────────────────\n\n getVisitor(id: string): Promise<SbResult<{ visitor: ChatVisitor }>> {\n return this.http.request('GET', `/v1/chat/visitors/${seg(id)}`);\n }\n\n updateVisitor(id: string, input: UpdateVisitorInput): Promise<SbResult<{ visitor: ChatVisitor }>> {\n return this.http.request('PATCH', `/v1/chat/visitors/${seg(id)}`, input);\n }\n\n banVisitor(id: string): Promise<SbResult<{ visitor: ChatVisitor }>> {\n return this.http.request('POST', `/v1/chat/visitors/${seg(id)}/ban`);\n }\n\n listCannedReplies(): Promise<SbResult<{ data: CannedReply[] }>> {\n return this.http.request('GET', '/v1/chat/canned-replies');\n }\n\n createCannedReply(input: CannedReplyInput): Promise<SbResult<{ reply: CannedReply }>> {\n return this.http.request('POST', '/v1/chat/canned-replies', input);\n }\n\n updateCannedReply(\n id: number | string,\n input: CannedReplyInput\n ): Promise<SbResult<{ reply: CannedReply }>> {\n return this.http.request('PATCH', `/v1/chat/canned-replies/${seg(id)}`, input);\n }\n\n deleteCannedReply(id: number | string): Promise<SbResult<unknown>> {\n return this.http.request('DELETE', `/v1/chat/canned-replies/${seg(id)}`);\n }\n\n // ── Sohbet: tetikleyiciler ────────────────────────────────────────────\n // \"Şu olduğunda şunu yap.\" Kural KAYITTA durur, kodda değil: müşteri\n // davranışı değiştirmek için sürüm çıkarmak zorunda kalmasın.\n\n listChatTriggers(): Promise<SbResult<{ data: ChatTrigger[]; schema: Record<string, string[]> }>> {\n return this.http.request('GET', '/v1/chat/triggers');\n }\n\n createChatTrigger(input: ChatTriggerInput): Promise<SbResult<{ trigger: ChatTrigger }>> {\n return this.http.request('POST', '/v1/chat/triggers', input);\n }\n\n updateChatTrigger(id: number | string, input: Partial<ChatTriggerInput>): Promise<SbResult<{ trigger: ChatTrigger }>> {\n return this.http.request('PATCH', `/v1/chat/triggers/${seg(id)}`, input);\n }\n\n deleteChatTrigger(id: number | string): Promise<SbResult<unknown>> {\n return this.http.request('DELETE', `/v1/chat/triggers/${seg(id)}`);\n }\n\n // ── Sohbet: rapor ─────────────────────────────────────────────────────\n\n /**\n * Yanıt süresi, çözüm süresi, memnuniyet ve ajan kırılımı.\n * Veri yoksa süreler `null` döner — 0 DEĞİL.\n */\n chatReport(range: ChatReportRange = '30d'): Promise<SbResult<ChatReport>> {\n return this.http.request('GET', '/v1/chat/reports', undefined, { range });\n }\n\n // ── Uygulamalar ───────────────────────────────────────────────────────\n\n listApps(): Promise<SbResult<AppRecord[]>> {\n return this.http.request('GET', '/v1/apps');\n }\n\n /** Yanıttaki `public_key` (`sbw_pub_…`) istemciye gömülür; gizli değildir. */\n createApp(input: AppInput): Promise<SbResult<AppRecord>> {\n return this.http.request('POST', '/v1/apps', input);\n }\n\n getApp(id: number | string): Promise<SbResult<AppRecord>> {\n return this.http.request('GET', `/v1/apps/${seg(id)}`);\n }\n\n updateApp(id: number | string, input: AppInput): Promise<SbResult<AppRecord>> {\n return this.http.request('PATCH', `/v1/apps/${seg(id)}`, input);\n }\n\n deleteApp(id: number | string): Promise<SbResult<unknown>> {\n return this.http.request('DELETE', `/v1/apps/${seg(id)}`);\n }\n\n /** Açık anahtarı yeniler; siteye gömülü eski anahtar ANINDA çalışmaz olur. */\n rotateAppKey(id: number | string): Promise<SbResult<AppRecord>> {\n return this.http.request('POST', `/v1/apps/${seg(id)}/rotate-key`);\n }\n\n listAppDevices(\n id: number | string,\n query?: ListAppDevicesQuery\n ): Promise<SbResult<Paginated<AppDevice>>> {\n return this.http.request('GET', `/v1/apps/${seg(id)}/devices`, undefined, query);\n }\n}\n","/**\n * Partner istemcisi — BEŞİNCİ yüzey.\n *\n * Signalbird'ü kendi ürününün içinde satan sözleşmeli platform (veribenim,\n * submitcms) müşterisini bununla sağlar ve yetkilendirir: company + takım +\n * owner açar, domain ekler ve izlemeye alır, uptime okur, modül açar/kapatır,\n * gömme jetonu üretir.\n *\n * **Bu, CLAUDE.md'deki \"Admin yüzeyi OLMAYACAK\" kuralının bilinçli\n * istisnasıdır** ve istisna olduğu için ayrı anahtar türü taşır. Kural,\n * müşterinin kendi anahtarıyla (`sb_`) şirket açamaması içindi; o kural aynen\n * duruyor. Sözleşmeli partner farklı bir taraftır.\n *\n * Anahtar `sbp_live_…` **asla tarayıcıya inmez**: gömme jetonunu partner'ın\n * kendi sunucusu üretir, tarayıcı yalnız o kısa ömürlü jetonu görür.\n *\n * Sözleşme: docs/CONTRACT.md § 12\n */\nimport { SbTransport, seg, type SbResult } from './http';\nimport { DEFAULT_BASE_URL, SignalbirdError } from './types';\nimport type {\n AddDomainInput,\n AddDomainResult,\n CreateCompanyInput,\n CreateCompanyResult,\n EmbedToken,\n EmbedTokenInput,\n GrantModuleInput,\n ModuleEntitlement,\n PartnerCompany,\n PartnerConfig,\n PartnerDomain,\n PartnerUser,\n PartnerUserInput,\n UptimeRange,\n UptimeReport,\n VerifyDomainResult,\n} from './partner-types';\n\nexport class SignalbirdPartner {\n private readonly http: SbTransport;\n\n constructor(config: PartnerConfig) {\n if (!config.apiKey) {\n throw new SignalbirdError('Signalbird: apiKey zorunlu.', 0, 'NO_KEY');\n }\n\n // Takım anahtarı (`sb_`) buraya verilirse her istek 401 döner; kurulum\n // anında söylemek, haftalar sonra bulunacak hatayı önler.\n if (!config.apiKey.startsWith('sbp_live_')) {\n throw new SignalbirdError(\n 'Signalbird: partner istemcisi partner anahtarı ister (sbp_live_…). ' +\n 'Takım (sb_…), Telsiz (sbr_…) ve uygulama (sbw_pub_…) anahtarları burada çalışmaz.',\n 0,\n 'WRONG_KEY_TYPE'\n );\n }\n\n this.http = new SbTransport({\n apiKey: config.apiKey,\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, ''),\n timeout: config.timeout ?? 15000,\n throwOnError: config.throwOnError ?? false,\n debug: config.debug ?? false,\n });\n }\n\n // ── Müşteri ───────────────────────────────────────────────────────────\n\n /**\n * Company + takım + owner açar. **Idempotenttir**: aynı `external_id` ile\n * ikinci çağrı yeni kayıt açmaz, `created:false` ile var olanı döner.\n * Anahtarlar (`keys`) yalnız ilk oluşturmada gelir.\n */\n createCompany(input: CreateCompanyInput): Promise<SbResult<CreateCompanyResult>> {\n return this.http.request('POST', '/v1/partner/companies', input);\n }\n\n listCompanies(query?: { page?: number; q?: string; per_page?: number }): Promise<\n SbResult<{ data: PartnerCompany[]; meta: Record<string, number> }>\n > {\n return this.http.request('GET', '/v1/partner/companies', undefined, query);\n }\n\n getCompany(externalId: string): Promise<SbResult<{ company: PartnerCompany }>> {\n return this.http.request('GET', `/v1/partner/companies/${seg(externalId)}`);\n }\n\n updateCompany(\n externalId: string,\n input: { name?: string; is_active?: boolean }\n ): Promise<SbResult<{ company: PartnerCompany }>> {\n return this.http.request('PATCH', `/v1/partner/companies/${seg(externalId)}`, input);\n }\n\n /** Askıya alır — SİLMEZ. Müşterinin izleme ve mesaj geçmişi durur. */\n suspendCompany(externalId: string): Promise<SbResult<{ company: PartnerCompany }>> {\n return this.http.request('DELETE', `/v1/partner/companies/${seg(externalId)}`);\n }\n\n rotateKey(externalId: string, type: 'api' | 'app'): Promise<SbResult<{ type: string; key: string }>> {\n return this.http.request('POST', `/v1/partner/companies/${seg(externalId)}/keys/rotate`, { type });\n }\n\n // ── Domain ────────────────────────────────────────────────────────────\n\n /**\n * Domain ekler ve (istenirse) izlemeye alır. Kayıt `verified_via:'partner'`\n * ile doğar: izleme, sohbet ve push için yeter — **e-posta/SMS kampanyası\n * için TXT şarttır**. Yanıttaki `dns` kaydını yayınlayıp `verifyDomain`\n * çağırmak kapıyı açar.\n */\n addDomain(companyExternalId: string, input: AddDomainInput): Promise<SbResult<AddDomainResult>> {\n return this.http.request('POST', `/v1/partner/companies/${seg(companyExternalId)}/domains`, input);\n }\n\n listDomains(companyExternalId: string): Promise<SbResult<{ data: PartnerDomain[] }>> {\n return this.http.request('GET', `/v1/partner/companies/${seg(companyExternalId)}/domains`);\n }\n\n getDomain(externalId: string): Promise<SbResult<{ domain: PartnerDomain }>> {\n return this.http.request('GET', `/v1/partner/domains/${seg(externalId)}`);\n }\n\n /** TXT'yi hemen sorgular; eşleşirse domain kampanya kapısından geçer olur. */\n verifyDomain(externalId: string): Promise<SbResult<VerifyDomainResult>> {\n return this.http.request('POST', `/v1/partner/domains/${seg(externalId)}/verify`);\n }\n\n removeDomain(externalId: string): Promise<SbResult<{ deleted: boolean }>> {\n return this.http.request('DELETE', `/v1/partner/domains/${seg(externalId)}`);\n }\n\n domainUptime(externalId: string, range: UptimeRange = '24h'): Promise<SbResult<UptimeReport>> {\n return this.http.request('GET', `/v1/partner/domains/${seg(externalId)}/uptime`, undefined, { range });\n }\n\n /** Tek istekte müşterinin tüm domainleri — liste ekranı N+1 atmasın. */\n companyUptime(\n companyExternalId: string,\n range: UptimeRange = '24h'\n ): Promise<SbResult<{ range: string; data: UptimeReport[] }>> {\n return this.http.request(\n 'GET',\n `/v1/partner/companies/${seg(companyExternalId)}/uptime`,\n undefined,\n { range }\n );\n }\n\n // ── Modül yetkisi ─────────────────────────────────────────────────────\n\n listModules(companyExternalId: string): Promise<SbResult<{ data: ModuleEntitlement[] }>> {\n return this.http.request('GET', `/v1/partner/companies/${seg(companyExternalId)}/modules`);\n }\n\n /** \"Bu müşteri şu modül için ödeme yaptı, kullanabilir.\" */\n grantModule(companyExternalId: string, input: GrantModuleInput): Promise<SbResult<ModuleEntitlement>> {\n return this.http.request('POST', `/v1/partner/companies/${seg(companyExternalId)}/modules`, input);\n }\n\n /** Yalnız partner'ın KENDİ verdiği hakkı geri alır; plan hakkına dokunmaz. */\n revokeModule(companyExternalId: string, module: string): Promise<SbResult<{ removed: boolean }>> {\n return this.http.request(\n 'DELETE',\n `/v1/partner/companies/${seg(companyExternalId)}/modules/${seg(module)}`\n );\n }\n\n // ── Kullanıcı ─────────────────────────────────────────────────────────\n\n createUser(\n companyExternalId: string,\n input: PartnerUserInput\n ): Promise<SbResult<{ created: boolean; user: PartnerUser }>> {\n return this.http.request('POST', `/v1/partner/companies/${seg(companyExternalId)}/users`, input);\n }\n\n listUsers(companyExternalId: string): Promise<SbResult<{ data: PartnerUser[] }>> {\n return this.http.request('GET', `/v1/partner/companies/${seg(companyExternalId)}/users`);\n }\n\n /** Üyeliği kaldırır, kişinin Signalbird hesabını SİLMEZ. */\n removeUser(companyExternalId: string, userExternalId: string): Promise<SbResult<{ removed: boolean }>> {\n return this.http.request(\n 'DELETE',\n `/v1/partner/companies/${seg(companyExternalId)}/users/${seg(userExternalId)}`\n );\n }\n\n // ── Gömme ─────────────────────────────────────────────────────────────\n\n /**\n * Panel ekranını partner sayfasına gömmek için kısa ömürlü jeton üretir.\n * 120 saniye yaşar ve TEK KULLANIMLIKTIR — jeton URL'de gider, log ve\n * `Referer` başlığına düşer.\n */\n createEmbedToken(companyExternalId: string, input: EmbedTokenInput): Promise<SbResult<EmbedToken>> {\n return this.http.request('POST', `/v1/partner/companies/${seg(companyExternalId)}/embed`, input);\n }\n}\n","/**\n * Mesaj olay webhook'larının imza doğrulaması.\n *\n * Signalbird her teslimatı `X-Signalbird-Signature: sha256=<hex>` başlığıyla\n * imzalar: `hex(hmac_sha256(raw_body, secret))`. Doğrulama HAM gövde üzerinde\n * yapılmalıdır — JSON'u ayrıştırıp yeniden serileştirmek anahtar sırasını\n * değiştirir ve imzayı bozar. Express'te `express.raw()` ya da `verify`\n * kancasıyla ham gövdeyi saklayın.\n */\nimport { createHmac, timingSafeEqual } from 'node:crypto';\n\nexport function verifyWebhook(\n rawBody: string | Uint8Array,\n signatureHeader: string | null | undefined,\n secret: string\n): boolean {\n if (!signatureHeader || !secret) return false;\n\n // \"sha256=abcd…\" — başka algoritma ya da biçim kabul edilmez.\n const match = /^\\s*sha256=([a-f0-9]+)\\s*$/i.exec(signatureHeader);\n if (!match) return false;\n\n const expected = createHmac('sha256', secret).update(rawBody).digest('hex');\n const provided = match[1].toLowerCase();\n\n // Uzunluk farkı, `timingSafeEqual`in fırlatmaması için önce elenir; uzunluk\n // zaten sabit (64) olduğundan zamanlama sızıntısı yaratmaz.\n if (provided.length !== expected.length) return false;\n\n return timingSafeEqual(Buffer.from(provided, 'utf8'), Buffer.from(expected, 'utf8'));\n}\n","/**\n * signalbird — sunucu tarafı giriş noktası.\n *\n * Next.js sunucu bileşenleri, API route'ları, Express/Fastify/NestJS ve düz\n * Node betikleri buradan alır. TARAYICI için `signalbird/browser`\n * kullanılır — gizli anahtar istemciye inmez.\n *\n * Üç sunucu istemcisi vardır; anahtarları ve kapıları farklıdır:\n * - `SignalbirdClient` → Telsiz (log yazma), `sbr_live_…`\n * - `SignalbirdMessaging` → Gönderim (e-posta/SMS/push/kişi/kampanya), `sb_…`\n * - `SignalbirdManagement` → Yönetim (Telsiz projesi, sohbet gelen kutusu,\n * uygulama kaydı), `sb_…` + `radio|chat|apps` scope'ları\n * - `SignalbirdPartner` → Partner (müşteri sağlama, modül yetkisi, gömme),\n * `sbp_live_…` — yalnız sözleşmeli platformlar\n *\n * Son kullanıcı (ziyaretçi) yüzeyi ayrı giriş noktasındadır:\n * `signalbird/app` — ve onun çatı uyarlamaları `/react`, `/vue`,\n * `/angular`, `/react-native`.\n */\nexport { SignalbirdClient } from './client';\nexport { SignalbirdMessaging } from './messaging';\nexport { SignalbirdManagement } from './management';\nexport { SignalbirdPartner } from './partner';\nexport { verifyWebhook } from './webhook';\nexport type {\n ManagementConfig,\n AppDevice,\n AppInput,\n AppPlatform,\n AppRecord,\n CannedReply,\n CannedReplyInput,\n ChatConversation,\n ChatMessage,\n ChatVisitor,\n ConversationStatus,\n CreateRadioProjectInput,\n ListAppDevicesQuery,\n ListChatMessagesQuery,\n ListConversationsQuery,\n ListRadioEventsQuery,\n RadioChannel,\n RadioChannelInput,\n RadioEvent,\n RadioLevel,\n RadioProject,\n RadioProjectCreated,\n ReplyInput,\n StartConversationInput,\n UpdateConversationInput,\n UpdateRadioProjectInput,\n UpdateVisitorInput,\n} from './management-types';\nexport type {\n MessagingConfig,\n SbResult,\n MessageClass,\n Channel,\n SendEmailInput,\n SendSmsInput,\n SendPushInput,\n SendResult,\n SmsPreview,\n ContactInput,\n Contact,\n ListContactsQuery,\n BulkContactsInput,\n BulkContactsResult,\n ContactList,\n CreateContactListInput,\n CreateCampaignInput,\n Batch,\n CampaignCreateResult,\n CampaignDetail,\n ListCampaignsQuery,\n Message,\n ListMessagesQuery,\n ListCampaignMessagesQuery,\n Paginated,\n MessagingErrorCode,\n} from './messaging-types';\nexport type {\n PartnerConfig,\n AddDomainInput,\n AddDomainResult,\n CreateCompanyInput,\n CreateCompanyResult,\n DnsRecord,\n EmbedModule,\n EmbedToken,\n EmbedTokenInput,\n GrantModuleInput,\n ModuleEntitlement,\n PartnerCompany,\n PartnerDomain,\n PartnerOwnerInput,\n PartnerUser,\n PartnerUserInput,\n UptimeIncident,\n UptimeRange,\n UptimeReport,\n VerifyDomainResult,\n} from './partner-types';\nexport {\n SignalbirdError,\n DEFAULT_BASE_URL,\n type BatchResult,\n type Level,\n type LogInput,\n type LogResult,\n type SignalbirdConfig,\n} from './types';\n\nimport { SignalbirdClient } from './client';\nimport { SignalbirdManagement } from './management';\nimport type { ManagementConfig } from './management-types';\nimport type { SignalbirdConfig } from './types';\n\nlet singleton: SignalbirdClient | null = null;\n\n/**\n * Ortam değişkeninden kurulan paylaşımlı istemci.\n *\n * `SIGNALBIRD_KEY` okunur. Uygulamanın her köşesinde istemci kurup anahtarı\n * elden ele taşımak yerine tek çağrı yeter:\n *\n * import { signalbird } from 'signalbird'\n * await signalbird().critical('critical', 'ödeme servisi öldü')\n */\nexport function signalbird(config?: Partial<SignalbirdConfig>): SignalbirdClient {\n if (singleton && !config) {\n return singleton;\n }\n\n const apiKey = config?.apiKey ?? process.env.SIGNALBIRD_KEY ?? '';\n\n const client = new SignalbirdClient({\n apiKey,\n baseUrl: config?.baseUrl ?? process.env.SIGNALBIRD_URL,\n source: config?.source ?? process.env.SIGNALBIRD_SOURCE,\n ...config,\n });\n\n if (!config) {\n singleton = client;\n }\n\n return client;\n}\n\n/** Test ve sıcak yeniden yükleme için tekil istemciyi sıfırlar. */\nexport function resetSignalbird(): void {\n singleton = null;\n}\n\nlet managementSingleton: SignalbirdManagement | null = null;\n\n/**\n * Ortam değişkeninden kurulan paylaşımlı yönetim istemcisi.\n *\n * `SIGNALBIRD_API_KEY` okunur (yoksa `SIGNALBIRD_MESSAGING_KEY` — ikisi de aynı\n * takım anahtarı ailesidir ve çoğu kurulumda tek anahtar kullanılır).\n *\n * import { management } from 'signalbird'\n * await management().createRadioProject({ name: 'ödeme-servisi' })\n */\nexport function management(config?: Partial<ManagementConfig>): SignalbirdManagement {\n if (managementSingleton && !config) {\n return managementSingleton;\n }\n\n const client = new SignalbirdManagement({\n apiKey:\n config?.apiKey ??\n process.env.SIGNALBIRD_API_KEY ??\n process.env.SIGNALBIRD_MESSAGING_KEY ??\n '',\n baseUrl: config?.baseUrl ?? process.env.SIGNALBIRD_URL,\n ...config,\n });\n\n if (!config) {\n managementSingleton = client;\n }\n\n return client;\n}\n\n/** Test ve sıcak yeniden yükleme için yönetim istemcisini sıfırlar. */\nexport function resetManagement(): void {\n managementSingleton = null;\n}\n"]}
|