@sentroy-co/client-sdk 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  <p align="center">
8
8
  Server-side SDK to interact with the Sentroy platform API.<br />
9
- List domains, manage mailboxes, fetch templates, read inbox, and send emails.
9
+ Manage mail (domains, mailboxes, templates, inbox, send) and storage (buckets, media) from a single entry point.
10
10
  </p>
11
11
 
12
12
  <p align="center">
@@ -66,6 +66,25 @@ const templates = await sentroy.templates.list()
66
66
  const template = await sentroy.templates.get("template-id")
67
67
  ```
68
68
 
69
+ Templates support multiple languages via `LocalizedString`. A field can be a plain string or an object keyed by language code:
70
+
71
+ ```jsonc
72
+ // Example template response
73
+ {
74
+ "id": "b3f1a2c4-...",
75
+ "name": { "en": "Welcome Email", "tr": "Hosgeldin E-postasi" },
76
+ "subject": { "en": "Welcome, {{name}}!", "tr": "Hosgeldin, {{name}}!" },
77
+ "mjmlBody": { "en": "<mjml>...</mjml>", "tr": "<mjml>...</mjml>" },
78
+ "variables": ["name", "company"],
79
+ "domainId": "a1b2c3d4-...",
80
+ "domainName": "example.com",
81
+ "createdAt": "2026-01-15T10:30:00.000Z",
82
+ "updatedAt": "2026-04-10T14:22:00.000Z"
83
+ }
84
+ ```
85
+
86
+ Use the `variables` array to know which placeholders (`{{name}}`, `{{company}}`) the template expects.
87
+
69
88
  ### Inbox
70
89
 
71
90
  ```ts
@@ -105,7 +124,7 @@ await sentroy.inbox.delete(1234, { mailbox: "info@example.com" })
105
124
  ### Send Email
106
125
 
107
126
  ```ts
108
- // Send with a template
127
+ // Send with a template (uses default language)
109
128
  const result = await sentroy.send.email({
110
129
  to: "user@example.com",
111
130
  from: "info@example.com",
@@ -118,6 +137,17 @@ const result = await sentroy.send.email({
118
137
  },
119
138
  })
120
139
 
140
+ // Send with a specific language
141
+ const result = await sentroy.send.email({
142
+ to: "user@example.com",
143
+ from: "info@example.com",
144
+ subject: "Hosgeldin!",
145
+ domainId: "domain-id",
146
+ templateId: "template-id",
147
+ lang: "tr",
148
+ variables: { name: "Ahmet" },
149
+ })
150
+
121
151
  // Send with raw HTML
122
152
  const result = await sentroy.send.email({
123
153
  to: ["user1@example.com", "user2@example.com"],
@@ -144,6 +174,79 @@ const result = await sentroy.send.email({
144
174
  })
145
175
  ```
146
176
 
177
+ ### Buckets
178
+
179
+ Storage is organized into **buckets** — isolated containers with their own
180
+ visibility (public vs private) and usage counters.
181
+
182
+ ```ts
183
+ // List all buckets in the company
184
+ const buckets = await sentroy.buckets.list()
185
+
186
+ // Get a single bucket by its slug
187
+ const bucket = await sentroy.buckets.get("product-assets")
188
+
189
+ // Create a bucket (slug auto-derived from name if omitted)
190
+ const created = await sentroy.buckets.create({
191
+ name: "User Uploads",
192
+ description: "Avatars and profile media",
193
+ isPublic: false,
194
+ })
195
+
196
+ // Update a bucket — toggling isPublic cascades to every file's ACL
197
+ await sentroy.buckets.update("product-assets", { isPublic: true })
198
+
199
+ // Delete a bucket (409 if it has files; use force to purge everything)
200
+ await sentroy.buckets.delete("product-assets", { force: true })
201
+ ```
202
+
203
+ ### Media
204
+
205
+ Upload, list, download, and delete files inside a bucket. The same token
206
+ that authorizes mail calls also authorizes storage calls.
207
+
208
+ ```ts
209
+ // List files in a bucket
210
+ const { items, total } = await sentroy.media.list("product-assets", {
211
+ type: "image",
212
+ limit: 50,
213
+ })
214
+
215
+ // Get a single media record
216
+ const media = await sentroy.media.get("product-assets", mediaId)
217
+
218
+ // Upload — browser (File from <input>)
219
+ const input = document.querySelector<HTMLInputElement>("input[type=file]")!
220
+ const file = input.files![0]
221
+ const uploaded = await sentroy.media.upload("product-assets", {
222
+ body: file,
223
+ folder: "products",
224
+ tags: ["v1", "cover"],
225
+ })
226
+ console.log(uploaded.url) // Public URL from the CDN
227
+
228
+ // Upload — Node.js (Blob from fs)
229
+ import { openAsBlob } from "node:fs"
230
+ const blob = await openAsBlob("./photo.jpg")
231
+ const uploaded = await sentroy.media.upload("product-assets", {
232
+ body: blob,
233
+ filename: "photo.jpg",
234
+ isPublic: true,
235
+ })
236
+
237
+ // Download — streams from the storage backend; works for both public
238
+ // and private buckets (auth-gated for private).
239
+ const blob = await sentroy.media.download("product-assets", mediaId)
240
+ // Variant: ask for a pre-generated thumbnail width (falls back to
241
+ // original if that size wasn't generated for this file).
242
+ const thumb = await sentroy.media.download("product-assets", mediaId, {
243
+ quality: 500,
244
+ })
245
+
246
+ // Delete — removes S3 objects (original + thumbnails) + Media record
247
+ await sentroy.media.delete("product-assets", mediaId)
248
+ ```
249
+
147
250
  ## Error Handling
148
251
 
149
252
  ```ts
@@ -173,6 +276,14 @@ try {
173
276
  - Node.js 18+ (uses native `fetch`)
174
277
  - Server-side only
175
278
 
279
+ ## Raw Documentation
280
+
281
+ For AI agents and LLMs — plain-text version of this document:
282
+
283
+ ```
284
+ https://raw.githubusercontent.com/Sentroy-Co/client-sdk/refs/heads/main/typescript/README.md
285
+ ```
286
+
176
287
  ## License
177
288
 
178
289
  [MIT](LICENSE)
package/dist/http.d.ts CHANGED
@@ -9,10 +9,25 @@ export declare class HttpClient {
9
9
  private timeout;
10
10
  constructor(baseUrl: string, token: string, timeout?: number);
11
11
  private buildUrl;
12
+ /**
13
+ * Raw fetch — JSON parse etmez, Response döner. Binary endpoint'ler
14
+ * (media download) için kullanılır. Authorization header eklenir.
15
+ */
16
+ fetchRaw(path: string, init?: {
17
+ method?: string;
18
+ query?: Record<string, unknown>;
19
+ }): Promise<Response>;
12
20
  private request;
13
21
  get<T>(path: string, query?: Record<string, unknown>): Promise<T>;
14
22
  post<T>(path: string, body?: unknown): Promise<T>;
15
23
  put<T>(path: string, body?: unknown): Promise<T>;
24
+ patch<T>(path: string, body?: unknown): Promise<T>;
16
25
  del<T>(path: string, query?: Record<string, unknown>): Promise<T>;
26
+ /**
27
+ * Multipart upload. Body is a FormData; we deliberately do not set
28
+ * Content-Type so the runtime (browser or Node undici) writes the
29
+ * correct `multipart/form-data; boundary=...` header.
30
+ */
31
+ postForm<T>(path: string, form: FormData): Promise<T>;
17
32
  }
18
33
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,qBAAa,YAAa,SAAQ,KAAK;aAEnB,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,OAAO;gBADb,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EAC7B,OAAO,CAAC,EAAE,MAAM;CAKnB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAS;IAM5D,OAAO,CAAC,QAAQ;YAYF,OAAO;IA2Cf,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAGxE"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,qBAAa,YAAa,SAAQ,KAAK;aAEnB,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,OAAO;gBADb,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EAC7B,OAAO,CAAC,EAAE,MAAM;CAKnB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAS;IAM5D,OAAO,CAAC,QAAQ;IAYhB;;;OAGG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC1D,OAAO,CAAC,QAAQ,CAAC;YAeN,OAAO;IA2Cf,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvE;;;;OAIG;IACG,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;CAwB5D"}
package/dist/http.js CHANGED
@@ -32,6 +32,25 @@ class HttpClient {
32
32
  }
33
33
  return url.toString();
34
34
  }
35
+ /**
36
+ * Raw fetch — JSON parse etmez, Response döner. Binary endpoint'ler
37
+ * (media download) için kullanılır. Authorization header eklenir.
38
+ */
39
+ async fetchRaw(path, init) {
40
+ const url = this.buildUrl(path, init?.query);
41
+ const controller = new AbortController();
42
+ const timer = setTimeout(() => controller.abort(), this.timeout);
43
+ try {
44
+ return await fetch(url, {
45
+ method: init?.method || "GET",
46
+ headers: { Authorization: `Bearer ${this.token}` },
47
+ signal: controller.signal,
48
+ });
49
+ }
50
+ finally {
51
+ clearTimeout(timer);
52
+ }
53
+ }
35
54
  async request(method, path, options) {
36
55
  const url = this.buildUrl(path, options?.query);
37
56
  const controller = new AbortController();
@@ -68,9 +87,38 @@ class HttpClient {
68
87
  async put(path, body) {
69
88
  return this.request("PUT", path, { body });
70
89
  }
90
+ async patch(path, body) {
91
+ return this.request("PATCH", path, { body });
92
+ }
71
93
  async del(path, query) {
72
94
  return this.request("DELETE", path, { query });
73
95
  }
96
+ /**
97
+ * Multipart upload. Body is a FormData; we deliberately do not set
98
+ * Content-Type so the runtime (browser or Node undici) writes the
99
+ * correct `multipart/form-data; boundary=...` header.
100
+ */
101
+ async postForm(path, form) {
102
+ const url = this.buildUrl(path);
103
+ const controller = new AbortController();
104
+ const timer = setTimeout(() => controller.abort(), this.timeout);
105
+ try {
106
+ const res = await fetch(url, {
107
+ method: "POST",
108
+ headers: { Authorization: `Bearer ${this.token}` },
109
+ body: form,
110
+ signal: controller.signal,
111
+ });
112
+ const json = (await res.json());
113
+ if (!res.ok) {
114
+ throw new SentroyError(res.status, json, json.error || `Upload failed with status ${res.status}`);
115
+ }
116
+ return json.data;
117
+ }
118
+ finally {
119
+ clearTimeout(timer);
120
+ }
121
+ }
74
122
  }
75
123
  exports.HttpClient = HttpClient;
76
124
  //# sourceMappingURL=http.js.map
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,8 @@ import { Mailboxes } from "./resources/mailboxes";
3
3
  import { Templates } from "./resources/templates";
4
4
  import { Inbox } from "./resources/inbox";
5
5
  import { Send } from "./resources/send";
6
+ import { Buckets } from "./resources/buckets";
7
+ import { MediaResource } from "./resources/media";
6
8
  import type { SentroyClientConfig } from "./types";
7
9
  export declare class Sentroy {
8
10
  readonly domains: Domains;
@@ -10,9 +12,16 @@ export declare class Sentroy {
10
12
  readonly templates: Templates;
11
13
  readonly inbox: Inbox;
12
14
  readonly send: Send;
15
+ readonly buckets: Buckets;
16
+ readonly media: MediaResource;
13
17
  /**
14
18
  * Create a new Sentroy client.
15
19
  *
20
+ * Single `baseUrl` covers every resource: the platform gateway routes
21
+ * `/api/mail/companies/...` to the mail backend and
22
+ * `/api/storage/companies/...` to the storage backend. The same
23
+ * access token works across both.
24
+ *
16
25
  * @example
17
26
  * ```ts
18
27
  * const sentroy = new Sentroy({
@@ -22,10 +31,11 @@ export declare class Sentroy {
22
31
  * })
23
32
  *
24
33
  * const domains = await sentroy.domains.list()
34
+ * const buckets = await sentroy.buckets.list()
25
35
  * ```
26
36
  */
27
37
  constructor(config: SentroyClientConfig);
28
38
  }
29
- export type { SentroyClientConfig, ApiResponse, Domain, MailboxUser, Template, LocalizedString, MessageAddress, MessageSummary, MessageDetail, AttachmentInfo, Mailbox, InboxListParams, Attachment, SendParams, SendResult, } from "./types";
39
+ export type { SentroyClientConfig, ApiResponse, Domain, MailboxUser, Template, LocalizedString, MessageAddress, MessageSummary, MessageDetail, AttachmentInfo, Mailbox, InboxListParams, Attachment, SendParams, SendResult, Bucket, CreateBucketParams, UpdateBucketParams, Media, MediaType, MediaThumbnail, MediaImageMeta, MediaListParams, MediaListResult, UploadMediaParams, } from "./types";
30
40
  export { SentroyError } from "./http";
31
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAElD,qBAAa,OAAO;IAClB,SAAgB,OAAO,EAAE,OAAO,CAAA;IAChC,SAAgB,SAAS,EAAE,SAAS,CAAA;IACpC,SAAgB,SAAS,EAAE,SAAS,CAAA;IACpC,SAAgB,KAAK,EAAE,KAAK,CAAA;IAC5B,SAAgB,IAAI,EAAE,IAAI,CAAA;IAE1B;;;;;;;;;;;;;OAaG;gBACS,MAAM,EAAE,mBAAmB;CAWxC;AAGD,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,MAAM,EACN,WAAW,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,OAAO,EACP,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAElD,qBAAa,OAAO;IAClB,SAAgB,OAAO,EAAE,OAAO,CAAA;IAChC,SAAgB,SAAS,EAAE,SAAS,CAAA;IACpC,SAAgB,SAAS,EAAE,SAAS,CAAA;IACpC,SAAgB,KAAK,EAAE,KAAK,CAAA;IAC5B,SAAgB,IAAI,EAAE,IAAI,CAAA;IAC1B,SAAgB,OAAO,EAAE,OAAO,CAAA;IAChC,SAAgB,KAAK,EAAE,aAAa,CAAA;IAEpC;;;;;;;;;;;;;;;;;;;OAmBG;gBACS,MAAM,EAAE,mBAAmB;CA4BxC;AAGD,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,MAAM,EACN,WAAW,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,OAAO,EACP,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA"}
package/dist/index.js CHANGED
@@ -7,15 +7,24 @@ const mailboxes_1 = require("./resources/mailboxes");
7
7
  const templates_1 = require("./resources/templates");
8
8
  const inbox_1 = require("./resources/inbox");
9
9
  const send_1 = require("./resources/send");
10
+ const buckets_1 = require("./resources/buckets");
11
+ const media_1 = require("./resources/media");
10
12
  class Sentroy {
11
13
  domains;
12
14
  mailboxes;
13
15
  templates;
14
16
  inbox;
15
17
  send;
18
+ buckets;
19
+ media;
16
20
  /**
17
21
  * Create a new Sentroy client.
18
22
  *
23
+ * Single `baseUrl` covers every resource: the platform gateway routes
24
+ * `/api/mail/companies/...` to the mail backend and
25
+ * `/api/storage/companies/...` to the storage backend. The same
26
+ * access token works across both.
27
+ *
19
28
  * @example
20
29
  * ```ts
21
30
  * const sentroy = new Sentroy({
@@ -25,17 +34,25 @@ class Sentroy {
25
34
  * })
26
35
  *
27
36
  * const domains = await sentroy.domains.list()
37
+ * const buckets = await sentroy.buckets.list()
28
38
  * ```
29
39
  */
30
40
  constructor(config) {
31
- const base = config.baseUrl.replace(/\/+$/, "");
32
- const apiBase = `${base}/api/companies/${encodeURIComponent(config.companySlug)}`;
33
- const http = new http_1.HttpClient(apiBase, config.accessToken, config.timeout);
34
- this.domains = new domains_1.Domains(http);
35
- this.mailboxes = new mailboxes_1.Mailboxes(http);
36
- this.templates = new templates_1.Templates(http);
37
- this.inbox = new inbox_1.Inbox(http);
38
- this.send = new send_1.Send(http);
41
+ const root = config.baseUrl.replace(/\/+$/, "");
42
+ const slug = encodeURIComponent(config.companySlug);
43
+ // Mail resources hit the `/api/mail/companies` gateway path — core
44
+ // forwards to the mail subdomain. The SDK consumer never sees the
45
+ // subdomain split.
46
+ const mailHttp = new http_1.HttpClient(`${root}/api/mail/companies/${slug}`, config.accessToken, config.timeout);
47
+ // Storage uses the same pattern via `/api/storage/companies`.
48
+ const storageHttp = new http_1.HttpClient(`${root}/api/storage/companies/${slug}`, config.accessToken, config.timeout);
49
+ this.domains = new domains_1.Domains(mailHttp);
50
+ this.mailboxes = new mailboxes_1.Mailboxes(mailHttp);
51
+ this.templates = new templates_1.Templates(mailHttp);
52
+ this.inbox = new inbox_1.Inbox(mailHttp);
53
+ this.send = new send_1.Send(mailHttp);
54
+ this.buckets = new buckets_1.Buckets(storageHttp);
55
+ this.media = new media_1.MediaResource(storageHttp);
39
56
  }
40
57
  }
41
58
  exports.Sentroy = Sentroy;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAAmC;AACnC,iDAA6C;AAC7C,qDAAiD;AACjD,qDAAiD;AACjD,6CAAyC;AACzC,2CAAuC;AAGvC,MAAa,OAAO;IACF,OAAO,CAAS;IAChB,SAAS,CAAW;IACpB,SAAS,CAAW;IACpB,KAAK,CAAO;IACZ,IAAI,CAAM;IAE1B;;;;;;;;;;;;;OAaG;IACH,YAAY,MAA2B;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/C,MAAM,OAAO,GAAG,GAAG,IAAI,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAA;QACjF,MAAM,IAAI,GAAG,IAAI,iBAAU,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAExE,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;CACF;AAhCD,0BAgCC;AAqBD,+BAAqC;AAA5B,oGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAAmC;AACnC,iDAA6C;AAC7C,qDAAiD;AACjD,qDAAiD;AACjD,6CAAyC;AACzC,2CAAuC;AACvC,iDAA6C;AAC7C,6CAAiD;AAGjD,MAAa,OAAO;IACF,OAAO,CAAS;IAChB,SAAS,CAAW;IACpB,SAAS,CAAW;IACpB,KAAK,CAAO;IACZ,IAAI,CAAM;IACV,OAAO,CAAS;IAChB,KAAK,CAAe;IAEpC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAY,MAA2B;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEnD,mEAAmE;QACnE,kEAAkE;QAClE,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,iBAAU,CAC7B,GAAG,IAAI,uBAAuB,IAAI,EAAE,EACpC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,OAAO,CACf,CAAA;QAED,8DAA8D;QAC9D,MAAM,WAAW,GAAG,IAAI,iBAAU,CAChC,GAAG,IAAI,0BAA0B,IAAI,EAAE,EACvC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,OAAO,CACf,CAAA;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,QAAQ,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,CAAC,QAAQ,CAAC,CAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,WAAW,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAa,CAAC,WAAW,CAAC,CAAA;IAC7C,CAAC;CACF;AAzDD,0BAyDC;AA+BD,+BAAqC;AAA5B,oGAAA,YAAY,OAAA"}
@@ -0,0 +1,27 @@
1
+ import type { HttpClient } from "../http";
2
+ import type { Bucket, CreateBucketParams, UpdateBucketParams } from "../types";
3
+ export declare class Buckets {
4
+ private http;
5
+ constructor(http: HttpClient);
6
+ /** List all buckets in the company. */
7
+ list(): Promise<Bucket[]>;
8
+ /** Get a single bucket by its slug. */
9
+ get(slug: string): Promise<Bucket>;
10
+ /** Create a new bucket. Slug is auto-derived from name if omitted. */
11
+ create(params: CreateBucketParams): Promise<Bucket>;
12
+ /**
13
+ * Update a bucket's name, description, or visibility. Toggling
14
+ * `isPublic` cascades to every existing file in the bucket (S3 ACL +
15
+ * Media doc); this call can take a while for large buckets.
16
+ */
17
+ update(slug: string, params: UpdateBucketParams): Promise<Bucket>;
18
+ /**
19
+ * Delete a bucket. Fails with 409 if the bucket has any files unless
20
+ * `force: true` is passed — then every file is purged from storage
21
+ * before the bucket is removed.
22
+ */
23
+ delete(slug: string, opts?: {
24
+ force?: boolean;
25
+ }): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../src/resources/buckets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,UAAU,CAAA;AAEjB,qBAAa,OAAO;IACN,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAEpC,uCAAuC;IACjC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B,uCAAuC;IACjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxC,sEAAsE;IAChE,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzD;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvE;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAOtE"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Buckets = void 0;
4
+ class Buckets {
5
+ http;
6
+ constructor(http) {
7
+ this.http = http;
8
+ }
9
+ /** List all buckets in the company. */
10
+ async list() {
11
+ return this.http.get("/buckets");
12
+ }
13
+ /** Get a single bucket by its slug. */
14
+ async get(slug) {
15
+ return this.http.get(`/buckets/${encodeURIComponent(slug)}`);
16
+ }
17
+ /** Create a new bucket. Slug is auto-derived from name if omitted. */
18
+ async create(params) {
19
+ return this.http.post("/buckets", params);
20
+ }
21
+ /**
22
+ * Update a bucket's name, description, or visibility. Toggling
23
+ * `isPublic` cascades to every existing file in the bucket (S3 ACL +
24
+ * Media doc); this call can take a while for large buckets.
25
+ */
26
+ async update(slug, params) {
27
+ return this.http.patch(`/buckets/${encodeURIComponent(slug)}`, params);
28
+ }
29
+ /**
30
+ * Delete a bucket. Fails with 409 if the bucket has any files unless
31
+ * `force: true` is passed — then every file is purged from storage
32
+ * before the bucket is removed.
33
+ */
34
+ async delete(slug, opts) {
35
+ const query = opts?.force ? { force: "true" } : undefined;
36
+ await this.http.del(`/buckets/${encodeURIComponent(slug)}`, query);
37
+ }
38
+ }
39
+ exports.Buckets = Buckets;
40
+ //# sourceMappingURL=buckets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buckets.js","sourceRoot":"","sources":["../../src/resources/buckets.ts"],"names":[],"mappings":";;;AAOA,MAAa,OAAO;IACE;IAApB,YAAoB,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAExC,uCAAuC;IACvC,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAW,UAAU,CAAC,CAAA;IAC5C,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,GAAG,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,YAAY,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,MAAM,CAAC,MAA0B;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAS,UAAU,EAAE,MAAM,CAAC,CAAA;IACnD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,MAA0B;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CACpB,YAAY,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACtC,MAAM,CACP,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,IAA0B;QACnD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QACzD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CACjB,YAAY,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACtC,KAAK,CACN,CAAA;IACH,CAAC;CACF;AA1CD,0BA0CC"}
@@ -0,0 +1,52 @@
1
+ import type { HttpClient } from "../http";
2
+ import type { Media, MediaListParams, MediaListResult, UploadMediaParams } from "../types";
3
+ export declare class MediaResource {
4
+ private http;
5
+ constructor(http: HttpClient);
6
+ /** List files in a bucket (paginated). */
7
+ list(bucketSlug: string, params?: MediaListParams): Promise<MediaListResult>;
8
+ /** Get a single media record. */
9
+ get(bucketSlug: string, mediaId: string): Promise<Media>;
10
+ /**
11
+ * Upload a file to a bucket. Works in Node and the browser: `body`
12
+ * is a `Blob` or `File`. Returns the full serialized media record
13
+ * (with `url`, `downloadUrl`, image thumbnails when applicable).
14
+ *
15
+ * @example Browser
16
+ * ```ts
17
+ * const file = input.files[0]
18
+ * const media = await sentroy.media.upload("my-bucket", { body: file })
19
+ * console.log(media.url)
20
+ * ```
21
+ *
22
+ * @example Node 18+
23
+ * ```ts
24
+ * import { openAsBlob } from "node:fs"
25
+ * const blob = await openAsBlob("./photo.jpg")
26
+ * const media = await sentroy.media.upload("my-bucket", {
27
+ * body: blob,
28
+ * filename: "photo.jpg",
29
+ * })
30
+ * ```
31
+ */
32
+ upload(bucketSlug: string, params: UploadMediaParams): Promise<Media>;
33
+ /**
34
+ * Delete a file. Cascades through the CDN: S3 objects (original +
35
+ * thumbnails) are removed, then the Media record. If any S3 delete
36
+ * fails the record is kept so you can retry.
37
+ */
38
+ delete(bucketSlug: string, mediaId: string): Promise<void>;
39
+ /**
40
+ * Download a media file. For private buckets this is the only way to
41
+ * fetch the bytes since the CDN public URL won't serve them; the
42
+ * storage app proxies through after auth.
43
+ *
44
+ * Pass `quality` to request a pre-generated thumbnail variant (e.g.
45
+ * `quality: 500` for 500px wide). Falls back to the original if the
46
+ * variant doesn't exist for that file.
47
+ */
48
+ download(bucketSlug: string, mediaId: string, opts?: {
49
+ quality?: number | "original";
50
+ }): Promise<Blob>;
51
+ }
52
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/resources/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EACV,KAAK,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,UAAU,CAAA;AAEjB,qBAAa,aAAa;IACZ,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAEpC,0CAA0C;IACpC,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,eAAe,CAAC;IAO3B,iCAAiC;IAC3B,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAM9D;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,KAAK,CAAC;IAqBjB;;;;OAIG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE;;;;;;;;OAQG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,GACvC,OAAO,CAAC,IAAI,CAAC;CAejB"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaResource = void 0;
4
+ class MediaResource {
5
+ http;
6
+ constructor(http) {
7
+ this.http = http;
8
+ }
9
+ /** List files in a bucket (paginated). */
10
+ async list(bucketSlug, params) {
11
+ return this.http.get(`/buckets/${encodeURIComponent(bucketSlug)}/media`, params);
12
+ }
13
+ /** Get a single media record. */
14
+ async get(bucketSlug, mediaId) {
15
+ return this.http.get(`/buckets/${encodeURIComponent(bucketSlug)}/media/${encodeURIComponent(mediaId)}`);
16
+ }
17
+ /**
18
+ * Upload a file to a bucket. Works in Node and the browser: `body`
19
+ * is a `Blob` or `File`. Returns the full serialized media record
20
+ * (with `url`, `downloadUrl`, image thumbnails when applicable).
21
+ *
22
+ * @example Browser
23
+ * ```ts
24
+ * const file = input.files[0]
25
+ * const media = await sentroy.media.upload("my-bucket", { body: file })
26
+ * console.log(media.url)
27
+ * ```
28
+ *
29
+ * @example Node 18+
30
+ * ```ts
31
+ * import { openAsBlob } from "node:fs"
32
+ * const blob = await openAsBlob("./photo.jpg")
33
+ * const media = await sentroy.media.upload("my-bucket", {
34
+ * body: blob,
35
+ * filename: "photo.jpg",
36
+ * })
37
+ * ```
38
+ */
39
+ async upload(bucketSlug, params) {
40
+ const form = new FormData();
41
+ const filename = params.filename ||
42
+ params.body.name ||
43
+ "upload.bin";
44
+ form.append("file", params.body, filename);
45
+ if (params.folder)
46
+ form.append("folder", params.folder);
47
+ if (params.isPublic !== undefined) {
48
+ form.append("public", params.isPublic ? "true" : "false");
49
+ }
50
+ if (params.alt)
51
+ form.append("alt", params.alt);
52
+ if (params.caption)
53
+ form.append("caption", params.caption);
54
+ if (params.tags?.length)
55
+ form.append("tags", params.tags.join(","));
56
+ return this.http.postForm(`/buckets/${encodeURIComponent(bucketSlug)}/media`, form);
57
+ }
58
+ /**
59
+ * Delete a file. Cascades through the CDN: S3 objects (original +
60
+ * thumbnails) are removed, then the Media record. If any S3 delete
61
+ * fails the record is kept so you can retry.
62
+ */
63
+ async delete(bucketSlug, mediaId) {
64
+ await this.http.del(`/buckets/${encodeURIComponent(bucketSlug)}/media/${encodeURIComponent(mediaId)}`);
65
+ }
66
+ /**
67
+ * Download a media file. For private buckets this is the only way to
68
+ * fetch the bytes since the CDN public URL won't serve them; the
69
+ * storage app proxies through after auth.
70
+ *
71
+ * Pass `quality` to request a pre-generated thumbnail variant (e.g.
72
+ * `quality: 500` for 500px wide). Falls back to the original if the
73
+ * variant doesn't exist for that file.
74
+ */
75
+ async download(bucketSlug, mediaId, opts) {
76
+ const quality = opts?.quality;
77
+ const query = quality && quality !== "original"
78
+ ? { quality: String(quality) }
79
+ : undefined;
80
+ const res = await this.http.fetchRaw(`/buckets/${encodeURIComponent(bucketSlug)}/media/${encodeURIComponent(mediaId)}/download`, { query });
81
+ if (!res.ok) {
82
+ throw new Error(`Download failed with status ${res.status}`);
83
+ }
84
+ return res.blob();
85
+ }
86
+ }
87
+ exports.MediaResource = MediaResource;
88
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/resources/media.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,9 +1,16 @@
1
1
  export interface SentroyClientConfig {
2
- /** Sentroy instance base URL (e.g. "https://sentroy.com") */
2
+ /**
3
+ * Platform root URL, e.g. "https://sentroy.com". Every resource —
4
+ * mail (domains, mailboxes, templates, inbox, send) and storage
5
+ * (buckets, media) — is reached through this single origin. The
6
+ * platform gateway transparently forwards mail requests to the mail
7
+ * subdomain and storage requests to the storage subdomain; consumers
8
+ * never see the split.
9
+ */
3
10
  baseUrl: string;
4
11
  /** Company slug */
5
12
  companySlug: string;
6
- /** Access token (stk_...) */
13
+ /** Access token (stk_...). Same token works for mail + storage. */
7
14
  accessToken: string;
8
15
  /** Request timeout in milliseconds (default: 30000) */
9
16
  timeout?: number;
@@ -111,6 +118,8 @@ export interface SendParams {
111
118
  domainId: string;
112
119
  cc?: string | string[];
113
120
  templateId?: string;
121
+ /** Template language code (e.g. "en", "tr"). Falls back to default if omitted. */
122
+ lang?: string;
114
123
  html?: string;
115
124
  text?: string;
116
125
  variables?: Record<string, string>;
@@ -127,4 +136,94 @@ export interface SendResult {
127
136
  status: string;
128
137
  scheduledAt?: string;
129
138
  }
139
+ export interface Bucket {
140
+ id: string;
141
+ companyId: string;
142
+ name: string;
143
+ slug: string;
144
+ description?: string;
145
+ isPublic: boolean;
146
+ storageUsed: number;
147
+ fileCount: number;
148
+ createdAt: string;
149
+ updatedAt: string;
150
+ }
151
+ export interface CreateBucketParams {
152
+ name: string;
153
+ /** URL-safe slug. Auto-derived from name if omitted. */
154
+ slug?: string;
155
+ description?: string;
156
+ /** Public buckets serve files without auth; private requires proxy. */
157
+ isPublic?: boolean;
158
+ }
159
+ export interface UpdateBucketParams {
160
+ name?: string;
161
+ description?: string;
162
+ /** Toggling cascades to every file's S3 ACL + Media doc. */
163
+ isPublic?: boolean;
164
+ }
165
+ export type MediaType = "image" | "video" | "audio" | "document" | "other";
166
+ export interface MediaThumbnail {
167
+ width: number;
168
+ height: number;
169
+ fileName: string;
170
+ size: number;
171
+ }
172
+ export interface MediaImageMeta {
173
+ width: number;
174
+ height: number;
175
+ orientation: "landscape" | "portrait" | "square";
176
+ thumbnails: MediaThumbnail[];
177
+ }
178
+ export interface Media {
179
+ id: string;
180
+ bucketId: string;
181
+ companyId: string;
182
+ fileName: string;
183
+ originalName: string;
184
+ type: MediaType;
185
+ size: number;
186
+ mimeType: string;
187
+ folder: string;
188
+ uploadedBy: string;
189
+ tags: string[];
190
+ alt?: string;
191
+ caption?: string;
192
+ isPublic: boolean;
193
+ imageMeta?: MediaImageMeta;
194
+ createdAt: string;
195
+ updatedAt: string;
196
+ }
197
+ export interface MediaListResult {
198
+ items: Media[];
199
+ total: number;
200
+ limit: number;
201
+ skip: number;
202
+ }
203
+ export interface MediaListParams {
204
+ type?: MediaType;
205
+ folder?: string;
206
+ limit?: number;
207
+ skip?: number;
208
+ }
209
+ /**
210
+ * Upload input. Works in both Node and the browser:
211
+ * - Node: pass a `Blob` via `new Blob([buffer])` or `File` polyfill.
212
+ * - Browser: pass a `File` (from input) or `Blob` directly.
213
+ *
214
+ * `filename` is required when `body` is a raw `Blob` without a `.name`;
215
+ * otherwise the client reads `body.name` (File) or defaults to
216
+ * `"upload.bin"`.
217
+ */
218
+ export interface UploadMediaParams {
219
+ body: Blob;
220
+ filename?: string;
221
+ /** Folder name inside the bucket (default "uploads"). */
222
+ folder?: string;
223
+ /** Sets media.isPublic; bucket must itself be public for this to take. */
224
+ isPublic?: boolean;
225
+ alt?: string;
226
+ caption?: string;
227
+ tags?: string[];
228
+ }
130
229
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentroy-co/client-sdk",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "description": "Server-side TypeScript SDK for Sentroy platform API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",