@geekapps/post-fastify 0.1.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.
Files changed (96) hide show
  1. package/dist/client.d.ts +31 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +29 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/errors.d.ts +11 -0
  6. package/dist/errors.d.ts.map +1 -0
  7. package/dist/errors.js +24 -0
  8. package/dist/errors.js.map +1 -0
  9. package/dist/http.d.ts +21 -0
  10. package/dist/http.d.ts.map +1 -0
  11. package/dist/http.js +56 -0
  12. package/dist/http.js.map +1 -0
  13. package/dist/index.d.ts +21 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +17 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/nextjs.d.ts +22 -0
  18. package/dist/nextjs.d.ts.map +1 -0
  19. package/dist/nextjs.js +15 -0
  20. package/dist/nextjs.js.map +1 -0
  21. package/dist/plugin.d.ts +19 -0
  22. package/dist/plugin.d.ts.map +1 -0
  23. package/dist/plugin.js +17 -0
  24. package/dist/plugin.js.map +1 -0
  25. package/dist/resources/domains.d.ts +14 -0
  26. package/dist/resources/domains.d.ts.map +1 -0
  27. package/dist/resources/domains.js +21 -0
  28. package/dist/resources/domains.js.map +1 -0
  29. package/dist/resources/history.d.ts +9 -0
  30. package/dist/resources/history.d.ts.map +1 -0
  31. package/dist/resources/history.js +26 -0
  32. package/dist/resources/history.js.map +1 -0
  33. package/dist/resources/managed-numbers.d.ts +28 -0
  34. package/dist/resources/managed-numbers.d.ts.map +1 -0
  35. package/dist/resources/managed-numbers.js +24 -0
  36. package/dist/resources/managed-numbers.js.map +1 -0
  37. package/dist/resources/messages.d.ts +8 -0
  38. package/dist/resources/messages.d.ts.map +1 -0
  39. package/dist/resources/messages.js +9 -0
  40. package/dist/resources/messages.js.map +1 -0
  41. package/dist/resources/plans.d.ts +10 -0
  42. package/dist/resources/plans.d.ts.map +1 -0
  43. package/dist/resources/plans.js +15 -0
  44. package/dist/resources/plans.js.map +1 -0
  45. package/dist/resources/smtp.d.ts +14 -0
  46. package/dist/resources/smtp.d.ts.map +1 -0
  47. package/dist/resources/smtp.js +18 -0
  48. package/dist/resources/smtp.js.map +1 -0
  49. package/dist/resources/statistics.d.ts +8 -0
  50. package/dist/resources/statistics.d.ts.map +1 -0
  51. package/dist/resources/statistics.js +17 -0
  52. package/dist/resources/statistics.js.map +1 -0
  53. package/dist/resources/templates.d.ts +17 -0
  54. package/dist/resources/templates.d.ts.map +1 -0
  55. package/dist/resources/templates.js +33 -0
  56. package/dist/resources/templates.js.map +1 -0
  57. package/dist/resources/webhooks.d.ts +13 -0
  58. package/dist/resources/webhooks.d.ts.map +1 -0
  59. package/dist/resources/webhooks.js +24 -0
  60. package/dist/resources/webhooks.js.map +1 -0
  61. package/dist/resources/whatsapp-numbers.d.ts +23 -0
  62. package/dist/resources/whatsapp-numbers.d.ts.map +1 -0
  63. package/dist/resources/whatsapp-numbers.js +56 -0
  64. package/dist/resources/whatsapp-numbers.js.map +1 -0
  65. package/dist/resources/whatsapp-templates.d.ts +12 -0
  66. package/dist/resources/whatsapp-templates.d.ts.map +1 -0
  67. package/dist/resources/whatsapp-templates.js +21 -0
  68. package/dist/resources/whatsapp-templates.js.map +1 -0
  69. package/dist/service-account.d.ts +47 -0
  70. package/dist/service-account.d.ts.map +1 -0
  71. package/dist/service-account.js +76 -0
  72. package/dist/service-account.js.map +1 -0
  73. package/dist/types.d.ts +346 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +3 -0
  76. package/dist/types.js.map +1 -0
  77. package/package.json +27 -0
  78. package/src/client.ts +49 -0
  79. package/src/errors.ts +30 -0
  80. package/src/http.ts +88 -0
  81. package/src/index.ts +79 -0
  82. package/src/plugin.ts +39 -0
  83. package/src/resources/domains.ts +26 -0
  84. package/src/resources/history.ts +22 -0
  85. package/src/resources/managed-numbers.ts +47 -0
  86. package/src/resources/messages.ts +10 -0
  87. package/src/resources/plans.ts +18 -0
  88. package/src/resources/smtp.ts +22 -0
  89. package/src/resources/statistics.ts +15 -0
  90. package/src/resources/templates.ts +44 -0
  91. package/src/resources/webhooks.ts +37 -0
  92. package/src/resources/whatsapp-numbers.ts +84 -0
  93. package/src/resources/whatsapp-templates.ts +31 -0
  94. package/src/service-account.ts +112 -0
  95. package/src/types.ts +418 -0
  96. package/tsconfig.json +18 -0
@@ -0,0 +1,346 @@
1
+ export type MessageType = "email" | "sms" | "whatsapp";
2
+ export type MessageStatus = "queued" | "sent" | "delivered" | "failed" | "bounced" | "opened" | "clicked";
3
+ export type DomainType = "sending" | "tracking";
4
+ export type DomainStatus = "pending" | "verified" | "failed";
5
+ export type PlanTier = "free" | "starter" | "pro" | "enterprise";
6
+ export type WhatsappTemplateCategory = "MARKETING" | "UTILITY" | "AUTHENTICATION";
7
+ export type WhatsappTemplateStatus = "APPROVED" | "PENDING" | "REJECTED" | "DISABLED" | "PAUSED";
8
+ export type WebhookEvent = "message_sent" | "message_delivered" | "message_failed" | "message_bounced" | "message_opened" | "message_clicked";
9
+ export type WabaStatus = "active" | "token_expired" | "disconnected";
10
+ export type WhatsappNumberStatus = "pending_verification" | "active" | "inactive" | "failed";
11
+ export type ManagedNumberStatus = "provisioning" | "active" | "waiting_whatsapp_verification" | "whatsapp_active" | "suspended" | "canceled" | "failed";
12
+ export interface MessageTemplate {
13
+ id: string;
14
+ orgId: string;
15
+ name: string;
16
+ type: MessageType;
17
+ subject: string | null;
18
+ body: string;
19
+ variables: string[];
20
+ description: string | null;
21
+ isActive: boolean;
22
+ draftBody: string | null;
23
+ draftSubject: string | null;
24
+ draftName: string | null;
25
+ draftBlocks: unknown[] | null;
26
+ draftUpdatedAt: string | null;
27
+ metaTemplateId: string | null;
28
+ metaStatus: string | null;
29
+ metaWabaId: string | null;
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ }
33
+ export interface WhatsappTemplate {
34
+ id: string;
35
+ name: string;
36
+ templateName: string;
37
+ category: WhatsappTemplateCategory;
38
+ language: string;
39
+ header: string | null;
40
+ footer: string | null;
41
+ body: string;
42
+ variables: string[];
43
+ isActive: boolean;
44
+ metaTemplateId: string | null;
45
+ metaStatus: string | null;
46
+ metaWabaId: string | null;
47
+ createdAt: string;
48
+ updatedAt: string;
49
+ }
50
+ export interface MessageLog {
51
+ id: string;
52
+ type: MessageType;
53
+ status: MessageStatus;
54
+ from: string | null;
55
+ to: string;
56
+ subject: string | null;
57
+ templateId: string | null;
58
+ provider: string | null;
59
+ externalId: string | null;
60
+ error: string | null;
61
+ sentAt: string | null;
62
+ deliveredAt: string | null;
63
+ openedAt: string | null;
64
+ clickedAt: string | null;
65
+ createdAt: string;
66
+ }
67
+ export interface MessageLogDetail extends MessageLog {
68
+ body: string;
69
+ variables: Array<{
70
+ name: string;
71
+ value: string;
72
+ }> | null;
73
+ template: MessageTemplate | null;
74
+ }
75
+ export interface OrgDomain {
76
+ id: string;
77
+ domain: string;
78
+ type: DomainType;
79
+ status: DomainStatus;
80
+ dkimSelector: string | null;
81
+ dkimPublicKey: string | null;
82
+ spfRecord: string | null;
83
+ trackingCname: string | null;
84
+ verifiedAt: string | null;
85
+ createdAt: string;
86
+ }
87
+ export interface DnsRecord {
88
+ type: "TXT" | "CNAME";
89
+ name: string;
90
+ value: string | null | undefined;
91
+ }
92
+ export interface OrgWebhook {
93
+ id: string;
94
+ url: string;
95
+ events: WebhookEvent[];
96
+ isActive: boolean;
97
+ createdAt: string;
98
+ updatedAt: string;
99
+ }
100
+ export interface OrgWebhookWithSecret extends OrgWebhook {
101
+ secret: string;
102
+ }
103
+ export interface WebhookDelivery {
104
+ id: string;
105
+ webhookId: string;
106
+ event: string;
107
+ statusCode: number | null;
108
+ response: string | null;
109
+ success: boolean;
110
+ createdAt: string;
111
+ }
112
+ export interface SmtpConfig {
113
+ id: string;
114
+ host: string;
115
+ port: number;
116
+ secure: boolean;
117
+ user: string;
118
+ createdAt: string;
119
+ updatedAt: string;
120
+ }
121
+ export interface OrgPlan {
122
+ tier: PlanTier;
123
+ monthlyEmails: number;
124
+ monthlySms: number;
125
+ monthlyWhatsapp: number;
126
+ }
127
+ export interface OrgUsage {
128
+ email: number;
129
+ sms: number;
130
+ whatsapp: number;
131
+ period: string;
132
+ }
133
+ export interface OrgWaba {
134
+ id: string;
135
+ orgId: string;
136
+ wabaId: string;
137
+ tokenExpiresAt: string | null;
138
+ businessName: string | null;
139
+ status: WabaStatus;
140
+ connectedAt: string;
141
+ updatedAt: string;
142
+ }
143
+ export interface WhatsappNumberProfile {
144
+ about: string | null;
145
+ description: string | null;
146
+ email: string | null;
147
+ websites: string[];
148
+ vertical: string | null;
149
+ profilePictureUrl: string | null;
150
+ }
151
+ export interface WhatsappNumber {
152
+ id: string;
153
+ orgId: string;
154
+ orgWabaId: string;
155
+ displayName: string;
156
+ phoneNumber: string;
157
+ phoneNumberId: string;
158
+ mode: string;
159
+ status: WhatsappNumberStatus;
160
+ qualityRating: string | null;
161
+ nameStatus: string | null;
162
+ profile: WhatsappNumberProfile;
163
+ createdAt: string;
164
+ updatedAt: string;
165
+ }
166
+ export interface ManagedNumber {
167
+ id: string;
168
+ orgId: string;
169
+ phoneNumber: string;
170
+ areaCode: string;
171
+ status: ManagedNumberStatus;
172
+ salvyId: string | null;
173
+ metaPhoneNumberId: string | null;
174
+ createdAt: string;
175
+ updatedAt: string;
176
+ }
177
+ export interface AreaCode {
178
+ areaCode: string;
179
+ state: string;
180
+ available: boolean;
181
+ }
182
+ export interface SendMessageInput {
183
+ type: MessageType;
184
+ to: string;
185
+ from?: string;
186
+ title?: string;
187
+ preview?: string;
188
+ template?: string;
189
+ subject?: string;
190
+ body?: string;
191
+ variables?: Array<{
192
+ name: string;
193
+ value: string;
194
+ }>;
195
+ }
196
+ export interface CreateTemplateInput {
197
+ name: string;
198
+ type: MessageType;
199
+ subject?: string;
200
+ body: string;
201
+ description?: string;
202
+ isActive?: boolean;
203
+ }
204
+ export interface UpdateTemplateInput extends Partial<CreateTemplateInput> {
205
+ }
206
+ export interface SaveDraftInput {
207
+ draftBody: string;
208
+ draftSubject?: string;
209
+ draftName?: string;
210
+ draftBlocks?: unknown[];
211
+ }
212
+ export interface CreateWhatsappTemplateInput {
213
+ name: string;
214
+ templateName: string;
215
+ category: WhatsappTemplateCategory;
216
+ language: string;
217
+ body: string;
218
+ header?: string;
219
+ footer?: string;
220
+ description?: string;
221
+ }
222
+ export interface UpdateWhatsappTemplateInput extends Partial<CreateWhatsappTemplateInput> {
223
+ }
224
+ export interface CreateDomainInput {
225
+ domain: string;
226
+ type: DomainType;
227
+ }
228
+ export interface CreateWebhookInput {
229
+ url: string;
230
+ events: WebhookEvent[];
231
+ isActive?: boolean;
232
+ }
233
+ export interface UpdateWebhookInput extends Partial<CreateWebhookInput> {
234
+ }
235
+ export interface UpsertSmtpConfigInput {
236
+ host: string;
237
+ port: number;
238
+ secure?: boolean;
239
+ user: string;
240
+ password: string;
241
+ }
242
+ export interface UpdatePlanInput {
243
+ tier?: PlanTier;
244
+ monthlyEmails?: number;
245
+ monthlySms?: number;
246
+ monthlyWhatsapp?: number;
247
+ }
248
+ export interface ListHistoryParams {
249
+ type?: MessageType;
250
+ status?: MessageStatus;
251
+ from?: string;
252
+ to?: string;
253
+ page?: number;
254
+ limit?: number;
255
+ }
256
+ export interface StatisticsParams {
257
+ from?: string;
258
+ to?: string;
259
+ groupBy?: "day" | "month";
260
+ }
261
+ export interface ConnectWabaInput {
262
+ code: string;
263
+ }
264
+ export interface ConnectWhatsappNumberInput {
265
+ phoneNumberId: string;
266
+ wabaId: string;
267
+ }
268
+ export interface RegisterWhatsappNumberInput {
269
+ displayName: string;
270
+ phoneNumber: string;
271
+ method?: "SMS" | "VOICE";
272
+ wabaId?: string;
273
+ }
274
+ export interface UpdateWhatsappProfileInput {
275
+ about?: string;
276
+ description?: string;
277
+ email?: string;
278
+ websites?: string[];
279
+ vertical?: string;
280
+ }
281
+ export interface ProvisionManagedNumberInput {
282
+ areaCode: string;
283
+ }
284
+ export interface SendMessageResult {
285
+ id: string;
286
+ status: MessageStatus;
287
+ }
288
+ export interface PaginatedResult<T> {
289
+ data: T[];
290
+ pagination: {
291
+ total: number;
292
+ page: number;
293
+ limit: number;
294
+ pages: number;
295
+ };
296
+ }
297
+ export interface StatisticsResult {
298
+ totals: Record<string, {
299
+ sent: number;
300
+ delivered: number;
301
+ failed: number;
302
+ opened: number;
303
+ clicked: number;
304
+ }>;
305
+ currentPeriod: {
306
+ period: string;
307
+ usage: {
308
+ email: number;
309
+ sms: number;
310
+ whatsapp: number;
311
+ };
312
+ limits: {
313
+ email: number;
314
+ sms: number;
315
+ whatsapp: number;
316
+ };
317
+ };
318
+ }
319
+ export interface PlansResult {
320
+ plan: OrgPlan;
321
+ usage: OrgUsage;
322
+ }
323
+ export interface AvailablePlan extends OrgPlan {
324
+ tier: PlanTier;
325
+ }
326
+ export interface CreateDomainResult {
327
+ id: string;
328
+ domain: string;
329
+ type: DomainType;
330
+ status: DomainStatus;
331
+ dnsRecords: DnsRecord[];
332
+ }
333
+ export interface SyncWhatsappTemplatesResult {
334
+ created: number;
335
+ skipped: number;
336
+ }
337
+ export interface RotateSecretResult {
338
+ secret: string;
339
+ }
340
+ export interface WabaHealthResult {
341
+ health: unknown;
342
+ }
343
+ export interface PhoneNumberStatusResult {
344
+ status: unknown;
345
+ }
346
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // ─── Enums ────────────────────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iFAAiF"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@geekapps/post-fastify",
3
+ "version": "0.1.0",
4
+ "description": "Geekapps Post SDK for Fastify",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsc --watch"
18
+ },
19
+ "devDependencies": {
20
+ "fastify": "^5.8.5",
21
+ "fastify-plugin": "^5.1.0",
22
+ "typescript": "^5.9.3"
23
+ },
24
+ "peerDependencies": {
25
+ "fastify": ">=4.0.0"
26
+ }
27
+ }
package/src/client.ts ADDED
@@ -0,0 +1,49 @@
1
+ import { HttpClient, type HttpClientOptions } from "./http.js";
2
+ import { DomainsResource } from "./resources/domains.js";
3
+ import { HistoryResource } from "./resources/history.js";
4
+ import { ManagedNumbersResource } from "./resources/managed-numbers.js";
5
+ import { MessagesResource } from "./resources/messages.js";
6
+ import { PlansResource } from "./resources/plans.js";
7
+ import { SmtpResource } from "./resources/smtp.js";
8
+ import { StatisticsResource } from "./resources/statistics.js";
9
+ import { TemplatesResource } from "./resources/templates.js";
10
+ import { WebhooksResource } from "./resources/webhooks.js";
11
+ import { WhatsappNumbersResource } from "./resources/whatsapp-numbers.js";
12
+ import { WhatsappTemplatesResource } from "./resources/whatsapp-templates.js";
13
+
14
+ export interface PostClientOptions
15
+ extends Omit<HttpClientOptions, "baseUrl"> {
16
+ baseUrl?: string;
17
+ }
18
+
19
+ export class PostClient {
20
+ private readonly http: HttpClient;
21
+
22
+ readonly messages: MessagesResource;
23
+ readonly templates: TemplatesResource;
24
+ readonly whatsappTemplates: WhatsappTemplatesResource;
25
+ readonly whatsappNumbers: WhatsappNumbersResource;
26
+ readonly domains: DomainsResource;
27
+ readonly webhooks: WebhooksResource;
28
+ readonly smtp: SmtpResource;
29
+ readonly plans: PlansResource;
30
+ readonly history: HistoryResource;
31
+ readonly statistics: StatisticsResource;
32
+ readonly managedNumbers: ManagedNumbersResource;
33
+
34
+ constructor(options: HttpClientOptions) {
35
+ this.http = new HttpClient(options);
36
+
37
+ this.messages = new MessagesResource(this.http);
38
+ this.templates = new TemplatesResource(this.http);
39
+ this.whatsappTemplates = new WhatsappTemplatesResource(this.http);
40
+ this.whatsappNumbers = new WhatsappNumbersResource(this.http);
41
+ this.domains = new DomainsResource(this.http);
42
+ this.webhooks = new WebhooksResource(this.http);
43
+ this.smtp = new SmtpResource(this.http);
44
+ this.plans = new PlansResource(this.http);
45
+ this.history = new HistoryResource(this.http);
46
+ this.statistics = new StatisticsResource(this.http);
47
+ this.managedNumbers = new ManagedNumbersResource(this.http);
48
+ }
49
+ }
package/src/errors.ts ADDED
@@ -0,0 +1,30 @@
1
+ export class PostApiError extends Error {
2
+ constructor(
3
+ public readonly status: number,
4
+ message: string,
5
+ public readonly detail?: string,
6
+ ) {
7
+ super(detail ? `${message}: ${detail}` : message);
8
+ this.name = "PostApiError";
9
+ }
10
+
11
+ get isNotFound() {
12
+ return this.status === 404;
13
+ }
14
+
15
+ get isUnauthorized() {
16
+ return this.status === 401;
17
+ }
18
+
19
+ get isForbidden() {
20
+ return this.status === 403;
21
+ }
22
+
23
+ get isRateLimited() {
24
+ return this.status === 429;
25
+ }
26
+
27
+ get isValidationError() {
28
+ return this.status === 400;
29
+ }
30
+ }
package/src/http.ts ADDED
@@ -0,0 +1,88 @@
1
+ import { PostApiError } from "./errors.js";
2
+
3
+ export type TokenResolver = string | (() => string | Promise<string>);
4
+
5
+ export interface HttpClientOptions {
6
+ baseUrl: string;
7
+ token: TokenResolver;
8
+ organizationId?: string | (() => string | Promise<string>);
9
+ }
10
+
11
+ export class HttpClient {
12
+ private readonly baseUrl: string;
13
+ private readonly token: TokenResolver;
14
+ private readonly organizationId?: string | (() => string | Promise<string>);
15
+
16
+ constructor(options: HttpClientOptions) {
17
+ this.baseUrl = options.baseUrl.replace(/\/$/, "");
18
+ this.token = options.token;
19
+ this.organizationId = options.organizationId;
20
+ }
21
+
22
+ private async resolveToken(): Promise<string> {
23
+ return typeof this.token === "function" ? await this.token() : this.token;
24
+ }
25
+
26
+ private async resolveOrgId(): Promise<string | undefined> {
27
+ if (!this.organizationId) return undefined;
28
+ return typeof this.organizationId === "function"
29
+ ? await this.organizationId()
30
+ : this.organizationId;
31
+ }
32
+
33
+ async request<T = unknown>(
34
+ method: string,
35
+ path: string,
36
+ body?: unknown,
37
+ ): Promise<T> {
38
+ const token = await this.resolveToken();
39
+ const orgId = await this.resolveOrgId();
40
+
41
+ const res = await fetch(`${this.baseUrl}/v1${path}`, {
42
+ method,
43
+ headers: {
44
+ Authorization: `Bearer ${token}`,
45
+ ...(body !== undefined ? { "Content-Type": "application/json" } : {}),
46
+ ...(orgId ? { "X-Organization-Id": orgId } : {}),
47
+ },
48
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ cache: "no-store" as any,
51
+ });
52
+
53
+ if (!res.ok) {
54
+ const err = await res.json().catch(() => ({})) as {
55
+ error?: string;
56
+ detail?: string;
57
+ };
58
+ throw new PostApiError(
59
+ res.status,
60
+ err.error ?? `HTTP ${res.status}`,
61
+ err.detail,
62
+ );
63
+ }
64
+
65
+ if (res.status === 204) return undefined as T;
66
+ return res.json() as Promise<T>;
67
+ }
68
+
69
+ get<T>(path: string) {
70
+ return this.request<T>("GET", path);
71
+ }
72
+
73
+ post<T>(path: string, body?: unknown) {
74
+ return this.request<T>("POST", path, body);
75
+ }
76
+
77
+ put<T>(path: string, body?: unknown) {
78
+ return this.request<T>("PUT", path, body);
79
+ }
80
+
81
+ patch<T>(path: string, body?: unknown) {
82
+ return this.request<T>("PATCH", path, body);
83
+ }
84
+
85
+ delete<T = void>(path: string) {
86
+ return this.request<T>("DELETE", path);
87
+ }
88
+ }
package/src/index.ts ADDED
@@ -0,0 +1,79 @@
1
+ export { PostClient } from "./client.js";
2
+ export { PostApiError } from "./errors.js";
3
+ export { HttpClient } from "./http.js";
4
+ export type { HttpClientOptions, TokenResolver } from "./http.js";
5
+ export { default as postPlugin } from "./plugin.js";
6
+ export type { PostPluginOptions } from "./plugin.js";
7
+
8
+ export { ServiceAccountTokenProvider, createServiceAccountToken } from "./service-account.js";
9
+ export type { ServiceAccountOptions } from "./service-account.js";
10
+
11
+ export { DomainsResource } from "./resources/domains.js";
12
+ export { HistoryResource } from "./resources/history.js";
13
+ export { ManagedNumbersResource } from "./resources/managed-numbers.js";
14
+ export { MessagesResource } from "./resources/messages.js";
15
+ export { PlansResource } from "./resources/plans.js";
16
+ export { SmtpResource } from "./resources/smtp.js";
17
+ export { StatisticsResource } from "./resources/statistics.js";
18
+ export { TemplatesResource } from "./resources/templates.js";
19
+ export { WebhooksResource } from "./resources/webhooks.js";
20
+ export { WhatsappNumbersResource } from "./resources/whatsapp-numbers.js";
21
+ export { WhatsappTemplatesResource } from "./resources/whatsapp-templates.js";
22
+
23
+ export type {
24
+ AreaCode,
25
+ AvailablePlan,
26
+ ConnectWabaInput,
27
+ ConnectWhatsappNumberInput,
28
+ CreateDomainInput,
29
+ CreateDomainResult,
30
+ CreateTemplateInput,
31
+ CreateWebhookInput,
32
+ CreateWhatsappTemplateInput,
33
+ DnsRecord,
34
+ DomainStatus,
35
+ DomainType,
36
+ ListHistoryParams,
37
+ ManagedNumber,
38
+ ManagedNumberStatus,
39
+ MessageLog,
40
+ MessageLogDetail,
41
+ MessageStatus,
42
+ MessageTemplate,
43
+ MessageType,
44
+ OrgDomain,
45
+ OrgPlan,
46
+ OrgUsage,
47
+ OrgWaba,
48
+ OrgWebhook,
49
+ OrgWebhookWithSecret,
50
+ PaginatedResult,
51
+ PhoneNumberStatusResult,
52
+
53
+ PlanTier,
54
+ PlansResult,
55
+ RegisterWhatsappNumberInput,
56
+ RotateSecretResult,
57
+ SaveDraftInput,
58
+ SendMessageInput,
59
+ SendMessageResult,
60
+ SmtpConfig,
61
+ StatisticsParams,
62
+ StatisticsResult,
63
+ SyncWhatsappTemplatesResult,
64
+ UpdatePlanInput,
65
+ UpdateTemplateInput,
66
+ UpdateWebhookInput,
67
+ UpdateWhatsappProfileInput,
68
+ UpdateWhatsappTemplateInput,
69
+ UpsertSmtpConfigInput,
70
+ WabaStatus,
71
+ WebhookDelivery,
72
+ WebhookEvent,
73
+ WhatsappNumber,
74
+ WhatsappNumberProfile,
75
+ WhatsappNumberStatus,
76
+ WhatsappTemplate,
77
+ WhatsappTemplateCategory,
78
+ WhatsappTemplateStatus,
79
+ } from "./types.js";
package/src/plugin.ts ADDED
@@ -0,0 +1,39 @@
1
+ import type { FastifyInstance, FastifyPluginAsync } from "fastify";
2
+ import fp from "fastify-plugin";
3
+ import { PostClient } from "./client.js";
4
+ import { ServiceAccountTokenProvider, type ServiceAccountOptions } from "./service-account.js";
5
+
6
+ export interface PostPluginOptions {
7
+ /** Geekapps Post API base URL */
8
+ baseUrl: string;
9
+ /** Organization ID to use on all requests */
10
+ organizationId: string;
11
+ /** Service account credentials — required */
12
+ serviceAccount: ServiceAccountOptions;
13
+ }
14
+
15
+ declare module "fastify" {
16
+ interface FastifyInstance {
17
+ postClient: PostClient;
18
+ }
19
+ }
20
+
21
+ const postPlugin: FastifyPluginAsync<PostPluginOptions> = async (
22
+ fastify: FastifyInstance,
23
+ options: PostPluginOptions,
24
+ ) => {
25
+ const tokenProvider = new ServiceAccountTokenProvider(options.serviceAccount);
26
+
27
+ const client = new PostClient({
28
+ baseUrl: options.baseUrl,
29
+ token: () => tokenProvider.getToken(),
30
+ organizationId: options.organizationId,
31
+ });
32
+
33
+ fastify.decorate("postClient", client);
34
+ };
35
+
36
+ export default fp(postPlugin, {
37
+ fastify: ">=4.0.0",
38
+ name: "@geekapps/post-fastify",
39
+ });