@geekapps/post-nextjs 0.1.4 → 0.1.6
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/dist/index.d.ts +5 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/geekapps-post.ts +9 -4
package/dist/index.d.ts
CHANGED
|
@@ -516,11 +516,15 @@ declare class PostClient {
|
|
|
516
516
|
constructor(options: HttpClientOptions);
|
|
517
517
|
}
|
|
518
518
|
|
|
519
|
-
interface
|
|
519
|
+
interface ServiceAccountOptions {
|
|
520
520
|
issuerUrl: string;
|
|
521
521
|
clientId: string;
|
|
522
522
|
clientSecret: string;
|
|
523
|
+
}
|
|
524
|
+
interface GeekappsPostOptions {
|
|
525
|
+
serviceAccount: ServiceAccountOptions;
|
|
523
526
|
baseUrl?: string;
|
|
527
|
+
logLevel?: "trace" | "debug" | "info" | "warn" | "error" | "silent";
|
|
524
528
|
}
|
|
525
529
|
declare class GeekappsPost extends PostClient {
|
|
526
530
|
constructor(options: GeekappsPostOptions);
|
package/dist/index.js
CHANGED
|
@@ -372,9 +372,9 @@ var TokenProvider = class {
|
|
|
372
372
|
constructor(options) {
|
|
373
373
|
this.cached = null;
|
|
374
374
|
this.inflight = null;
|
|
375
|
-
this.issuerUrl = options.issuerUrl.replace(/\/$/, "");
|
|
376
|
-
this.clientId = options.clientId;
|
|
377
|
-
this.clientSecret = options.clientSecret;
|
|
375
|
+
this.issuerUrl = options.serviceAccount.issuerUrl.replace(/\/$/, "");
|
|
376
|
+
this.clientId = options.serviceAccount.clientId;
|
|
377
|
+
this.clientSecret = options.serviceAccount.clientSecret;
|
|
378
378
|
}
|
|
379
379
|
async ensureFresh() {
|
|
380
380
|
const now = Date.now();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/domains.ts","../src/resources/history.ts","../src/resources/managed-numbers.ts","../src/resources/messages.ts","../src/resources/plans.ts","../src/resources/smtp.ts","../src/resources/statistics.ts","../src/resources/templates.ts","../src/resources/webhooks.ts","../src/resources/whatsapp-numbers.ts","../src/resources/whatsapp-templates.ts","../src/client.ts","../src/geekapps-post.ts"],"sourcesContent":["export class PostApiError extends Error {\n constructor(\n public readonly status: number,\n message: string,\n public readonly detail?: string,\n ) {\n super(detail ? `${message}: ${detail}` : message);\n this.name = \"PostApiError\";\n }\n\n get isNotFound() { return this.status === 404; }\n get isUnauthorized() { return this.status === 401; }\n get isForbidden() { return this.status === 403; }\n get isRateLimited() { return this.status === 429; }\n get isValidationError() { return this.status === 400; }\n}\n","import { PostApiError } from \"./errors.js\";\n\nexport type TokenResolver = string | (() => string | Promise<string>);\n\nexport interface HttpClientOptions {\n baseUrl: string;\n token?: TokenResolver;\n organizationId?: string | (() => string | Promise<string>);\n}\n\nexport interface RequestOptions {\n token?: string;\n organizationId?: string;\n}\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly token?: TokenResolver;\n private readonly organizationId?: string | (() => string | Promise<string>);\n\n constructor(options: HttpClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n this.token = options.token;\n this.organizationId = options.organizationId;\n }\n\n private async resolveToken(override?: string): Promise<string> {\n if (override) return override;\n if (!this.token) throw new Error(\"@geekapps/post-nextjs: no token provided\");\n return typeof this.token === \"function\" ? await this.token() : this.token;\n }\n\n private async resolveOrgId(override?: string): Promise<string | undefined> {\n if (override) return override;\n if (!this.organizationId) return undefined;\n return typeof this.organizationId === \"function\"\n ? await this.organizationId()\n : this.organizationId;\n }\n\n async request<T = unknown>(\n method: string,\n path: string,\n body?: unknown,\n opts?: RequestOptions,\n ): Promise<T> {\n const token = await this.resolveToken(opts?.token);\n const orgId = await this.resolveOrgId(opts?.organizationId);\n\n const res = await fetch(`${this.baseUrl}/v1${path}`, {\n method,\n headers: {\n Authorization: `Bearer ${token}`,\n ...(body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n ...(orgId ? { \"X-Organization-Id\": orgId } : {}),\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n cache: \"no-store\" as RequestCache,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string; detail?: string };\n throw new PostApiError(res.status, err.error ?? `HTTP ${res.status}`, err.detail);\n }\n\n if (res.status === 204) return undefined as T;\n return res.json() as Promise<T>;\n }\n\n get<T>(path: string, opts?: RequestOptions) { return this.request<T>(\"GET\", path, undefined, opts); }\n post<T>(path: string, body?: unknown, opts?: RequestOptions) { return this.request<T>(\"POST\", path, body, opts); }\n put<T>(path: string, body?: unknown, opts?: RequestOptions) { return this.request<T>(\"PUT\", path, body, opts); }\n patch<T>(path: string, body?: unknown, opts?: RequestOptions) { return this.request<T>(\"PATCH\", path, body, opts); }\n delete<T = void>(path: string, opts?: RequestOptions) { return this.request<T>(\"DELETE\", path, undefined, opts); }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { CreateDomainInput, CreateDomainResult, OrgDomain } from \"../types.js\";\n\nexport class DomainsResource {\n constructor(private readonly http: HttpClient) {}\n\n list(opts?: RequestOptions): Promise<OrgDomain[]> {\n return this.http.get<OrgDomain[]>(\"/domains\", opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<OrgDomain> {\n return this.http.get<OrgDomain>(`/domains/${id}`, opts);\n }\n\n create(input: CreateDomainInput, opts?: RequestOptions): Promise<CreateDomainResult> {\n return this.http.post<CreateDomainResult>(\"/domains\", input, opts);\n }\n\n verify(id: string, opts?: RequestOptions): Promise<{ status: \"verified\" | \"failed\" }> {\n return this.http.post<{ status: \"verified\" | \"failed\" }>(`/domains/${id}/verify`, undefined, opts);\n }\n\n delete(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/domains/${id}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { ListHistoryParams, MessageLog, MessageLogDetail, PaginatedResult } from \"../types.js\";\n\nexport class HistoryResource {\n constructor(private readonly http: HttpClient) {}\n\n list(params?: ListHistoryParams, opts?: RequestOptions): Promise<PaginatedResult<MessageLog>> {\n const qs = new URLSearchParams();\n if (params?.type) qs.set(\"type\", params.type);\n if (params?.status) qs.set(\"status\", params.status);\n if (params?.from) qs.set(\"from\", params.from);\n if (params?.to) qs.set(\"to\", params.to);\n if (params?.page !== undefined) qs.set(\"page\", String(params.page));\n if (params?.limit !== undefined) qs.set(\"limit\", String(params.limit));\n const query = qs.toString();\n return this.http.get<PaginatedResult<MessageLog>>(`/history${query ? `?${query}` : \"\"}`, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<MessageLogDetail> {\n return this.http.get<MessageLogDetail>(`/history/${id}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { AreaCode, ManagedNumber } from \"../types.js\";\n\nexport interface ProvisionManagedNumberInput {\n areaCode: number;\n name?: string;\n displayName: string;\n otpMethod?: \"SMS\" | \"VOICE\";\n otpLanguage?: string;\n pin?: string;\n orgWabaId?: string;\n wabaId?: string;\n accessToken?: string;\n}\n\nexport interface RetryVerificationInput {\n otpMethod?: \"SMS\" | \"VOICE\";\n otpLanguage?: string;\n}\n\nexport class ManagedNumbersResource {\n constructor(private readonly http: HttpClient) {}\n\n listAreaCodes(opts?: RequestOptions): Promise<AreaCode[]> {\n return this.http.get<AreaCode[]>(\"/managed-numbers/area-codes\", opts);\n }\n\n list(opts?: RequestOptions): Promise<ManagedNumber[]> {\n return this.http.get<ManagedNumber[]>(\"/managed-numbers\", opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<ManagedNumber> {\n return this.http.get<ManagedNumber>(`/managed-numbers/${id}`, opts);\n }\n\n provision(input: ProvisionManagedNumberInput, opts?: RequestOptions): Promise<ManagedNumber> {\n return this.http.post<ManagedNumber>(\"/managed-numbers\", input, opts);\n }\n\n retryVerification(id: string, input?: RetryVerificationInput, opts?: RequestOptions): Promise<ManagedNumber> {\n return this.http.post<ManagedNumber>(`/managed-numbers/${id}/retry-verification`, input, opts);\n }\n\n cancel(id: string, opts?: RequestOptions): Promise<ManagedNumber> {\n return this.http.post<ManagedNumber>(`/managed-numbers/${id}/cancel`, undefined, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { SendMessageInput, SendMessageResult } from \"../types.js\";\n\nexport class MessagesResource {\n constructor(private readonly http: HttpClient) {}\n\n send(input: SendMessageInput, opts?: RequestOptions): Promise<SendMessageResult> {\n return this.http.post<SendMessageResult>(\"/messages\", input, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { AvailablePlan, OrgPlan, PlansResult, UpdatePlanInput } from \"../types.js\";\n\nexport class PlansResource {\n constructor(private readonly http: HttpClient) {}\n\n get(opts?: RequestOptions): Promise<PlansResult> {\n return this.http.get<PlansResult>(\"/plans\", opts);\n }\n\n update(input: UpdatePlanInput, opts?: RequestOptions): Promise<OrgPlan> {\n return this.http.put<OrgPlan>(\"/plans\", input, opts);\n }\n\n listAvailable(opts?: RequestOptions): Promise<AvailablePlan[]> {\n return this.http.get<AvailablePlan[]>(\"/plans/available\", opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { SmtpConfig, UpsertSmtpConfigInput } from \"../types.js\";\n\nexport class SmtpResource {\n constructor(private readonly http: HttpClient) {}\n\n get(opts?: RequestOptions): Promise<SmtpConfig> {\n return this.http.get<SmtpConfig>(\"/smtp-config\", opts);\n }\n\n upsert(input: UpsertSmtpConfigInput, opts?: RequestOptions): Promise<SmtpConfig> {\n return this.http.put<SmtpConfig>(\"/smtp-config\", input, opts);\n }\n\n delete(opts?: RequestOptions): Promise<void> {\n return this.http.delete(\"/smtp-config\", opts);\n }\n\n test(to: string, opts?: RequestOptions): Promise<{ success: boolean; error?: string }> {\n return this.http.post<{ success: boolean; error?: string }>(\"/smtp-config/test\", { to }, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { StatisticsParams, StatisticsResult } from \"../types.js\";\n\nexport class StatisticsResource {\n constructor(private readonly http: HttpClient) {}\n\n get(params?: StatisticsParams, opts?: RequestOptions): Promise<StatisticsResult> {\n const qs = new URLSearchParams();\n if (params?.from) qs.set(\"from\", params.from);\n if (params?.to) qs.set(\"to\", params.to);\n if (params?.groupBy) qs.set(\"groupBy\", params.groupBy);\n const query = qs.toString();\n return this.http.get<StatisticsResult>(`/statistics${query ? `?${query}` : \"\"}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type {\n CreateTemplateInput,\n MessageTemplate,\n MessageType,\n SaveDraftInput,\n UpdateTemplateInput,\n} from \"../types.js\";\n\nexport class TemplatesResource {\n constructor(private readonly http: HttpClient) {}\n\n list(params?: { type?: MessageType; isActive?: boolean }, opts?: RequestOptions): Promise<MessageTemplate[]> {\n const qs = new URLSearchParams();\n if (params?.type) qs.set(\"type\", params.type);\n if (params?.isActive !== undefined) qs.set(\"isActive\", String(params.isActive));\n const query = qs.toString();\n return this.http.get<MessageTemplate[]>(`/templates${query ? `?${query}` : \"\"}`, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.get<MessageTemplate>(`/templates/${id}`, opts);\n }\n\n create(input: CreateTemplateInput, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.post<MessageTemplate>(\"/templates\", input, opts);\n }\n\n update(id: string, input: UpdateTemplateInput, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.put<MessageTemplate>(`/templates/${id}`, input, opts);\n }\n\n saveDraft(id: string, input: SaveDraftInput, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.patch<MessageTemplate>(`/templates/${id}/draft`, input, opts);\n }\n\n publish(id: string, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.post<MessageTemplate>(`/templates/${id}/publish`, undefined, opts);\n }\n\n delete(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/templates/${id}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type {\n CreateWebhookInput,\n OrgWebhook,\n OrgWebhookWithSecret,\n RotateSecretResult,\n UpdateWebhookInput,\n WebhookDelivery,\n} from \"../types.js\";\n\nexport class WebhooksResource {\n constructor(private readonly http: HttpClient) {}\n\n list(opts?: RequestOptions): Promise<OrgWebhook[]> {\n return this.http.get<OrgWebhook[]>(\"/webhooks\", opts);\n }\n\n create(input: CreateWebhookInput, opts?: RequestOptions): Promise<OrgWebhookWithSecret> {\n return this.http.post<OrgWebhookWithSecret>(\"/webhooks\", input, opts);\n }\n\n update(id: string, input: UpdateWebhookInput, opts?: RequestOptions): Promise<OrgWebhook> {\n return this.http.put<OrgWebhook>(`/webhooks/${id}`, input, opts);\n }\n\n delete(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/webhooks/${id}`, opts);\n }\n\n listDeliveries(id: string, opts?: RequestOptions): Promise<WebhookDelivery[]> {\n return this.http.get<WebhookDelivery[]>(`/webhooks/${id}/deliveries`, opts);\n }\n\n rotateSecret(id: string, opts?: RequestOptions): Promise<RotateSecretResult> {\n return this.http.post<RotateSecretResult>(`/webhooks/${id}/rotate-secret`, undefined, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type {\n ConnectWabaInput,\n ConnectWhatsappNumberInput,\n OrgWaba,\n PhoneNumberStatusResult,\n RegisterWhatsappNumberInput,\n UpdateWhatsappProfileInput,\n WabaHealthResult,\n WhatsappNumber,\n WhatsappNumberProfile,\n} from \"../types.js\";\n\nexport class WhatsappNumbersResource {\n constructor(private readonly http: HttpClient) {}\n\n listWabas(opts?: RequestOptions): Promise<OrgWaba[]> {\n return this.http.get<OrgWaba[]>(\"/whatsapp/wabas\", opts);\n }\n\n connectWaba(input: ConnectWabaInput, opts?: RequestOptions): Promise<OrgWaba> {\n return this.http.post<OrgWaba>(\"/whatsapp/wabas/connect\", input, opts);\n }\n\n reconnectWaba(id: string, opts?: RequestOptions): Promise<OrgWaba> {\n return this.http.post<OrgWaba>(`/whatsapp/wabas/${id}/reconnect`, undefined, opts);\n }\n\n disconnectWaba(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/whatsapp/wabas/${id}`, opts);\n }\n\n getWabaHealth(id: string, opts?: RequestOptions): Promise<WabaHealthResult> {\n return this.http.get<WabaHealthResult>(`/whatsapp/wabas/${id}/health`, opts);\n }\n\n listNumbers(opts?: RequestOptions): Promise<WhatsappNumber[]> {\n return this.http.get<WhatsappNumber[]>(\"/whatsapp/numbers\", opts);\n }\n\n connectNumber(input: ConnectWhatsappNumberInput, opts?: RequestOptions): Promise<WhatsappNumber> {\n return this.http.post<WhatsappNumber>(\"/whatsapp/numbers/connect\", input, opts);\n }\n\n registerNumber(input: RegisterWhatsappNumberInput, opts?: RequestOptions): Promise<WhatsappNumber> {\n return this.http.post<WhatsappNumber>(\"/whatsapp/numbers\", input, opts);\n }\n\n verifyCode(id: string, code: string, opts?: RequestOptions): Promise<WhatsappNumber> {\n return this.http.post<WhatsappNumber>(`/whatsapp/numbers/${id}/verify-code`, { code }, opts);\n }\n\n resendCode(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.post(`/whatsapp/numbers/${id}/resend-code`, undefined, opts);\n }\n\n getProfile(id: string, opts?: RequestOptions): Promise<WhatsappNumberProfile> {\n return this.http.get<WhatsappNumberProfile>(`/whatsapp/numbers/${id}/profile`, opts);\n }\n\n updateProfile(id: string, input: UpdateWhatsappProfileInput, opts?: RequestOptions): Promise<WhatsappNumberProfile> {\n return this.http.patch<WhatsappNumberProfile>(`/whatsapp/numbers/${id}/profile`, input, opts);\n }\n\n updateDisplayName(id: string, displayName: string, opts?: RequestOptions): Promise<WhatsappNumber> {\n return this.http.patch<WhatsappNumber>(`/whatsapp/numbers/${id}`, { displayName }, opts);\n }\n\n getStatus(id: string, opts?: RequestOptions): Promise<PhoneNumberStatusResult> {\n return this.http.get<PhoneNumberStatusResult>(`/whatsapp/numbers/${id}/status`, opts);\n }\n\n refreshNumbers(opts?: RequestOptions): Promise<WhatsappNumber[]> {\n return this.http.post<WhatsappNumber[]>(\"/whatsapp/numbers/refresh\", undefined, opts);\n }\n\n deleteNumber(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/whatsapp/numbers/${id}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type {\n CreateWhatsappTemplateInput,\n SyncWhatsappTemplatesResult,\n UpdateWhatsappTemplateInput,\n WhatsappTemplate,\n} from \"../types.js\";\n\nexport class WhatsappTemplatesResource {\n constructor(private readonly http: HttpClient) {}\n\n list(opts?: RequestOptions): Promise<WhatsappTemplate[]> {\n return this.http.get<WhatsappTemplate[]>(\"/whatsapp/templates\", opts);\n }\n\n create(input: CreateWhatsappTemplateInput, opts?: RequestOptions): Promise<WhatsappTemplate> {\n return this.http.post<WhatsappTemplate>(\"/whatsapp/templates\", input, opts);\n }\n\n update(id: string, input: UpdateWhatsappTemplateInput, opts?: RequestOptions): Promise<WhatsappTemplate> {\n return this.http.put<WhatsappTemplate>(`/whatsapp/templates/${id}`, input, opts);\n }\n\n sync(opts?: RequestOptions): Promise<SyncWhatsappTemplatesResult> {\n return this.http.post<SyncWhatsappTemplatesResult>(\"/whatsapp/templates/sync\", undefined, opts);\n }\n\n delete(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/whatsapp/templates/${id}`, opts);\n }\n}\n","import { HttpClient, type HttpClientOptions } from \"./http.js\";\nimport { DomainsResource } from \"./resources/domains.js\";\nimport { HistoryResource } from \"./resources/history.js\";\nimport { ManagedNumbersResource } from \"./resources/managed-numbers.js\";\nimport { MessagesResource } from \"./resources/messages.js\";\nimport { PlansResource } from \"./resources/plans.js\";\nimport { SmtpResource } from \"./resources/smtp.js\";\nimport { StatisticsResource } from \"./resources/statistics.js\";\nimport { TemplatesResource } from \"./resources/templates.js\";\nimport { WebhooksResource } from \"./resources/webhooks.js\";\nimport { WhatsappNumbersResource } from \"./resources/whatsapp-numbers.js\";\nimport { WhatsappTemplatesResource } from \"./resources/whatsapp-templates.js\";\n\nexport interface PostClientOptions extends Omit<HttpClientOptions, \"baseUrl\"> {\n baseUrl?: string;\n}\n\nexport class PostClient {\n private readonly http: HttpClient;\n\n readonly messages: MessagesResource;\n readonly templates: TemplatesResource;\n readonly whatsappTemplates: WhatsappTemplatesResource;\n readonly whatsappNumbers: WhatsappNumbersResource;\n readonly domains: DomainsResource;\n readonly webhooks: WebhooksResource;\n readonly smtp: SmtpResource;\n readonly plans: PlansResource;\n readonly history: HistoryResource;\n readonly statistics: StatisticsResource;\n readonly managedNumbers: ManagedNumbersResource;\n\n constructor(options: HttpClientOptions) {\n this.http = new HttpClient(options);\n\n this.messages = new MessagesResource(this.http);\n this.templates = new TemplatesResource(this.http);\n this.whatsappTemplates = new WhatsappTemplatesResource(this.http);\n this.whatsappNumbers = new WhatsappNumbersResource(this.http);\n this.domains = new DomainsResource(this.http);\n this.webhooks = new WebhooksResource(this.http);\n this.smtp = new SmtpResource(this.http);\n this.plans = new PlansResource(this.http);\n this.history = new HistoryResource(this.http);\n this.statistics = new StatisticsResource(this.http);\n this.managedNumbers = new ManagedNumbersResource(this.http);\n }\n}\n","import { PostClient } from \"./client.js\";\n\nexport interface GeekappsPostOptions {\n issuerUrl: string;\n clientId: string;\n clientSecret: string;\n baseUrl?: string;\n}\n\ninterface CachedToken {\n value: string;\n expiresAt: number;\n organizationId: string | undefined;\n}\n\nfunction decodeJwtPayload(token: string): Record<string, unknown> {\n try {\n const [, payload] = token.split(\".\");\n if (!payload) return {};\n const json = atob(payload.replace(/-/g, \"+\").replace(/_/g, \"/\"));\n return JSON.parse(json) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\nclass TokenProvider {\n private readonly issuerUrl: string;\n private readonly clientId: string;\n private readonly clientSecret: string;\n private cached: CachedToken | null = null;\n private inflight: Promise<CachedToken> | null = null;\n\n constructor(options: GeekappsPostOptions) {\n this.issuerUrl = options.issuerUrl.replace(/\\/$/, \"\");\n this.clientId = options.clientId;\n this.clientSecret = options.clientSecret;\n }\n\n private async ensureFresh(): Promise<CachedToken> {\n const now = Date.now();\n if (this.cached && this.cached.expiresAt - now > 30_000) return this.cached;\n if (this.inflight) return this.inflight;\n this.inflight = this.fetchToken().finally(() => { this.inflight = null; });\n return this.inflight;\n }\n\n getToken(): Promise<string> {\n return this.ensureFresh().then((c) => c.value);\n }\n\n getOrganizationId(): Promise<string | undefined> {\n return this.ensureFresh().then((c) => c.organizationId);\n }\n\n private async fetchToken(): Promise<CachedToken> {\n const credentials = btoa(`${this.clientId}:${this.clientSecret}`);\n const res = await fetch(`${this.issuerUrl}/auth/token`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${credentials}`,\n },\n body: JSON.stringify({ grant_type: \"service_account\" }),\n cache: \"no-store\" as RequestCache,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new Error(`GeekappsPost auth failed (${res.status}): ${err.error ?? \"unknown error\"}`);\n }\n\n const data = await res.json() as { access_token: string; expires_in?: number };\n const claims = decodeJwtPayload(data.access_token);\n const organizationId =\n typeof claims.organizationId === \"string\" ? claims.organizationId :\n typeof claims.organization_id === \"string\" ? claims.organization_id :\n undefined;\n\n this.cached = {\n value: data.access_token,\n expiresAt: Date.now() + (data.expires_in ?? 420) * 1000,\n organizationId,\n };\n return this.cached;\n }\n}\n\nexport class GeekappsPost extends PostClient {\n constructor(options: GeekappsPostOptions) {\n const baseUrl = options.baseUrl ?? \"https://post-api.geekapps.com.br\";\n const provider = new TokenProvider(options);\n\n super({\n baseUrl,\n token: () => provider.getToken(),\n organizationId: () => provider.getOrganizationId() as Promise<string>,\n });\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/domains.ts","../src/resources/history.ts","../src/resources/managed-numbers.ts","../src/resources/messages.ts","../src/resources/plans.ts","../src/resources/smtp.ts","../src/resources/statistics.ts","../src/resources/templates.ts","../src/resources/webhooks.ts","../src/resources/whatsapp-numbers.ts","../src/resources/whatsapp-templates.ts","../src/client.ts","../src/geekapps-post.ts"],"sourcesContent":["export class PostApiError extends Error {\n constructor(\n public readonly status: number,\n message: string,\n public readonly detail?: string,\n ) {\n super(detail ? `${message}: ${detail}` : message);\n this.name = \"PostApiError\";\n }\n\n get isNotFound() { return this.status === 404; }\n get isUnauthorized() { return this.status === 401; }\n get isForbidden() { return this.status === 403; }\n get isRateLimited() { return this.status === 429; }\n get isValidationError() { return this.status === 400; }\n}\n","import { PostApiError } from \"./errors.js\";\n\nexport type TokenResolver = string | (() => string | Promise<string>);\n\nexport interface HttpClientOptions {\n baseUrl: string;\n token?: TokenResolver;\n organizationId?: string | (() => string | Promise<string>);\n}\n\nexport interface RequestOptions {\n token?: string;\n organizationId?: string;\n}\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly token?: TokenResolver;\n private readonly organizationId?: string | (() => string | Promise<string>);\n\n constructor(options: HttpClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n this.token = options.token;\n this.organizationId = options.organizationId;\n }\n\n private async resolveToken(override?: string): Promise<string> {\n if (override) return override;\n if (!this.token) throw new Error(\"@geekapps/post-nextjs: no token provided\");\n return typeof this.token === \"function\" ? await this.token() : this.token;\n }\n\n private async resolveOrgId(override?: string): Promise<string | undefined> {\n if (override) return override;\n if (!this.organizationId) return undefined;\n return typeof this.organizationId === \"function\"\n ? await this.organizationId()\n : this.organizationId;\n }\n\n async request<T = unknown>(\n method: string,\n path: string,\n body?: unknown,\n opts?: RequestOptions,\n ): Promise<T> {\n const token = await this.resolveToken(opts?.token);\n const orgId = await this.resolveOrgId(opts?.organizationId);\n\n const res = await fetch(`${this.baseUrl}/v1${path}`, {\n method,\n headers: {\n Authorization: `Bearer ${token}`,\n ...(body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n ...(orgId ? { \"X-Organization-Id\": orgId } : {}),\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n cache: \"no-store\" as RequestCache,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string; detail?: string };\n throw new PostApiError(res.status, err.error ?? `HTTP ${res.status}`, err.detail);\n }\n\n if (res.status === 204) return undefined as T;\n return res.json() as Promise<T>;\n }\n\n get<T>(path: string, opts?: RequestOptions) { return this.request<T>(\"GET\", path, undefined, opts); }\n post<T>(path: string, body?: unknown, opts?: RequestOptions) { return this.request<T>(\"POST\", path, body, opts); }\n put<T>(path: string, body?: unknown, opts?: RequestOptions) { return this.request<T>(\"PUT\", path, body, opts); }\n patch<T>(path: string, body?: unknown, opts?: RequestOptions) { return this.request<T>(\"PATCH\", path, body, opts); }\n delete<T = void>(path: string, opts?: RequestOptions) { return this.request<T>(\"DELETE\", path, undefined, opts); }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { CreateDomainInput, CreateDomainResult, OrgDomain } from \"../types.js\";\n\nexport class DomainsResource {\n constructor(private readonly http: HttpClient) {}\n\n list(opts?: RequestOptions): Promise<OrgDomain[]> {\n return this.http.get<OrgDomain[]>(\"/domains\", opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<OrgDomain> {\n return this.http.get<OrgDomain>(`/domains/${id}`, opts);\n }\n\n create(input: CreateDomainInput, opts?: RequestOptions): Promise<CreateDomainResult> {\n return this.http.post<CreateDomainResult>(\"/domains\", input, opts);\n }\n\n verify(id: string, opts?: RequestOptions): Promise<{ status: \"verified\" | \"failed\" }> {\n return this.http.post<{ status: \"verified\" | \"failed\" }>(`/domains/${id}/verify`, undefined, opts);\n }\n\n delete(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/domains/${id}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { ListHistoryParams, MessageLog, MessageLogDetail, PaginatedResult } from \"../types.js\";\n\nexport class HistoryResource {\n constructor(private readonly http: HttpClient) {}\n\n list(params?: ListHistoryParams, opts?: RequestOptions): Promise<PaginatedResult<MessageLog>> {\n const qs = new URLSearchParams();\n if (params?.type) qs.set(\"type\", params.type);\n if (params?.status) qs.set(\"status\", params.status);\n if (params?.from) qs.set(\"from\", params.from);\n if (params?.to) qs.set(\"to\", params.to);\n if (params?.page !== undefined) qs.set(\"page\", String(params.page));\n if (params?.limit !== undefined) qs.set(\"limit\", String(params.limit));\n const query = qs.toString();\n return this.http.get<PaginatedResult<MessageLog>>(`/history${query ? `?${query}` : \"\"}`, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<MessageLogDetail> {\n return this.http.get<MessageLogDetail>(`/history/${id}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { AreaCode, ManagedNumber } from \"../types.js\";\n\nexport interface ProvisionManagedNumberInput {\n areaCode: number;\n name?: string;\n displayName: string;\n otpMethod?: \"SMS\" | \"VOICE\";\n otpLanguage?: string;\n pin?: string;\n orgWabaId?: string;\n wabaId?: string;\n accessToken?: string;\n}\n\nexport interface RetryVerificationInput {\n otpMethod?: \"SMS\" | \"VOICE\";\n otpLanguage?: string;\n}\n\nexport class ManagedNumbersResource {\n constructor(private readonly http: HttpClient) {}\n\n listAreaCodes(opts?: RequestOptions): Promise<AreaCode[]> {\n return this.http.get<AreaCode[]>(\"/managed-numbers/area-codes\", opts);\n }\n\n list(opts?: RequestOptions): Promise<ManagedNumber[]> {\n return this.http.get<ManagedNumber[]>(\"/managed-numbers\", opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<ManagedNumber> {\n return this.http.get<ManagedNumber>(`/managed-numbers/${id}`, opts);\n }\n\n provision(input: ProvisionManagedNumberInput, opts?: RequestOptions): Promise<ManagedNumber> {\n return this.http.post<ManagedNumber>(\"/managed-numbers\", input, opts);\n }\n\n retryVerification(id: string, input?: RetryVerificationInput, opts?: RequestOptions): Promise<ManagedNumber> {\n return this.http.post<ManagedNumber>(`/managed-numbers/${id}/retry-verification`, input, opts);\n }\n\n cancel(id: string, opts?: RequestOptions): Promise<ManagedNumber> {\n return this.http.post<ManagedNumber>(`/managed-numbers/${id}/cancel`, undefined, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { SendMessageInput, SendMessageResult } from \"../types.js\";\n\nexport class MessagesResource {\n constructor(private readonly http: HttpClient) {}\n\n send(input: SendMessageInput, opts?: RequestOptions): Promise<SendMessageResult> {\n return this.http.post<SendMessageResult>(\"/messages\", input, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { AvailablePlan, OrgPlan, PlansResult, UpdatePlanInput } from \"../types.js\";\n\nexport class PlansResource {\n constructor(private readonly http: HttpClient) {}\n\n get(opts?: RequestOptions): Promise<PlansResult> {\n return this.http.get<PlansResult>(\"/plans\", opts);\n }\n\n update(input: UpdatePlanInput, opts?: RequestOptions): Promise<OrgPlan> {\n return this.http.put<OrgPlan>(\"/plans\", input, opts);\n }\n\n listAvailable(opts?: RequestOptions): Promise<AvailablePlan[]> {\n return this.http.get<AvailablePlan[]>(\"/plans/available\", opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { SmtpConfig, UpsertSmtpConfigInput } from \"../types.js\";\n\nexport class SmtpResource {\n constructor(private readonly http: HttpClient) {}\n\n get(opts?: RequestOptions): Promise<SmtpConfig> {\n return this.http.get<SmtpConfig>(\"/smtp-config\", opts);\n }\n\n upsert(input: UpsertSmtpConfigInput, opts?: RequestOptions): Promise<SmtpConfig> {\n return this.http.put<SmtpConfig>(\"/smtp-config\", input, opts);\n }\n\n delete(opts?: RequestOptions): Promise<void> {\n return this.http.delete(\"/smtp-config\", opts);\n }\n\n test(to: string, opts?: RequestOptions): Promise<{ success: boolean; error?: string }> {\n return this.http.post<{ success: boolean; error?: string }>(\"/smtp-config/test\", { to }, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type { StatisticsParams, StatisticsResult } from \"../types.js\";\n\nexport class StatisticsResource {\n constructor(private readonly http: HttpClient) {}\n\n get(params?: StatisticsParams, opts?: RequestOptions): Promise<StatisticsResult> {\n const qs = new URLSearchParams();\n if (params?.from) qs.set(\"from\", params.from);\n if (params?.to) qs.set(\"to\", params.to);\n if (params?.groupBy) qs.set(\"groupBy\", params.groupBy);\n const query = qs.toString();\n return this.http.get<StatisticsResult>(`/statistics${query ? `?${query}` : \"\"}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type {\n CreateTemplateInput,\n MessageTemplate,\n MessageType,\n SaveDraftInput,\n UpdateTemplateInput,\n} from \"../types.js\";\n\nexport class TemplatesResource {\n constructor(private readonly http: HttpClient) {}\n\n list(params?: { type?: MessageType; isActive?: boolean }, opts?: RequestOptions): Promise<MessageTemplate[]> {\n const qs = new URLSearchParams();\n if (params?.type) qs.set(\"type\", params.type);\n if (params?.isActive !== undefined) qs.set(\"isActive\", String(params.isActive));\n const query = qs.toString();\n return this.http.get<MessageTemplate[]>(`/templates${query ? `?${query}` : \"\"}`, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.get<MessageTemplate>(`/templates/${id}`, opts);\n }\n\n create(input: CreateTemplateInput, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.post<MessageTemplate>(\"/templates\", input, opts);\n }\n\n update(id: string, input: UpdateTemplateInput, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.put<MessageTemplate>(`/templates/${id}`, input, opts);\n }\n\n saveDraft(id: string, input: SaveDraftInput, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.patch<MessageTemplate>(`/templates/${id}/draft`, input, opts);\n }\n\n publish(id: string, opts?: RequestOptions): Promise<MessageTemplate> {\n return this.http.post<MessageTemplate>(`/templates/${id}/publish`, undefined, opts);\n }\n\n delete(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/templates/${id}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type {\n CreateWebhookInput,\n OrgWebhook,\n OrgWebhookWithSecret,\n RotateSecretResult,\n UpdateWebhookInput,\n WebhookDelivery,\n} from \"../types.js\";\n\nexport class WebhooksResource {\n constructor(private readonly http: HttpClient) {}\n\n list(opts?: RequestOptions): Promise<OrgWebhook[]> {\n return this.http.get<OrgWebhook[]>(\"/webhooks\", opts);\n }\n\n create(input: CreateWebhookInput, opts?: RequestOptions): Promise<OrgWebhookWithSecret> {\n return this.http.post<OrgWebhookWithSecret>(\"/webhooks\", input, opts);\n }\n\n update(id: string, input: UpdateWebhookInput, opts?: RequestOptions): Promise<OrgWebhook> {\n return this.http.put<OrgWebhook>(`/webhooks/${id}`, input, opts);\n }\n\n delete(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/webhooks/${id}`, opts);\n }\n\n listDeliveries(id: string, opts?: RequestOptions): Promise<WebhookDelivery[]> {\n return this.http.get<WebhookDelivery[]>(`/webhooks/${id}/deliveries`, opts);\n }\n\n rotateSecret(id: string, opts?: RequestOptions): Promise<RotateSecretResult> {\n return this.http.post<RotateSecretResult>(`/webhooks/${id}/rotate-secret`, undefined, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type {\n ConnectWabaInput,\n ConnectWhatsappNumberInput,\n OrgWaba,\n PhoneNumberStatusResult,\n RegisterWhatsappNumberInput,\n UpdateWhatsappProfileInput,\n WabaHealthResult,\n WhatsappNumber,\n WhatsappNumberProfile,\n} from \"../types.js\";\n\nexport class WhatsappNumbersResource {\n constructor(private readonly http: HttpClient) {}\n\n listWabas(opts?: RequestOptions): Promise<OrgWaba[]> {\n return this.http.get<OrgWaba[]>(\"/whatsapp/wabas\", opts);\n }\n\n connectWaba(input: ConnectWabaInput, opts?: RequestOptions): Promise<OrgWaba> {\n return this.http.post<OrgWaba>(\"/whatsapp/wabas/connect\", input, opts);\n }\n\n reconnectWaba(id: string, opts?: RequestOptions): Promise<OrgWaba> {\n return this.http.post<OrgWaba>(`/whatsapp/wabas/${id}/reconnect`, undefined, opts);\n }\n\n disconnectWaba(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/whatsapp/wabas/${id}`, opts);\n }\n\n getWabaHealth(id: string, opts?: RequestOptions): Promise<WabaHealthResult> {\n return this.http.get<WabaHealthResult>(`/whatsapp/wabas/${id}/health`, opts);\n }\n\n listNumbers(opts?: RequestOptions): Promise<WhatsappNumber[]> {\n return this.http.get<WhatsappNumber[]>(\"/whatsapp/numbers\", opts);\n }\n\n connectNumber(input: ConnectWhatsappNumberInput, opts?: RequestOptions): Promise<WhatsappNumber> {\n return this.http.post<WhatsappNumber>(\"/whatsapp/numbers/connect\", input, opts);\n }\n\n registerNumber(input: RegisterWhatsappNumberInput, opts?: RequestOptions): Promise<WhatsappNumber> {\n return this.http.post<WhatsappNumber>(\"/whatsapp/numbers\", input, opts);\n }\n\n verifyCode(id: string, code: string, opts?: RequestOptions): Promise<WhatsappNumber> {\n return this.http.post<WhatsappNumber>(`/whatsapp/numbers/${id}/verify-code`, { code }, opts);\n }\n\n resendCode(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.post(`/whatsapp/numbers/${id}/resend-code`, undefined, opts);\n }\n\n getProfile(id: string, opts?: RequestOptions): Promise<WhatsappNumberProfile> {\n return this.http.get<WhatsappNumberProfile>(`/whatsapp/numbers/${id}/profile`, opts);\n }\n\n updateProfile(id: string, input: UpdateWhatsappProfileInput, opts?: RequestOptions): Promise<WhatsappNumberProfile> {\n return this.http.patch<WhatsappNumberProfile>(`/whatsapp/numbers/${id}/profile`, input, opts);\n }\n\n updateDisplayName(id: string, displayName: string, opts?: RequestOptions): Promise<WhatsappNumber> {\n return this.http.patch<WhatsappNumber>(`/whatsapp/numbers/${id}`, { displayName }, opts);\n }\n\n getStatus(id: string, opts?: RequestOptions): Promise<PhoneNumberStatusResult> {\n return this.http.get<PhoneNumberStatusResult>(`/whatsapp/numbers/${id}/status`, opts);\n }\n\n refreshNumbers(opts?: RequestOptions): Promise<WhatsappNumber[]> {\n return this.http.post<WhatsappNumber[]>(\"/whatsapp/numbers/refresh\", undefined, opts);\n }\n\n deleteNumber(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/whatsapp/numbers/${id}`, opts);\n }\n}\n","import type { HttpClient, RequestOptions } from \"../http.js\";\nimport type {\n CreateWhatsappTemplateInput,\n SyncWhatsappTemplatesResult,\n UpdateWhatsappTemplateInput,\n WhatsappTemplate,\n} from \"../types.js\";\n\nexport class WhatsappTemplatesResource {\n constructor(private readonly http: HttpClient) {}\n\n list(opts?: RequestOptions): Promise<WhatsappTemplate[]> {\n return this.http.get<WhatsappTemplate[]>(\"/whatsapp/templates\", opts);\n }\n\n create(input: CreateWhatsappTemplateInput, opts?: RequestOptions): Promise<WhatsappTemplate> {\n return this.http.post<WhatsappTemplate>(\"/whatsapp/templates\", input, opts);\n }\n\n update(id: string, input: UpdateWhatsappTemplateInput, opts?: RequestOptions): Promise<WhatsappTemplate> {\n return this.http.put<WhatsappTemplate>(`/whatsapp/templates/${id}`, input, opts);\n }\n\n sync(opts?: RequestOptions): Promise<SyncWhatsappTemplatesResult> {\n return this.http.post<SyncWhatsappTemplatesResult>(\"/whatsapp/templates/sync\", undefined, opts);\n }\n\n delete(id: string, opts?: RequestOptions): Promise<void> {\n return this.http.delete(`/whatsapp/templates/${id}`, opts);\n }\n}\n","import { HttpClient, type HttpClientOptions } from \"./http.js\";\nimport { DomainsResource } from \"./resources/domains.js\";\nimport { HistoryResource } from \"./resources/history.js\";\nimport { ManagedNumbersResource } from \"./resources/managed-numbers.js\";\nimport { MessagesResource } from \"./resources/messages.js\";\nimport { PlansResource } from \"./resources/plans.js\";\nimport { SmtpResource } from \"./resources/smtp.js\";\nimport { StatisticsResource } from \"./resources/statistics.js\";\nimport { TemplatesResource } from \"./resources/templates.js\";\nimport { WebhooksResource } from \"./resources/webhooks.js\";\nimport { WhatsappNumbersResource } from \"./resources/whatsapp-numbers.js\";\nimport { WhatsappTemplatesResource } from \"./resources/whatsapp-templates.js\";\n\nexport interface PostClientOptions extends Omit<HttpClientOptions, \"baseUrl\"> {\n baseUrl?: string;\n}\n\nexport class PostClient {\n private readonly http: HttpClient;\n\n readonly messages: MessagesResource;\n readonly templates: TemplatesResource;\n readonly whatsappTemplates: WhatsappTemplatesResource;\n readonly whatsappNumbers: WhatsappNumbersResource;\n readonly domains: DomainsResource;\n readonly webhooks: WebhooksResource;\n readonly smtp: SmtpResource;\n readonly plans: PlansResource;\n readonly history: HistoryResource;\n readonly statistics: StatisticsResource;\n readonly managedNumbers: ManagedNumbersResource;\n\n constructor(options: HttpClientOptions) {\n this.http = new HttpClient(options);\n\n this.messages = new MessagesResource(this.http);\n this.templates = new TemplatesResource(this.http);\n this.whatsappTemplates = new WhatsappTemplatesResource(this.http);\n this.whatsappNumbers = new WhatsappNumbersResource(this.http);\n this.domains = new DomainsResource(this.http);\n this.webhooks = new WebhooksResource(this.http);\n this.smtp = new SmtpResource(this.http);\n this.plans = new PlansResource(this.http);\n this.history = new HistoryResource(this.http);\n this.statistics = new StatisticsResource(this.http);\n this.managedNumbers = new ManagedNumbersResource(this.http);\n }\n}\n","import { PostClient } from \"./client.js\";\n\nexport interface ServiceAccountOptions {\n issuerUrl: string;\n clientId: string;\n clientSecret: string;\n}\n\nexport interface GeekappsPostOptions {\n serviceAccount: ServiceAccountOptions;\n baseUrl?: string;\n logLevel?: \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n}\n\ninterface CachedToken {\n value: string;\n expiresAt: number;\n organizationId: string | undefined;\n}\n\nfunction decodeJwtPayload(token: string): Record<string, unknown> {\n try {\n const [, payload] = token.split(\".\");\n if (!payload) return {};\n const json = atob(payload.replace(/-/g, \"+\").replace(/_/g, \"/\"));\n return JSON.parse(json) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\nclass TokenProvider {\n private readonly issuerUrl: string;\n private readonly clientId: string;\n private readonly clientSecret: string;\n private cached: CachedToken | null = null;\n private inflight: Promise<CachedToken> | null = null;\n\n constructor(options: GeekappsPostOptions) {\n this.issuerUrl = options.serviceAccount.issuerUrl.replace(/\\/$/, \"\");\n this.clientId = options.serviceAccount.clientId;\n this.clientSecret = options.serviceAccount.clientSecret;\n }\n\n private async ensureFresh(): Promise<CachedToken> {\n const now = Date.now();\n if (this.cached && this.cached.expiresAt - now > 30_000) return this.cached;\n if (this.inflight) return this.inflight;\n this.inflight = this.fetchToken().finally(() => { this.inflight = null; });\n return this.inflight;\n }\n\n getToken(): Promise<string> {\n return this.ensureFresh().then((c) => c.value);\n }\n\n getOrganizationId(): Promise<string | undefined> {\n return this.ensureFresh().then((c) => c.organizationId);\n }\n\n private async fetchToken(): Promise<CachedToken> {\n const credentials = btoa(`${this.clientId}:${this.clientSecret}`);\n const res = await fetch(`${this.issuerUrl}/auth/token`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${credentials}`,\n },\n body: JSON.stringify({ grant_type: \"service_account\" }),\n cache: \"no-store\" as RequestCache,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new Error(`GeekappsPost auth failed (${res.status}): ${err.error ?? \"unknown error\"}`);\n }\n\n const data = await res.json() as { access_token: string; expires_in?: number };\n const claims = decodeJwtPayload(data.access_token);\n const organizationId =\n typeof claims.organizationId === \"string\" ? claims.organizationId :\n typeof claims.organization_id === \"string\" ? claims.organization_id :\n undefined;\n\n this.cached = {\n value: data.access_token,\n expiresAt: Date.now() + (data.expires_in ?? 420) * 1000,\n organizationId,\n };\n return this.cached;\n }\n}\n\nexport class GeekappsPost extends PostClient {\n constructor(options: GeekappsPostOptions) {\n const baseUrl = options.baseUrl ?? \"https://post-api.geekapps.com.br\";\n const provider = new TokenProvider(options);\n\n super({\n baseUrl,\n token: () => provider.getToken(),\n organizationId: () => provider.getOrganizationId() as Promise<string>,\n });\n }\n}\n"],"mappings":";AAAO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YACkB,QAChB,SACgB,QAChB;AACA,UAAM,SAAS,GAAG,OAAO,KAAK,MAAM,KAAK,OAAO;AAJhC;AAEA;AAGhB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,IAAI,aAAa;AAAE,WAAO,KAAK,WAAW;AAAA,EAAK;AAAA,EAC/C,IAAI,iBAAiB;AAAE,WAAO,KAAK,WAAW;AAAA,EAAK;AAAA,EACnD,IAAI,cAAc;AAAE,WAAO,KAAK,WAAW;AAAA,EAAK;AAAA,EAChD,IAAI,gBAAgB;AAAE,WAAO,KAAK,WAAW;AAAA,EAAK;AAAA,EAClD,IAAI,oBAAoB;AAAE,WAAO,KAAK,WAAW;AAAA,EAAK;AACxD;;;ACAO,IAAM,aAAN,MAAiB;AAAA,EAKtB,YAAY,SAA4B;AACtC,SAAK,UAAU,QAAQ,QAAQ,QAAQ,OAAO,EAAE;AAChD,SAAK,QAAQ,QAAQ;AACrB,SAAK,iBAAiB,QAAQ;AAAA,EAChC;AAAA,EAEA,MAAc,aAAa,UAAoC;AAC7D,QAAI,SAAU,QAAO;AACrB,QAAI,CAAC,KAAK,MAAO,OAAM,IAAI,MAAM,0CAA0C;AAC3E,WAAO,OAAO,KAAK,UAAU,aAAa,MAAM,KAAK,MAAM,IAAI,KAAK;AAAA,EACtE;AAAA,EAEA,MAAc,aAAa,UAAgD;AACzE,QAAI,SAAU,QAAO;AACrB,QAAI,CAAC,KAAK,eAAgB,QAAO;AACjC,WAAO,OAAO,KAAK,mBAAmB,aAClC,MAAM,KAAK,eAAe,IAC1B,KAAK;AAAA,EACX;AAAA,EAEA,MAAM,QACJ,QACA,MACA,MACA,MACY;AACZ,UAAM,QAAQ,MAAM,KAAK,aAAa,MAAM,KAAK;AACjD,UAAM,QAAQ,MAAM,KAAK,aAAa,MAAM,cAAc;AAE1D,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,OAAO,MAAM,IAAI,IAAI;AAAA,MACnD;AAAA,MACA,SAAS;AAAA,QACP,eAAe,UAAU,KAAK;AAAA,QAC9B,GAAI,SAAS,SAAY,EAAE,gBAAgB,mBAAmB,IAAI,CAAC;AAAA,QACnE,GAAI,QAAQ,EAAE,qBAAqB,MAAM,IAAI,CAAC;AAAA,MAChD;AAAA,MACA,GAAI,SAAS,SAAY,EAAE,MAAM,KAAK,UAAU,IAAI,EAAE,IAAI,CAAC;AAAA,MAC3D,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,MAAM,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAC7C,YAAM,IAAI,aAAa,IAAI,QAAQ,IAAI,SAAS,QAAQ,IAAI,MAAM,IAAI,IAAI,MAAM;AAAA,IAClF;AAEA,QAAI,IAAI,WAAW,IAAK,QAAO;AAC/B,WAAO,IAAI,KAAK;AAAA,EAClB;AAAA,EAEA,IAAO,MAAc,MAAuB;AAAE,WAAO,KAAK,QAAW,OAAO,MAAM,QAAW,IAAI;AAAA,EAAG;AAAA,EACpG,KAAQ,MAAc,MAAgB,MAAuB;AAAE,WAAO,KAAK,QAAW,QAAQ,MAAM,MAAM,IAAI;AAAA,EAAG;AAAA,EACjH,IAAO,MAAc,MAAgB,MAAuB;AAAE,WAAO,KAAK,QAAW,OAAO,MAAM,MAAM,IAAI;AAAA,EAAG;AAAA,EAC/G,MAAS,MAAc,MAAgB,MAAuB;AAAE,WAAO,KAAK,QAAW,SAAS,MAAM,MAAM,IAAI;AAAA,EAAG;AAAA,EACnH,OAAiB,MAAc,MAAuB;AAAE,WAAO,KAAK,QAAW,UAAU,MAAM,QAAW,IAAI;AAAA,EAAG;AACnH;;;ACvEO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,KAAK,MAA6C;AAChD,WAAO,KAAK,KAAK,IAAiB,YAAY,IAAI;AAAA,EACpD;AAAA,EAEA,IAAI,IAAY,MAA2C;AACzD,WAAO,KAAK,KAAK,IAAe,YAAY,EAAE,IAAI,IAAI;AAAA,EACxD;AAAA,EAEA,OAAO,OAA0B,MAAoD;AACnF,WAAO,KAAK,KAAK,KAAyB,YAAY,OAAO,IAAI;AAAA,EACnE;AAAA,EAEA,OAAO,IAAY,MAAmE;AACpF,WAAO,KAAK,KAAK,KAAwC,YAAY,EAAE,WAAW,QAAW,IAAI;AAAA,EACnG;AAAA,EAEA,OAAO,IAAY,MAAsC;AACvD,WAAO,KAAK,KAAK,OAAO,YAAY,EAAE,IAAI,IAAI;AAAA,EAChD;AACF;;;ACtBO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,KAAK,QAA4B,MAA6D;AAC5F,UAAM,KAAK,IAAI,gBAAgB;AAC/B,QAAI,QAAQ,KAAM,IAAG,IAAI,QAAQ,OAAO,IAAI;AAC5C,QAAI,QAAQ,OAAQ,IAAG,IAAI,UAAU,OAAO,MAAM;AAClD,QAAI,QAAQ,KAAM,IAAG,IAAI,QAAQ,OAAO,IAAI;AAC5C,QAAI,QAAQ,GAAI,IAAG,IAAI,MAAM,OAAO,EAAE;AACtC,QAAI,QAAQ,SAAS,OAAW,IAAG,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AAClE,QAAI,QAAQ,UAAU,OAAW,IAAG,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACrE,UAAM,QAAQ,GAAG,SAAS;AAC1B,WAAO,KAAK,KAAK,IAAiC,WAAW,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI;AAAA,EAC/F;AAAA,EAEA,IAAI,IAAY,MAAkD;AAChE,WAAO,KAAK,KAAK,IAAsB,YAAY,EAAE,IAAI,IAAI;AAAA,EAC/D;AACF;;;ACDO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,cAAc,MAA4C;AACxD,WAAO,KAAK,KAAK,IAAgB,+BAA+B,IAAI;AAAA,EACtE;AAAA,EAEA,KAAK,MAAiD;AACpD,WAAO,KAAK,KAAK,IAAqB,oBAAoB,IAAI;AAAA,EAChE;AAAA,EAEA,IAAI,IAAY,MAA+C;AAC7D,WAAO,KAAK,KAAK,IAAmB,oBAAoB,EAAE,IAAI,IAAI;AAAA,EACpE;AAAA,EAEA,UAAU,OAAoC,MAA+C;AAC3F,WAAO,KAAK,KAAK,KAAoB,oBAAoB,OAAO,IAAI;AAAA,EACtE;AAAA,EAEA,kBAAkB,IAAY,OAAgC,MAA+C;AAC3G,WAAO,KAAK,KAAK,KAAoB,oBAAoB,EAAE,uBAAuB,OAAO,IAAI;AAAA,EAC/F;AAAA,EAEA,OAAO,IAAY,MAA+C;AAChE,WAAO,KAAK,KAAK,KAAoB,oBAAoB,EAAE,WAAW,QAAW,IAAI;AAAA,EACvF;AACF;;;AC3CO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,KAAK,OAAyB,MAAmD;AAC/E,WAAO,KAAK,KAAK,KAAwB,aAAa,OAAO,IAAI;AAAA,EACnE;AACF;;;ACNO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,IAAI,MAA6C;AAC/C,WAAO,KAAK,KAAK,IAAiB,UAAU,IAAI;AAAA,EAClD;AAAA,EAEA,OAAO,OAAwB,MAAyC;AACtE,WAAO,KAAK,KAAK,IAAa,UAAU,OAAO,IAAI;AAAA,EACrD;AAAA,EAEA,cAAc,MAAiD;AAC7D,WAAO,KAAK,KAAK,IAAqB,oBAAoB,IAAI;AAAA,EAChE;AACF;;;ACdO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,IAAI,MAA4C;AAC9C,WAAO,KAAK,KAAK,IAAgB,gBAAgB,IAAI;AAAA,EACvD;AAAA,EAEA,OAAO,OAA8B,MAA4C;AAC/E,WAAO,KAAK,KAAK,IAAgB,gBAAgB,OAAO,IAAI;AAAA,EAC9D;AAAA,EAEA,OAAO,MAAsC;AAC3C,WAAO,KAAK,KAAK,OAAO,gBAAgB,IAAI;AAAA,EAC9C;AAAA,EAEA,KAAK,IAAY,MAAsE;AACrF,WAAO,KAAK,KAAK,KAA2C,qBAAqB,EAAE,GAAG,GAAG,IAAI;AAAA,EAC/F;AACF;;;AClBO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,IAAI,QAA2B,MAAkD;AAC/E,UAAM,KAAK,IAAI,gBAAgB;AAC/B,QAAI,QAAQ,KAAM,IAAG,IAAI,QAAQ,OAAO,IAAI;AAC5C,QAAI,QAAQ,GAAI,IAAG,IAAI,MAAM,OAAO,EAAE;AACtC,QAAI,QAAQ,QAAS,IAAG,IAAI,WAAW,OAAO,OAAO;AACrD,UAAM,QAAQ,GAAG,SAAS;AAC1B,WAAO,KAAK,KAAK,IAAsB,cAAc,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI;AAAA,EACvF;AACF;;;ACLO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,KAAK,QAAqD,MAAmD;AAC3G,UAAM,KAAK,IAAI,gBAAgB;AAC/B,QAAI,QAAQ,KAAM,IAAG,IAAI,QAAQ,OAAO,IAAI;AAC5C,QAAI,QAAQ,aAAa,OAAW,IAAG,IAAI,YAAY,OAAO,OAAO,QAAQ,CAAC;AAC9E,UAAM,QAAQ,GAAG,SAAS;AAC1B,WAAO,KAAK,KAAK,IAAuB,aAAa,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI;AAAA,EACvF;AAAA,EAEA,IAAI,IAAY,MAAiD;AAC/D,WAAO,KAAK,KAAK,IAAqB,cAAc,EAAE,IAAI,IAAI;AAAA,EAChE;AAAA,EAEA,OAAO,OAA4B,MAAiD;AAClF,WAAO,KAAK,KAAK,KAAsB,cAAc,OAAO,IAAI;AAAA,EAClE;AAAA,EAEA,OAAO,IAAY,OAA4B,MAAiD;AAC9F,WAAO,KAAK,KAAK,IAAqB,cAAc,EAAE,IAAI,OAAO,IAAI;AAAA,EACvE;AAAA,EAEA,UAAU,IAAY,OAAuB,MAAiD;AAC5F,WAAO,KAAK,KAAK,MAAuB,cAAc,EAAE,UAAU,OAAO,IAAI;AAAA,EAC/E;AAAA,EAEA,QAAQ,IAAY,MAAiD;AACnE,WAAO,KAAK,KAAK,KAAsB,cAAc,EAAE,YAAY,QAAW,IAAI;AAAA,EACpF;AAAA,EAEA,OAAO,IAAY,MAAsC;AACvD,WAAO,KAAK,KAAK,OAAO,cAAc,EAAE,IAAI,IAAI;AAAA,EAClD;AACF;;;ACjCO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,KAAK,MAA8C;AACjD,WAAO,KAAK,KAAK,IAAkB,aAAa,IAAI;AAAA,EACtD;AAAA,EAEA,OAAO,OAA2B,MAAsD;AACtF,WAAO,KAAK,KAAK,KAA2B,aAAa,OAAO,IAAI;AAAA,EACtE;AAAA,EAEA,OAAO,IAAY,OAA2B,MAA4C;AACxF,WAAO,KAAK,KAAK,IAAgB,aAAa,EAAE,IAAI,OAAO,IAAI;AAAA,EACjE;AAAA,EAEA,OAAO,IAAY,MAAsC;AACvD,WAAO,KAAK,KAAK,OAAO,aAAa,EAAE,IAAI,IAAI;AAAA,EACjD;AAAA,EAEA,eAAe,IAAY,MAAmD;AAC5E,WAAO,KAAK,KAAK,IAAuB,aAAa,EAAE,eAAe,IAAI;AAAA,EAC5E;AAAA,EAEA,aAAa,IAAY,MAAoD;AAC3E,WAAO,KAAK,KAAK,KAAyB,aAAa,EAAE,kBAAkB,QAAW,IAAI;AAAA,EAC5F;AACF;;;ACvBO,IAAM,0BAAN,MAA8B;AAAA,EACnC,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,UAAU,MAA2C;AACnD,WAAO,KAAK,KAAK,IAAe,mBAAmB,IAAI;AAAA,EACzD;AAAA,EAEA,YAAY,OAAyB,MAAyC;AAC5E,WAAO,KAAK,KAAK,KAAc,2BAA2B,OAAO,IAAI;AAAA,EACvE;AAAA,EAEA,cAAc,IAAY,MAAyC;AACjE,WAAO,KAAK,KAAK,KAAc,mBAAmB,EAAE,cAAc,QAAW,IAAI;AAAA,EACnF;AAAA,EAEA,eAAe,IAAY,MAAsC;AAC/D,WAAO,KAAK,KAAK,OAAO,mBAAmB,EAAE,IAAI,IAAI;AAAA,EACvD;AAAA,EAEA,cAAc,IAAY,MAAkD;AAC1E,WAAO,KAAK,KAAK,IAAsB,mBAAmB,EAAE,WAAW,IAAI;AAAA,EAC7E;AAAA,EAEA,YAAY,MAAkD;AAC5D,WAAO,KAAK,KAAK,IAAsB,qBAAqB,IAAI;AAAA,EAClE;AAAA,EAEA,cAAc,OAAmC,MAAgD;AAC/F,WAAO,KAAK,KAAK,KAAqB,6BAA6B,OAAO,IAAI;AAAA,EAChF;AAAA,EAEA,eAAe,OAAoC,MAAgD;AACjG,WAAO,KAAK,KAAK,KAAqB,qBAAqB,OAAO,IAAI;AAAA,EACxE;AAAA,EAEA,WAAW,IAAY,MAAc,MAAgD;AACnF,WAAO,KAAK,KAAK,KAAqB,qBAAqB,EAAE,gBAAgB,EAAE,KAAK,GAAG,IAAI;AAAA,EAC7F;AAAA,EAEA,WAAW,IAAY,MAAsC;AAC3D,WAAO,KAAK,KAAK,KAAK,qBAAqB,EAAE,gBAAgB,QAAW,IAAI;AAAA,EAC9E;AAAA,EAEA,WAAW,IAAY,MAAuD;AAC5E,WAAO,KAAK,KAAK,IAA2B,qBAAqB,EAAE,YAAY,IAAI;AAAA,EACrF;AAAA,EAEA,cAAc,IAAY,OAAmC,MAAuD;AAClH,WAAO,KAAK,KAAK,MAA6B,qBAAqB,EAAE,YAAY,OAAO,IAAI;AAAA,EAC9F;AAAA,EAEA,kBAAkB,IAAY,aAAqB,MAAgD;AACjG,WAAO,KAAK,KAAK,MAAsB,qBAAqB,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;AAAA,EACzF;AAAA,EAEA,UAAU,IAAY,MAAyD;AAC7E,WAAO,KAAK,KAAK,IAA6B,qBAAqB,EAAE,WAAW,IAAI;AAAA,EACtF;AAAA,EAEA,eAAe,MAAkD;AAC/D,WAAO,KAAK,KAAK,KAAuB,6BAA6B,QAAW,IAAI;AAAA,EACtF;AAAA,EAEA,aAAa,IAAY,MAAsC;AAC7D,WAAO,KAAK,KAAK,OAAO,qBAAqB,EAAE,IAAI,IAAI;AAAA,EACzD;AACF;;;ACvEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAEhD,KAAK,MAAoD;AACvD,WAAO,KAAK,KAAK,IAAwB,uBAAuB,IAAI;AAAA,EACtE;AAAA,EAEA,OAAO,OAAoC,MAAkD;AAC3F,WAAO,KAAK,KAAK,KAAuB,uBAAuB,OAAO,IAAI;AAAA,EAC5E;AAAA,EAEA,OAAO,IAAY,OAAoC,MAAkD;AACvG,WAAO,KAAK,KAAK,IAAsB,uBAAuB,EAAE,IAAI,OAAO,IAAI;AAAA,EACjF;AAAA,EAEA,KAAK,MAA6D;AAChE,WAAO,KAAK,KAAK,KAAkC,4BAA4B,QAAW,IAAI;AAAA,EAChG;AAAA,EAEA,OAAO,IAAY,MAAsC;AACvD,WAAO,KAAK,KAAK,OAAO,uBAAuB,EAAE,IAAI,IAAI;AAAA,EAC3D;AACF;;;ACbO,IAAM,aAAN,MAAiB;AAAA,EAetB,YAAY,SAA4B;AACtC,SAAK,OAAO,IAAI,WAAW,OAAO;AAElC,SAAK,WAAW,IAAI,iBAAiB,KAAK,IAAI;AAC9C,SAAK,YAAY,IAAI,kBAAkB,KAAK,IAAI;AAChD,SAAK,oBAAoB,IAAI,0BAA0B,KAAK,IAAI;AAChE,SAAK,kBAAkB,IAAI,wBAAwB,KAAK,IAAI;AAC5D,SAAK,UAAU,IAAI,gBAAgB,KAAK,IAAI;AAC5C,SAAK,WAAW,IAAI,iBAAiB,KAAK,IAAI;AAC9C,SAAK,OAAO,IAAI,aAAa,KAAK,IAAI;AACtC,SAAK,QAAQ,IAAI,cAAc,KAAK,IAAI;AACxC,SAAK,UAAU,IAAI,gBAAgB,KAAK,IAAI;AAC5C,SAAK,aAAa,IAAI,mBAAmB,KAAK,IAAI;AAClD,SAAK,iBAAiB,IAAI,uBAAuB,KAAK,IAAI;AAAA,EAC5D;AACF;;;AC3BA,SAAS,iBAAiB,OAAwC;AAChE,MAAI;AACF,UAAM,CAAC,EAAE,OAAO,IAAI,MAAM,MAAM,GAAG;AACnC,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,UAAM,OAAO,KAAK,QAAQ,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG,CAAC;AAC/D,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,IAAM,gBAAN,MAAoB;AAAA,EAOlB,YAAY,SAA8B;AAH1C,SAAQ,SAA6B;AACrC,SAAQ,WAAwC;AAG9C,SAAK,YAAY,QAAQ,eAAe,UAAU,QAAQ,OAAO,EAAE;AACnE,SAAK,WAAW,QAAQ,eAAe;AACvC,SAAK,eAAe,QAAQ,eAAe;AAAA,EAC7C;AAAA,EAEA,MAAc,cAAoC;AAChD,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,KAAK,UAAU,KAAK,OAAO,YAAY,MAAM,IAAQ,QAAO,KAAK;AACrE,QAAI,KAAK,SAAU,QAAO,KAAK;AAC/B,SAAK,WAAW,KAAK,WAAW,EAAE,QAAQ,MAAM;AAAE,WAAK,WAAW;AAAA,IAAM,CAAC;AACzE,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAA4B;AAC1B,WAAO,KAAK,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK;AAAA,EAC/C;AAAA,EAEA,oBAAiD;AAC/C,WAAO,KAAK,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,cAAc;AAAA,EACxD;AAAA,EAEA,MAAc,aAAmC;AAC/C,UAAM,cAAc,KAAK,GAAG,KAAK,QAAQ,IAAI,KAAK,YAAY,EAAE;AAChE,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,SAAS,eAAe;AAAA,MACtD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,SAAS,WAAW;AAAA,MACrC;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,YAAY,kBAAkB,CAAC;AAAA,MACtD,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,MAAM,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAC7C,YAAM,IAAI,MAAM,6BAA6B,IAAI,MAAM,MAAM,IAAI,SAAS,eAAe,EAAE;AAAA,IAC7F;AAEA,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAM,SAAS,iBAAiB,KAAK,YAAY;AACjD,UAAM,iBACJ,OAAO,OAAO,mBAAmB,WAAW,OAAO,iBACnD,OAAO,OAAO,oBAAoB,WAAW,OAAO,kBACpD;AAEF,SAAK,SAAS;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,WAAW,KAAK,IAAI,KAAK,KAAK,cAAc,OAAO;AAAA,MACnD;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACF;AAEO,IAAM,eAAN,cAA2B,WAAW;AAAA,EAC3C,YAAY,SAA8B;AACxC,UAAM,UAAU,QAAQ,WAAW;AACnC,UAAM,WAAW,IAAI,cAAc,OAAO;AAE1C,UAAM;AAAA,MACJ;AAAA,MACA,OAAO,MAAM,SAAS,SAAS;AAAA,MAC/B,gBAAgB,MAAM,SAAS,kBAAkB;AAAA,IACnD,CAAC;AAAA,EACH;AACF;","names":[]}
|
package/package.json
CHANGED
package/src/geekapps-post.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { PostClient } from "./client.js";
|
|
2
2
|
|
|
3
|
-
export interface
|
|
3
|
+
export interface ServiceAccountOptions {
|
|
4
4
|
issuerUrl: string;
|
|
5
5
|
clientId: string;
|
|
6
6
|
clientSecret: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface GeekappsPostOptions {
|
|
10
|
+
serviceAccount: ServiceAccountOptions;
|
|
7
11
|
baseUrl?: string;
|
|
12
|
+
logLevel?: "trace" | "debug" | "info" | "warn" | "error" | "silent";
|
|
8
13
|
}
|
|
9
14
|
|
|
10
15
|
interface CachedToken {
|
|
@@ -32,9 +37,9 @@ class TokenProvider {
|
|
|
32
37
|
private inflight: Promise<CachedToken> | null = null;
|
|
33
38
|
|
|
34
39
|
constructor(options: GeekappsPostOptions) {
|
|
35
|
-
this.issuerUrl = options.issuerUrl.replace(/\/$/, "");
|
|
36
|
-
this.clientId = options.clientId;
|
|
37
|
-
this.clientSecret = options.clientSecret;
|
|
40
|
+
this.issuerUrl = options.serviceAccount.issuerUrl.replace(/\/$/, "");
|
|
41
|
+
this.clientId = options.serviceAccount.clientId;
|
|
42
|
+
this.clientSecret = options.serviceAccount.clientSecret;
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
private async ensureFresh(): Promise<CachedToken> {
|