@izapai/sdk 0.0.0 → 0.4.1

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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +173 -1
  3. package/dist/client.d.ts +20 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +41 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/errors.d.ts +41 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +67 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/generated/client/client.gen.d.ts +3 -0
  12. package/dist/generated/client/client.gen.d.ts.map +1 -0
  13. package/dist/generated/client/client.gen.js +217 -0
  14. package/dist/generated/client/client.gen.js.map +1 -0
  15. package/dist/generated/client/index.d.ts +11 -0
  16. package/dist/generated/client/index.d.ts.map +1 -0
  17. package/dist/generated/client/index.js +7 -0
  18. package/dist/generated/client/index.js.map +1 -0
  19. package/dist/generated/client/types.gen.d.ts +121 -0
  20. package/dist/generated/client/types.gen.d.ts.map +1 -0
  21. package/dist/generated/client/types.gen.js +3 -0
  22. package/dist/generated/client/types.gen.js.map +1 -0
  23. package/dist/generated/client/utils.gen.d.ts +38 -0
  24. package/dist/generated/client/utils.gen.d.ts.map +1 -0
  25. package/dist/generated/client/utils.gen.js +229 -0
  26. package/dist/generated/client/utils.gen.js.map +1 -0
  27. package/dist/generated/client.gen.d.ts +13 -0
  28. package/dist/generated/client.gen.d.ts.map +1 -0
  29. package/dist/generated/client.gen.js +4 -0
  30. package/dist/generated/client.gen.js.map +1 -0
  31. package/dist/generated/core/auth.gen.d.ts +26 -0
  32. package/dist/generated/core/auth.gen.d.ts.map +1 -0
  33. package/dist/generated/core/auth.gen.js +15 -0
  34. package/dist/generated/core/auth.gen.js.map +1 -0
  35. package/dist/generated/core/bodySerializer.gen.d.ts +26 -0
  36. package/dist/generated/core/bodySerializer.gen.d.ts.map +1 -0
  37. package/dist/generated/core/bodySerializer.gen.js +58 -0
  38. package/dist/generated/core/bodySerializer.gen.js.map +1 -0
  39. package/dist/generated/core/params.gen.d.ts +44 -0
  40. package/dist/generated/core/params.gen.d.ts.map +1 -0
  41. package/dist/generated/core/params.gen.js +110 -0
  42. package/dist/generated/core/params.gen.js.map +1 -0
  43. package/dist/generated/core/pathSerializer.gen.d.ts +34 -0
  44. package/dist/generated/core/pathSerializer.gen.d.ts.map +1 -0
  45. package/dist/generated/core/pathSerializer.gen.js +107 -0
  46. package/dist/generated/core/pathSerializer.gen.js.map +1 -0
  47. package/dist/generated/core/queryKeySerializer.gen.d.ts +19 -0
  48. package/dist/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  49. package/dist/generated/core/queryKeySerializer.gen.js +93 -0
  50. package/dist/generated/core/queryKeySerializer.gen.js.map +1 -0
  51. package/dist/generated/core/serverSentEvents.gen.d.ts +72 -0
  52. package/dist/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  53. package/dist/generated/core/serverSentEvents.gen.js +133 -0
  54. package/dist/generated/core/serverSentEvents.gen.js.map +1 -0
  55. package/dist/generated/core/types.gen.d.ts +84 -0
  56. package/dist/generated/core/types.gen.d.ts.map +1 -0
  57. package/dist/generated/core/types.gen.js +3 -0
  58. package/dist/generated/core/types.gen.js.map +1 -0
  59. package/dist/generated/core/utils.gen.d.ts +20 -0
  60. package/dist/generated/core/utils.gen.d.ts.map +1 -0
  61. package/dist/generated/core/utils.gen.js +88 -0
  62. package/dist/generated/core/utils.gen.js.map +1 -0
  63. package/dist/generated/index.d.ts +3 -0
  64. package/dist/generated/index.d.ts.map +1 -0
  65. package/dist/generated/index.js +3 -0
  66. package/dist/generated/index.js.map +1 -0
  67. package/dist/generated/sdk.gen.d.ts +474 -0
  68. package/dist/generated/sdk.gen.d.ts.map +1 -0
  69. package/dist/generated/sdk.gen.js +1035 -0
  70. package/dist/generated/sdk.gen.js.map +1 -0
  71. package/dist/generated/types.gen.d.ts +6277 -0
  72. package/dist/generated/types.gen.d.ts.map +1 -0
  73. package/dist/generated/types.gen.js +3 -0
  74. package/dist/generated/types.gen.js.map +1 -0
  75. package/dist/index.d.ts +8 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +7 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/retry.d.ts +18 -0
  80. package/dist/retry.d.ts.map +1 -0
  81. package/dist/retry.js +84 -0
  82. package/dist/retry.js.map +1 -0
  83. package/dist/version.d.ts +2 -0
  84. package/dist/version.d.ts.map +1 -0
  85. package/dist/version.js +2 -0
  86. package/dist/version.js.map +1 -0
  87. package/dist/webhooks.d.ts +127 -0
  88. package/dist/webhooks.d.ts.map +1 -0
  89. package/dist/webhooks.js +153 -0
  90. package/dist/webhooks.js.map +1 -0
  91. package/package.json +58 -3
@@ -0,0 +1,153 @@
1
+ import { createHmac, timingSafeEqual } from "node:crypto";
2
+ /** Header names iZap sends with every webhook delivery. */
3
+ export const WEBHOOK_HEADERS = {
4
+ id: "izap-webhook-id",
5
+ event: "izap-webhook-event",
6
+ timestamp: "izap-webhook-timestamp",
7
+ signature: "izap-webhook-signature",
8
+ v2: "izap-webhook-signature-v2",
9
+ };
10
+ export const DEFAULT_TOLERANCE_SEC = 300;
11
+ const SIGNATURE_VERSION = "v1";
12
+ const SIGNATURE_VERSION_V2 = "v2";
13
+ export class WebhookVerificationError extends Error {
14
+ name = "WebhookVerificationError";
15
+ code;
16
+ constructor(code, message) {
17
+ super(message);
18
+ this.code = code;
19
+ }
20
+ }
21
+ /**
22
+ * Verifies an iZap webhook delivery and returns the parsed event.
23
+ *
24
+ * By default, requires `izap-webhook-signature-v2`
25
+ * (`v2=<hex HMAC-SHA256 of "{id}.{timestamp}.{raw_body}">`) — it covers the
26
+ * delivery id, so a captured delivery cannot be replayed under a new id the way
27
+ * it can under v1. Pass `allowV1: true` to accept a v1-only
28
+ * `izap-webhook-signature` (`v1=<hex HMAC-SHA256 of "{timestamp}.{raw_body}">`)
29
+ * when v2 is absent (senders from before v2 existed). Either check runs in
30
+ * constant time. Both checks also reject timestamps outside `toleranceSec`.
31
+ *
32
+ * @throws {WebhookVerificationError} when the delivery is not authentic or is stale.
33
+ */
34
+ export function verify(options) {
35
+ const { secret, toleranceSec = DEFAULT_TOLERANCE_SEC, allowV1 = false, } = options;
36
+ if (typeof secret !== "string" || secret === "") {
37
+ throw new TypeError("webhooks.verify: `secret` is required.");
38
+ }
39
+ const body = rawBytes(options.payload);
40
+ const id = readHeader(options.headers, WEBHOOK_HEADERS.id);
41
+ const timestamp = readHeader(options.headers, WEBHOOK_HEADERS.timestamp);
42
+ const signature = readHeader(options.headers, WEBHOOK_HEADERS.signature);
43
+ const signatureV2 = readHeader(options.headers, WEBHOOK_HEADERS.v2);
44
+ const missing = [
45
+ [WEBHOOK_HEADERS.id, id],
46
+ [WEBHOOK_HEADERS.timestamp, timestamp],
47
+ ]
48
+ .filter(([, value]) => !value)
49
+ .map(([name]) => name);
50
+ if (!signatureV2 && !allowV1) {
51
+ missing.push(WEBHOOK_HEADERS.v2);
52
+ }
53
+ else if (!signature && !signatureV2) {
54
+ missing.push(`${WEBHOOK_HEADERS.signature} or ${WEBHOOK_HEADERS.v2}`);
55
+ }
56
+ if (!id ||
57
+ !timestamp ||
58
+ (!signatureV2 && !allowV1) ||
59
+ (!signature && !signatureV2)) {
60
+ throw new WebhookVerificationError("missing_header", `Missing webhook header(s): ${missing.join(", ")}.`);
61
+ }
62
+ if (!/^\d+$/.test(timestamp)) {
63
+ throw new WebhookVerificationError("invalid_timestamp", `${WEBHOOK_HEADERS.timestamp} is not a Unix timestamp.`);
64
+ }
65
+ const timestampSec = Number(timestamp);
66
+ if (Math.abs(Date.now() / 1000 - timestampSec) > toleranceSec) {
67
+ throw new WebhookVerificationError("timestamp_out_of_tolerance", `${WEBHOOK_HEADERS.timestamp} is more than ${toleranceSec}s away from the current time.`);
68
+ }
69
+ // v2 wins whenever it is present: it is the stronger check (it covers `id`,
70
+ // closing v1's replay-under-a-new-id gap), and a delivery must not silently
71
+ // fall back to a v1 signature that happens to still verify.
72
+ const usingV2 = Boolean(signatureV2);
73
+ const activeHeaderName = usingV2
74
+ ? WEBHOOK_HEADERS.v2
75
+ : WEBHOOK_HEADERS.signature;
76
+ const activeSignature = (usingV2 ? signatureV2 : signature);
77
+ const activeVersion = usingV2 ? SIGNATURE_VERSION_V2 : SIGNATURE_VERSION;
78
+ const expectedHex = usingV2
79
+ ? computeSignatureV2(secret, id, timestamp, body)
80
+ : computeSignature(secret, timestamp, body);
81
+ if (!signatureMatches(activeSignature, activeVersion, expectedHex)) {
82
+ throw new WebhookVerificationError("invalid_signature", `${activeHeaderName} does not match the payload.`);
83
+ }
84
+ let data;
85
+ try {
86
+ data = JSON.parse(body.toString("utf8"));
87
+ }
88
+ catch {
89
+ throw new WebhookVerificationError("invalid_payload", "The signed payload is not valid JSON.");
90
+ }
91
+ const event = readHeader(options.headers, WEBHOOK_HEADERS.event) ??
92
+ (typeof data === "object" && data !== null && "event" in data
93
+ ? String(data.event)
94
+ : "");
95
+ return { id, event, timestamp: timestampSec, data };
96
+ }
97
+ /**
98
+ * Produces the `izap-webhook-signature` (v1) value for a payload, e.g. to exercise
99
+ * a receiver locally with a known secret. See {@link signV2} for the v2 scheme.
100
+ */
101
+ export function sign(options) {
102
+ const timestamp = String(options.timestamp ?? Math.floor(Date.now() / 1000));
103
+ return `${SIGNATURE_VERSION}=${computeSignature(options.secret, timestamp, rawBytes(options.payload))}`;
104
+ }
105
+ /**
106
+ * Produces the `izap-webhook-signature-v2` value for a payload, e.g. to exercise a
107
+ * receiver locally with a known secret. Unlike v1, this also signs `id`.
108
+ */
109
+ export function signV2(options) {
110
+ const timestamp = String(options.timestamp ?? Math.floor(Date.now() / 1000));
111
+ return `${SIGNATURE_VERSION_V2}=${computeSignatureV2(options.secret, options.id, timestamp, rawBytes(options.payload))}`;
112
+ }
113
+ function computeSignature(secret, timestamp, body) {
114
+ return createHmac("sha256", secret)
115
+ .update(`${timestamp}.`)
116
+ .update(body)
117
+ .digest("hex");
118
+ }
119
+ function computeSignatureV2(secret, id, timestamp, body) {
120
+ return createHmac("sha256", secret)
121
+ .update(`${id}.${timestamp}.`)
122
+ .update(body)
123
+ .digest("hex");
124
+ }
125
+ function signatureMatches(headerValue, version, expectedHex) {
126
+ const expected = Buffer.from(expectedHex, "hex");
127
+ return headerValue
128
+ .split(/[\s,]+/)
129
+ .filter((entry) => entry.startsWith(`${version}=`))
130
+ .map((entry) => entry.slice(version.length + 1))
131
+ .filter((hex) => /^[0-9a-f]{64}$/i.test(hex))
132
+ .some((hex) => timingSafeEqual(Buffer.from(hex, "hex"), expected));
133
+ }
134
+ function rawBytes(payload) {
135
+ if (typeof payload === "string")
136
+ return Buffer.from(payload, "utf8");
137
+ if (payload instanceof Uint8Array) {
138
+ return Buffer.from(payload.buffer, payload.byteOffset, payload.byteLength);
139
+ }
140
+ throw new TypeError("webhooks: `payload` must be the raw request body as a string or Buffer, not a parsed object.");
141
+ }
142
+ function readHeader(headers, name) {
143
+ if (headers instanceof Headers)
144
+ return headers.get(name) ?? undefined;
145
+ for (const [key, value] of Object.entries(headers)) {
146
+ if (key.toLowerCase() !== name)
147
+ continue;
148
+ const first = Array.isArray(value) ? value[0] : value;
149
+ return first || undefined;
150
+ }
151
+ return undefined;
152
+ }
153
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,wBAAwB;IACnC,SAAS,EAAE,wBAAwB;IACnC,EAAE,EAAE,2BAA2B;CACvB,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,oBAAoB,GAAG,IAAI,CAAC;AA+FlC,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC/B,IAAI,GAAG,0BAA0B,CAAC;IAC3C,IAAI,CAA+B;IAE5C,YAAY,IAAkC,EAAE,OAAe;QAC7D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,MAAM,CACpB,OAA6B;IAE7B,MAAM,EACJ,MAAM,EACN,YAAY,GAAG,qBAAqB,EACpC,OAAO,GAAG,KAAK,GAChB,GAAG,OAAO,CAAC;IACZ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG;QACd,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC;KACvC;SACE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,SAAS,OAAO,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,IACE,CAAC,EAAE;QACH,CAAC,SAAS;QACV,CAAC,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC;QAC1B,CAAC,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,EAC5B,CAAC;QACD,MAAM,IAAI,wBAAwB,CAChC,gBAAgB,EAChB,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,wBAAwB,CAChC,mBAAmB,EACnB,GAAG,eAAe,CAAC,SAAS,2BAA2B,CACxD,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,YAAY,CAAC,GAAG,YAAY,EAAE,CAAC;QAC9D,MAAM,IAAI,wBAAwB,CAChC,4BAA4B,EAC5B,GAAG,eAAe,CAAC,SAAS,iBAAiB,YAAY,+BAA+B,CACzF,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,4DAA4D;IAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,gBAAgB,GAAG,OAAO;QAC9B,CAAC,CAAC,eAAe,CAAC,EAAE;QACpB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC;IAC9B,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAW,CAAC;IACtE,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACzE,MAAM,WAAW,GAAG,OAAO;QACzB,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC;QACjD,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAE9C,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,wBAAwB,CAChC,mBAAmB,EACnB,GAAG,gBAAgB,8BAA8B,CAClD,CAAC;IACJ,CAAC;IAED,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAa,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,wBAAwB,CAChC,iBAAiB,EACjB,uCAAuC,CACxC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GACT,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;QAClD,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI;YAC3D,CAAC,CAAC,MAAM,CAAE,IAA2B,CAAC,KAAK,CAAC;YAC5C,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,OAA2B;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7E,OAAO,GAAG,iBAAiB,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AAC1G,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,OAA6B;IAClD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7E,OAAO,GAAG,oBAAoB,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AAC3H,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAc,EACd,SAAiB,EACjB,IAAY;IAEZ,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;SAChC,MAAM,CAAC,GAAG,SAAS,GAAG,CAAC;SACvB,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAc,EACd,EAAU,EACV,SAAiB,EACjB,IAAY;IAEZ,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;SAChC,MAAM,CAAC,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC;SAC7B,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CACvB,WAAmB,EACnB,OAAe,EACf,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACjD,OAAO,WAAW;SACf,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;SAClD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC/C,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC5C,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,QAAQ,CAAC,OAAgB;IAChC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrE,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,IAAI,SAAS,CACjB,8FAA8F,CAC/F,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,OAAuB,EAAE,IAAY;IACvD,IAAI,OAAO,YAAY,OAAO;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IACtE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI;YAAE,SAAS;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,OAAO,KAAK,IAAI,SAAS,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,62 @@
1
1
  {
2
2
  "name": "@izapai/sdk",
3
- "version": "0.0.0",
4
- "description": "Placeholder to enable npm Trusted Publishing. Real releases start at 0.3.0.",
3
+ "version": "0.4.1",
4
+ "description": "TypeScript SDK for the iZap REST API: WhatsApp business messaging, templates, chats and webhooks.",
5
+ "type": "module",
5
6
  "license": "MIT",
6
- "publishConfig": { "access": "public" }
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/versariai/izap-sdk-typescript.git"
10
+ },
11
+ "homepage": "https://devs.izap.ai",
12
+ "bugs": {
13
+ "url": "https://github.com/versariai/izap-sdk-typescript/issues",
14
+ "email": "support@izap.ai"
15
+ },
16
+ "keywords": [
17
+ "izap",
18
+ "whatsapp",
19
+ "sdk",
20
+ "api",
21
+ "webhooks"
22
+ ],
23
+ "main": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.js"
29
+ },
30
+ "./package.json": "./package.json"
31
+ },
32
+ "files": [
33
+ "dist/",
34
+ "README.md",
35
+ "LICENSE"
36
+ ],
37
+ "sideEffects": false,
38
+ "engines": {
39
+ "node": ">=20"
40
+ },
41
+ "scripts": {
42
+ "generate": "openapi-ts",
43
+ "sync:schema": "node scripts/sync-schema.mjs",
44
+ "check:generated": "node scripts/check-generated.mjs",
45
+ "typecheck": "tsc -p tsconfig.json",
46
+ "test": "npm run typecheck && vitest run",
47
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
48
+ "format": "prettier --write .",
49
+ "format:check": "prettier --check .",
50
+ "prepublishOnly": "npm test && npm run build"
51
+ },
52
+ "devDependencies": {
53
+ "@hey-api/openapi-ts": "0.99.0",
54
+ "@types/node": "20.19.43",
55
+ "prettier": "3.9.6",
56
+ "typescript": "5.9.3",
57
+ "vitest": "4.1.11"
58
+ },
59
+ "publishConfig": {
60
+ "access": "public"
61
+ }
7
62
  }