silon-sdk 0.2.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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +560 -0
  3. package/dist/client.d.ts +141 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +249 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/errors.d.ts +117 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +199 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/index.d.ts +51 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +36 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/internal/utils.d.ts +24 -0
  16. package/dist/internal/utils.d.ts.map +1 -0
  17. package/dist/internal/utils.js +58 -0
  18. package/dist/internal/utils.js.map +1 -0
  19. package/dist/pagination.d.ts +52 -0
  20. package/dist/pagination.d.ts.map +1 -0
  21. package/dist/pagination.js +80 -0
  22. package/dist/pagination.js.map +1 -0
  23. package/dist/resources/auth.d.ts +20 -0
  24. package/dist/resources/auth.d.ts.map +1 -0
  25. package/dist/resources/auth.js +41 -0
  26. package/dist/resources/auth.js.map +1 -0
  27. package/dist/resources/broadcasts.d.ts +63 -0
  28. package/dist/resources/broadcasts.d.ts.map +1 -0
  29. package/dist/resources/broadcasts.js +103 -0
  30. package/dist/resources/broadcasts.js.map +1 -0
  31. package/dist/resources/bulk.d.ts +60 -0
  32. package/dist/resources/bulk.d.ts.map +1 -0
  33. package/dist/resources/bulk.js +137 -0
  34. package/dist/resources/bulk.js.map +1 -0
  35. package/dist/resources/client-groups.d.ts +50 -0
  36. package/dist/resources/client-groups.d.ts.map +1 -0
  37. package/dist/resources/client-groups.js +97 -0
  38. package/dist/resources/client-groups.js.map +1 -0
  39. package/dist/resources/clients.d.ts +51 -0
  40. package/dist/resources/clients.d.ts.map +1 -0
  41. package/dist/resources/clients.js +99 -0
  42. package/dist/resources/clients.js.map +1 -0
  43. package/dist/resources/events.d.ts +22 -0
  44. package/dist/resources/events.d.ts.map +1 -0
  45. package/dist/resources/events.js +38 -0
  46. package/dist/resources/events.js.map +1 -0
  47. package/dist/resources/messages.d.ts +99 -0
  48. package/dist/resources/messages.d.ts.map +1 -0
  49. package/dist/resources/messages.js +167 -0
  50. package/dist/resources/messages.js.map +1 -0
  51. package/dist/resources/otp.d.ts +26 -0
  52. package/dist/resources/otp.d.ts.map +1 -0
  53. package/dist/resources/otp.js +40 -0
  54. package/dist/resources/otp.js.map +1 -0
  55. package/dist/resources/profile.d.ts +18 -0
  56. package/dist/resources/profile.d.ts.map +1 -0
  57. package/dist/resources/profile.js +40 -0
  58. package/dist/resources/profile.js.map +1 -0
  59. package/dist/resources/push.d.ts +45 -0
  60. package/dist/resources/push.d.ts.map +1 -0
  61. package/dist/resources/push.js +103 -0
  62. package/dist/resources/push.js.map +1 -0
  63. package/dist/resources/reports.d.ts +44 -0
  64. package/dist/resources/reports.d.ts.map +1 -0
  65. package/dist/resources/reports.js +127 -0
  66. package/dist/resources/reports.js.map +1 -0
  67. package/dist/resources/suppressions.d.ts +54 -0
  68. package/dist/resources/suppressions.d.ts.map +1 -0
  69. package/dist/resources/suppressions.js +79 -0
  70. package/dist/resources/suppressions.js.map +1 -0
  71. package/dist/resources/templates.d.ts +58 -0
  72. package/dist/resources/templates.d.ts.map +1 -0
  73. package/dist/resources/templates.js +96 -0
  74. package/dist/resources/templates.js.map +1 -0
  75. package/dist/resources/webhook-endpoints.d.ts +54 -0
  76. package/dist/resources/webhook-endpoints.d.ts.map +1 -0
  77. package/dist/resources/webhook-endpoints.js +96 -0
  78. package/dist/resources/webhook-endpoints.js.map +1 -0
  79. package/dist/resources/whatsapp-templates.d.ts +20 -0
  80. package/dist/resources/whatsapp-templates.d.ts.map +1 -0
  81. package/dist/resources/whatsapp-templates.js +33 -0
  82. package/dist/resources/whatsapp-templates.js.map +1 -0
  83. package/dist/types/auth.d.ts +34 -0
  84. package/dist/types/auth.d.ts.map +1 -0
  85. package/dist/types/auth.js +8 -0
  86. package/dist/types/auth.js.map +1 -0
  87. package/dist/types/broadcasts.d.ts +174 -0
  88. package/dist/types/broadcasts.d.ts.map +1 -0
  89. package/dist/types/broadcasts.js +8 -0
  90. package/dist/types/broadcasts.js.map +1 -0
  91. package/dist/types/bulk.d.ts +161 -0
  92. package/dist/types/bulk.d.ts.map +1 -0
  93. package/dist/types/bulk.js +8 -0
  94. package/dist/types/bulk.js.map +1 -0
  95. package/dist/types/client-groups.d.ts +52 -0
  96. package/dist/types/client-groups.d.ts.map +1 -0
  97. package/dist/types/client-groups.js +8 -0
  98. package/dist/types/client-groups.js.map +1 -0
  99. package/dist/types/clients.d.ts +64 -0
  100. package/dist/types/clients.d.ts.map +1 -0
  101. package/dist/types/clients.js +8 -0
  102. package/dist/types/clients.js.map +1 -0
  103. package/dist/types/events.d.ts +64 -0
  104. package/dist/types/events.d.ts.map +1 -0
  105. package/dist/types/events.js +9 -0
  106. package/dist/types/events.js.map +1 -0
  107. package/dist/types/messages.d.ts +334 -0
  108. package/dist/types/messages.d.ts.map +1 -0
  109. package/dist/types/messages.js +8 -0
  110. package/dist/types/messages.js.map +1 -0
  111. package/dist/types/otp.d.ts +61 -0
  112. package/dist/types/otp.d.ts.map +1 -0
  113. package/dist/types/otp.js +8 -0
  114. package/dist/types/otp.js.map +1 -0
  115. package/dist/types/profile.d.ts +37 -0
  116. package/dist/types/profile.d.ts.map +1 -0
  117. package/dist/types/profile.js +8 -0
  118. package/dist/types/profile.js.map +1 -0
  119. package/dist/types/push.d.ts +90 -0
  120. package/dist/types/push.d.ts.map +1 -0
  121. package/dist/types/push.js +8 -0
  122. package/dist/types/push.js.map +1 -0
  123. package/dist/types/reports.d.ts +109 -0
  124. package/dist/types/reports.d.ts.map +1 -0
  125. package/dist/types/reports.js +8 -0
  126. package/dist/types/reports.js.map +1 -0
  127. package/dist/types/suppressions.d.ts +72 -0
  128. package/dist/types/suppressions.d.ts.map +1 -0
  129. package/dist/types/suppressions.js +8 -0
  130. package/dist/types/suppressions.js.map +1 -0
  131. package/dist/types/templates.d.ts +96 -0
  132. package/dist/types/templates.d.ts.map +1 -0
  133. package/dist/types/templates.js +9 -0
  134. package/dist/types/templates.js.map +1 -0
  135. package/dist/types/webhook-endpoints.d.ts +123 -0
  136. package/dist/types/webhook-endpoints.d.ts.map +1 -0
  137. package/dist/types/webhook-endpoints.js +8 -0
  138. package/dist/types/webhook-endpoints.js.map +1 -0
  139. package/dist/types/whatsapp-templates.d.ts +59 -0
  140. package/dist/types/whatsapp-templates.d.ts.map +1 -0
  141. package/dist/types/whatsapp-templates.js +8 -0
  142. package/dist/types/whatsapp-templates.js.map +1 -0
  143. package/dist/version.d.ts +3 -0
  144. package/dist/version.d.ts.map +1 -0
  145. package/dist/version.js +3 -0
  146. package/dist/version.js.map +1 -0
  147. package/dist/webhooks.d.ts +48 -0
  148. package/dist/webhooks.d.ts.map +1 -0
  149. package/dist/webhooks.js +97 -0
  150. package/dist/webhooks.js.map +1 -0
  151. package/package.json +60 -0
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Types for the WhatsAppTemplates resource.
3
+ *
4
+ * Field names mirror the wire format exactly (snake_case) and date-times are
5
+ * ISO-8601 strings — this SDK performs no casing or date transformation.
6
+ */
7
+ /** One fillable variable of a WhatsApp template. */
8
+ export interface WhatsAppTemplateVariable {
9
+ /** Use this key in the send `whatsapp_template.variables` map. */
10
+ key: string;
11
+ /** Human label shown in the dashboard composer. */
12
+ label: string;
13
+ }
14
+ /** The WhatsApp Business Account a template belongs to. */
15
+ export interface Waba {
16
+ id?: number | null;
17
+ name?: string | null;
18
+ }
19
+ /**
20
+ * A single approved WhatsApp template.
21
+ *
22
+ * `components` (the raw Meta-shaped payload) is only present on the detail
23
+ * endpoint; the list endpoint omits it.
24
+ */
25
+ export interface WhatsAppTemplate {
26
+ id: number;
27
+ /** Pass as `whatsapp_template.name` when sending a Meta-Cloud template. */
28
+ name: string;
29
+ /** BCP-47-ish template language, e.g. `"en"`, `"ar"`. */
30
+ language: string;
31
+ /** Meta category, e.g. `"UTILITY"`, `"MARKETING"`. */
32
+ category: string;
33
+ /** Meta review status, e.g. `"APPROVED"`. */
34
+ status: string;
35
+ /** Meta's template id. */
36
+ external_id: string;
37
+ waba: Waba;
38
+ /** Human-readable body preview with `{{n}}` placeholders. */
39
+ preview: string;
40
+ mode: string;
41
+ variables: WhatsAppTemplateVariable[];
42
+ /** Raw Meta component payload — detail endpoint only. */
43
+ components?: Array<Record<string, unknown>> | null;
44
+ }
45
+ /** Body of `GET /api/v1/whatsapp/templates/`. */
46
+ export interface WhatsAppTemplateList {
47
+ count: number;
48
+ results: WhatsAppTemplate[];
49
+ }
50
+ /** Query filters for {@link WhatsAppTemplates.list}. */
51
+ export interface WhatsAppTemplateListParams {
52
+ /** Filter by template name (contains). */
53
+ name?: string | null;
54
+ /** Filter by template language, e.g. `"en"`. */
55
+ language?: string | null;
56
+ /** Filter by WhatsApp Business Account id. */
57
+ waba_id?: number | null;
58
+ }
59
+ //# sourceMappingURL=whatsapp-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-templates.d.ts","sourceRoot":"","sources":["../../src/types/whatsapp-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oDAAoD;AACpD,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2DAA2D;AAC3D,MAAM,WAAW,IAAI;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,wBAAwB,EAAE,CAAC;IACtC,yDAAyD;IACzD,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CACpD;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,wDAAwD;AACxD,MAAM,WAAW,0BAA0B;IACzC,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Types for the WhatsAppTemplates resource.
3
+ *
4
+ * Field names mirror the wire format exactly (snake_case) and date-times are
5
+ * ISO-8601 strings — this SDK performs no casing or date transformation.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=whatsapp-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-templates.js","sourceRoot":"","sources":["../../src/types/whatsapp-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,3 @@
1
+ /** SDK version, sent in the `User-Agent` header of every request. */
2
+ export declare const VERSION = "0.2.0";
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** SDK version, sent in the `User-Agent` header of every request. */
2
+ export const VERSION = "0.2.0";
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Verify Silon webhook deliveries — no HTTP client needed.
3
+ *
4
+ * Every delivery to a webhook endpoint carries a `Silon-Signature` header of
5
+ * the Stripe-style form `t=<unix_ts>,v1=<hex_hmac>`, where the HMAC-SHA256 is
6
+ * taken over `<unix_ts>.<raw_request_body>` with the endpoint's `whsec_`
7
+ * secret. Typical usage in a request handler:
8
+ *
9
+ * ```ts
10
+ * import { webhooks } from "silon-sdk";
11
+ *
12
+ * const event = webhooks.constructEvent(
13
+ * rawBody, // raw string/bytes, not parsed JSON
14
+ * req.headers["silon-signature"],
15
+ * process.env.SILON_WEBHOOK_SECRET,
16
+ * );
17
+ * if (event.type === "message.failed") { ... }
18
+ * ```
19
+ */
20
+ import type { Event } from "./types/events.js";
21
+ /** Name of the HTTP header carrying the webhook signature. */
22
+ export declare const SIGNATURE_HEADER = "Silon-Signature";
23
+ /** Maximum accepted clock skew, in seconds, between the signed timestamp and now. */
24
+ export declare const DEFAULT_TOLERANCE = 300;
25
+ /** Raw webhook payload — the unparsed request body. */
26
+ export type WebhookPayload = string | Uint8Array;
27
+ /**
28
+ * Produce a valid `Silon-Signature` value — useful in tests and mocks.
29
+ *
30
+ * @param secret - The endpoint's `whsec_` secret.
31
+ * @param payload - The raw request body to sign.
32
+ * @param timestamp - Unix timestamp in seconds; defaults to now.
33
+ */
34
+ export declare function sign(secret: string, payload: WebhookPayload, timestamp?: number): string;
35
+ /**
36
+ * `true` iff `header` is a valid signature for `payload` under `secret` and
37
+ * within `tolerance` seconds of now (`tolerance <= 0` skips the freshness
38
+ * check). Malformed headers return `false`. The comparison is constant-time.
39
+ */
40
+ export declare function verifySignature(payload: WebhookPayload, header: string, secret: string, tolerance?: number): boolean;
41
+ /**
42
+ * Verify the signature and parse `payload` into a typed {@link Event}.
43
+ *
44
+ * @throws {WebhookSignatureVerificationError} when the signature is missing,
45
+ * stale, or does not match.
46
+ */
47
+ export declare function constructEvent(payload: WebhookPayload, header: string, secret: string, tolerance?: number): Event;
48
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,uDAAuD;AACvD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;AAcjD;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxF;AAmBD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAA0B,GACpC,OAAO,CAUT;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAA0B,GACpC,KAAK,CASP"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Verify Silon webhook deliveries — no HTTP client needed.
3
+ *
4
+ * Every delivery to a webhook endpoint carries a `Silon-Signature` header of
5
+ * the Stripe-style form `t=<unix_ts>,v1=<hex_hmac>`, where the HMAC-SHA256 is
6
+ * taken over `<unix_ts>.<raw_request_body>` with the endpoint's `whsec_`
7
+ * secret. Typical usage in a request handler:
8
+ *
9
+ * ```ts
10
+ * import { webhooks } from "silon-sdk";
11
+ *
12
+ * const event = webhooks.constructEvent(
13
+ * rawBody, // raw string/bytes, not parsed JSON
14
+ * req.headers["silon-signature"],
15
+ * process.env.SILON_WEBHOOK_SECRET,
16
+ * );
17
+ * if (event.type === "message.failed") { ... }
18
+ * ```
19
+ */
20
+ import { createHmac, timingSafeEqual } from "node:crypto";
21
+ import { WebhookSignatureVerificationError } from "./errors.js";
22
+ /** Name of the HTTP header carrying the webhook signature. */
23
+ export const SIGNATURE_HEADER = "Silon-Signature";
24
+ /** Maximum accepted clock skew, in seconds, between the signed timestamp and now. */
25
+ export const DEFAULT_TOLERANCE = 300;
26
+ function toBuffer(payload) {
27
+ if (typeof payload === "string")
28
+ return Buffer.from(payload, "utf8");
29
+ return Buffer.from(payload.buffer, payload.byteOffset, payload.byteLength);
30
+ }
31
+ function digest(secret, timestamp, payload) {
32
+ const mac = createHmac("sha256", secret);
33
+ mac.update(`${timestamp}.`);
34
+ mac.update(toBuffer(payload));
35
+ return mac.digest("hex");
36
+ }
37
+ /**
38
+ * Produce a valid `Silon-Signature` value — useful in tests and mocks.
39
+ *
40
+ * @param secret - The endpoint's `whsec_` secret.
41
+ * @param payload - The raw request body to sign.
42
+ * @param timestamp - Unix timestamp in seconds; defaults to now.
43
+ */
44
+ export function sign(secret, payload, timestamp) {
45
+ const ts = Math.trunc(timestamp ?? Date.now() / 1000);
46
+ return `t=${ts},v1=${digest(secret, ts, payload)}`;
47
+ }
48
+ function parseHeader(header) {
49
+ let ts = null;
50
+ let sig = null;
51
+ for (const rawPart of (header ?? "").split(",")) {
52
+ const part = rawPart.trim();
53
+ const eq = part.indexOf("=");
54
+ const key = eq === -1 ? part : part.slice(0, eq);
55
+ const value = eq === -1 ? "" : part.slice(eq + 1);
56
+ if (key === "t" && /^\d+$/.test(value)) {
57
+ ts = Number.parseInt(value, 10);
58
+ }
59
+ else if (key === "v1") {
60
+ sig = value;
61
+ }
62
+ }
63
+ return { ts, sig };
64
+ }
65
+ /**
66
+ * `true` iff `header` is a valid signature for `payload` under `secret` and
67
+ * within `tolerance` seconds of now (`tolerance <= 0` skips the freshness
68
+ * check). Malformed headers return `false`. The comparison is constant-time.
69
+ */
70
+ export function verifySignature(payload, header, secret, tolerance = DEFAULT_TOLERANCE) {
71
+ const { ts, sig } = parseHeader(header);
72
+ if (ts === null || !sig)
73
+ return false;
74
+ if (tolerance > 0 && Math.abs(Math.floor(Date.now() / 1000) - ts) > tolerance) {
75
+ return false;
76
+ }
77
+ const expected = Buffer.from(digest(secret, ts, payload), "utf8");
78
+ const provided = Buffer.from(sig, "utf8");
79
+ if (expected.length !== provided.length)
80
+ return false;
81
+ return timingSafeEqual(expected, provided);
82
+ }
83
+ /**
84
+ * Verify the signature and parse `payload` into a typed {@link Event}.
85
+ *
86
+ * @throws {WebhookSignatureVerificationError} when the signature is missing,
87
+ * stale, or does not match.
88
+ */
89
+ export function constructEvent(payload, header, secret, tolerance = DEFAULT_TOLERANCE) {
90
+ if (!verifySignature(payload, header, secret, tolerance)) {
91
+ throw new WebhookSignatureVerificationError("Webhook signature verification failed. Check that you are using the " +
92
+ "endpoint's whsec_ secret and the raw (unparsed) request body.");
93
+ }
94
+ const text = typeof payload === "string" ? payload : new TextDecoder().decode(payload);
95
+ return JSON.parse(text);
96
+ }
97
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "silon-sdk",
3
+ "version": "0.2.0",
4
+ "description": "Official Silon SDK for Node.js — messaging, broadcasts, OTP, CRM, bulk, reports and webhooks.",
5
+ "keywords": [
6
+ "silon",
7
+ "sdk",
8
+ "api",
9
+ "messaging",
10
+ "whatsapp",
11
+ "sms",
12
+ "email",
13
+ "push",
14
+ "webhooks"
15
+ ],
16
+ "license": "MIT",
17
+ "author": "Silon",
18
+ "homepage": "https://silon.tech",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/KUWAITNET/silon-node-sdk.git"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/KUWAITNET/silon-node-sdk/issues"
25
+ },
26
+ "type": "module",
27
+ "engines": {
28
+ "node": ">=18"
29
+ },
30
+ "main": "./dist/index.js",
31
+ "module": "./dist/index.js",
32
+ "types": "./dist/index.d.ts",
33
+ "exports": {
34
+ ".": {
35
+ "types": "./dist/index.d.ts",
36
+ "import": "./dist/index.js"
37
+ },
38
+ "./package.json": "./package.json"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "README.md",
43
+ "LICENSE"
44
+ ],
45
+ "sideEffects": false,
46
+ "publishConfig": {
47
+ "access": "public",
48
+ "provenance": true
49
+ },
50
+ "scripts": {
51
+ "build": "tsc -p tsconfig.build.json",
52
+ "test": "vitest run",
53
+ "prepublishOnly": "npm run build"
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "^25.0.0",
57
+ "typescript": "^5.7.0",
58
+ "vitest": "^3.0.0"
59
+ }
60
+ }