@degallery/sdk 0.2.2 → 0.4.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
@@ -1,11 +1,165 @@
1
- # sdk
1
+ # `@degallery/sdk`
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ Framework-neutral TypeScript client for the DeGallery API. Use it from a browser, server, worker, or non-React application when you need typed access to galleries, assets, uploads, links, and delivery events.
4
4
 
5
- ## Building
5
+ ## Product and developer links
6
6
 
7
- Run `nx build sdk` to build the library.
7
+ - [DeGallery landing page](https://degallery.dev)
8
+ - [Developer documentation](https://docs.degallery.dev)
9
+ - [Quickstart](https://docs.degallery.dev/docs/quickstart)
10
+ - [JavaScript installation](https://docs.degallery.dev/docs/javascript/installation)
11
+ - [JavaScript client guide](https://docs.degallery.dev/docs/javascript/get-started)
12
+ - [API and error reference](https://docs.degallery.dev/docs/javascript/errors)
13
+ - [Live demo](https://demo.degallery.dev)
14
+ - [Dashboard](https://app.degallery.dev)
15
+ - [Source repository](https://github.com/mmpotulo28/thegallery)
8
16
 
9
- ## Running unit tests
17
+ ## Install
10
18
 
11
- Run `nx test sdk` to execute the unit tests via [Vitest](https://vitest.dev/).
19
+ ```bash
20
+ pnpm add @degallery/sdk
21
+ ```
22
+
23
+ The package is ESM-first and exports its public client and types from the package root:
24
+
25
+ ```ts
26
+ import { GalleryClient, type Gallery } from '@degallery/sdk';
27
+ ```
28
+
29
+ ## Configure a client
30
+
31
+ ```ts
32
+ import { GalleryClient } from '@degallery/sdk';
33
+
34
+ const client = new GalleryClient({
35
+ apiUrl: process.env.DEGALLERY_API_URL ?? 'https://api.degallery.dev',
36
+ apiKey: process.env.DEGALLERY_API_KEY,
37
+ });
38
+ ```
39
+
40
+ `apiUrl` defaults to `https://api.degallery.dev`. The client also accepts `mediaUrl`, `publishableKey`, `readToken`, and a custom `fetch` implementation. Use a custom `fetch` for a worker runtime, request tracing, or test isolation. Configure `mediaUrl` and call `getPublicGalleryManifest()` when public rendering should read the published manifest directly from the Cloudflare media Worker.
41
+
42
+ The public manifest includes the transformation presets allowed by the current plan. The SDK uses the `large` preset and responsive `srcSet` only when policy allows it; otherwise it serves the original. `downloadUrl` remains the original delivery URL. Private URLs are short-lived; use `@degallery/react` for automatic gallery refresh, or call `createDeliveryCapability()` again from a trusted integration when a private URL expires.
43
+
44
+ ### Credential boundary
45
+
46
+ - Keep `apiKey` on a trusted server or worker.
47
+ - Browser reads should use a publishable key, a short-lived `readToken`, or a server-provided public gallery payload.
48
+ - Publishable keys are restricted to published, public galleries and public assets in their configured organization/environment. They cannot read analytics or private resources.
49
+ - Never expose `DEGALLERY_API_KEY` through `NEXT_PUBLIC_*` variables.
50
+ - Upload credentials and private gallery authorization belong on the server.
51
+
52
+ ## Read a gallery
53
+
54
+ ```ts
55
+ const gallery = await client.getGallery('gallery-id-or-slug');
56
+
57
+ console.log(gallery.name);
58
+ console.log(gallery.layout);
59
+ console.log(gallery.items[0]?.src);
60
+ ```
61
+
62
+ ```ts
63
+ const publicGallery = await new GalleryClient({
64
+ apiUrl: 'https://api.degallery.dev',
65
+ mediaUrl: 'https://media.degallery.dev',
66
+ }).getPublicGalleryManifest('gallery-id');
67
+ ```
68
+
69
+ For lower-level list/detail operations, use the `galleries` resource:
70
+
71
+ ```ts
72
+ const result = await client.galleries.list({ limit: 20 });
73
+ const detail = await client.galleries.retrieve('summer-collection', {
74
+ includeAssets: true,
75
+ });
76
+ const page = await client.galleries.retrievePage('summer-collection', {
77
+ includeAssets: true,
78
+ limit: 9,
79
+ });
80
+ if (page.pagination.nextCursor) {
81
+ const nextPage = await client.galleries.retrievePage('summer-collection', {
82
+ cursor: page.pagination.nextCursor,
83
+ includeAssets: true,
84
+ limit: 9,
85
+ });
86
+ }
87
+ const shareLinks = await client.galleries.link('summer-collection');
88
+ ```
89
+
90
+ Available gallery operations:
91
+
92
+ - `galleries.list(input?)`
93
+ - `galleries.retrieve(idOrSlug, input?)`
94
+ - `galleries.retrievePage(idOrSlug, input?)` (returns `{ gallery, pagination }`)
95
+ - `galleries.create(input)`
96
+ - `galleries.update(idOrSlug, input)`
97
+ - `galleries.attachAssets(idOrSlug, assetIds)`
98
+ - `galleries.link(idOrSlug)`
99
+
100
+ ## Upload an image
101
+
102
+ Uploads use a short-lived intent. Create the intent, upload the exact bytes to the returned URL, then complete the asset:
103
+
104
+ ```ts
105
+ const intent = await client.createUpload({
106
+ alt: 'Studio portrait',
107
+ filename: 'studio.jpg',
108
+ contentType: 'image/jpeg',
109
+ galleryIds: ['gallery-id'],
110
+ size: imageBytes.byteLength,
111
+ visibility: 'public',
112
+ });
113
+
114
+ await fetch(intent.uploadUrl, {
115
+ method: intent.method ?? 'PUT',
116
+ headers: {
117
+ 'Content-Type': intent.contentType ?? 'image/jpeg',
118
+ },
119
+ body: imageBytes,
120
+ });
121
+
122
+ // The intent durably retains alt text, visibility, and gallery attachments.
123
+ // Optional completion fields can override those values for this completion.
124
+ const asset = await client.completeUpload(intent.intentId);
125
+ ```
126
+
127
+ The upload URL expires. Treat completion as part of the same workflow and retry safely from your server when a network request fails.
128
+
129
+ ## Work with assets
130
+
131
+ ```ts
132
+ const assets = await client.assets.list({
133
+ galleryId: 'gallery-id',
134
+ visibility: 'public',
135
+ limit: 50,
136
+ });
137
+
138
+ const asset = await client.assets.retrieve('asset-id');
139
+ const updated = await client.assets.update('asset-id', {
140
+ alt: 'Updated accessible description',
141
+ });
142
+ ```
143
+
144
+ ## Track browser events
145
+
146
+ ```ts
147
+ await client.track({
148
+ event: 'gallery_view',
149
+ galleryId: 'gallery-id',
150
+ });
151
+ ```
152
+
153
+ Supported event names are `gallery_view`, `image_view`, `interaction`, and `download`. The client adds `occurredAt` when it is not supplied.
154
+
155
+ The SDK batches browser events in memory (20 events or two seconds by default) and sends them to the Cloudflare analytics Worker at `https://analytics.degallery.dev/v1/events`. Configure `analyticsUrl`, `analyticsBatchSize`, or `analyticsFlushIntervalMs` through `GalleryClient`/`GalleryProvider`; call `flushEvents()` when an application is going into the background or during deterministic tests. The Worker validates and queues the batch, a queue consumer writes delivery-neutral facts to Analytics Engine, and a scheduled synchronizer persists accepted events and rollups to the API/Postgres control plane. Browser events are untrusted telemetry and are never the billing or quota authority.
156
+
157
+ The legacy API event route remains available for older clients during migration, but new SDK traffic should use the Worker path.
158
+
159
+ Published non-private galleries may send these browser events without an API key; the API resolves the gallery scope server-side and applies bounded payload, idempotency, and rate-limit controls. Authenticated integrations may still use a publishable key for scoped event ingestion.
160
+
161
+ ## Public types
162
+
163
+ The package exports `GalleryClient`, `Gallery`, `GalleryDetail`, `GallerySummary`, `GalleryItem`, `GalleryLayout`, `GalleryInput`, `GalleryEvent`, `Asset`, upload inputs, and API response types.
164
+
165
+ Supported layouts are `Grid`, `Masonry`, `Justified`, `Single`, `Carousel`, and `Stack`.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var p=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var m=(r,t)=>{for(var e in t)p(r,e,{get:t[e],enumerable:!0})},I=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of h(t))!g.call(r,n)&&n!==e&&p(r,n,{get:()=>t[n],enumerable:!(s=y(t,n))||s.enumerable});return r};var C=r=>I(p({},"__esModule",{value:!0}),r);var v={};m(v,{GalleryClient:()=>u});module.exports=C(v);var i=class{constructor(t){this.httpClient=t}httpClient;async complete(t){return this.httpClient.post("/api/v1/assets",t)}async list(t={}){return this.httpClient.getList("/api/v1/assets",t)}async retrieve(t){return this.httpClient.get(`/api/v1/assets/${encodeURIComponent(t)}`)}async update(t,e){return this.httpClient.patch(`/api/v1/assets/${encodeURIComponent(t)}`,e)}};var a=class{constructor(t){this.httpClient=t}httpClient;async attachAssets(t,e){return this.httpClient.post(`/api/v1/galleries/${encodeURIComponent(t)}/assets`,{assetIds:e})}async create(t){return this.httpClient.post("/api/v1/galleries",t)}async link(t){return this.httpClient.get(`/api/v1/galleries/${encodeURIComponent(t)}/link`)}async list(t={}){return this.httpClient.getList("/api/v1/galleries",t)}async retrieve(t,e={}){return this.httpClient.get(`/api/v1/galleries/${encodeURIComponent(t)}`,{...e,include:e.includeAssets?"assets":void 0,includeAssets:void 0})}async update(t,e){this.httpClient.patch(`/api/v1/galleries/${encodeURIComponent(t)}`,e)}};var o=class{constructor(t){this.options=t}options;async get(t,e){return this.requestData(t,{method:"GET"},e)}async getList(t,e){return this.requestList(t,{method:"GET"},e)}async patch(t,e){return this.requestData(t,{body:JSON.stringify(e),method:"PATCH"})}async post(t,e){return this.requestData(t,{body:JSON.stringify(e),method:"POST"})}async requestData(t,e={},s){let n=await this.rawRequest(t,e,s);if(!n.ok)throw await this.toError(n);return(await n.json()).data}async requestList(t,e={},s){let n=await this.rawRequest(t,e,s);if(!n.ok)throw await this.toError(n);return await n.json()}async rawRequest(t,e={},s){let n=this.options.fetch??fetch,c=new URL(t,this.options.apiUrl);for(let[d,l]of Object.entries(s??{}))l!=null&&c.searchParams.set(d,String(l));return n(c,{...e,headers:{"content-type":"application/json",...this.authToken?{authorization:`Bearer ${this.authToken}`}:{},...e.headers}})}get authToken(){return this.options.apiKey??this.options.readToken??this.options.publishableKey}async toError(t){let e=await t.json().catch(()=>{}),s=e?.error?.message??`The Gallery API request failed: ${t.status}`,n=new Error(s);return n.name=e?.error?.code??"GalleryApiError",n}};var u=class r{static DEFAULT_OPTIONS={apiUrl:"https://api.degallery.mpotulo.com",fetch};galleries;assets;httpClient;constructor(t={}){let e={...r.DEFAULT_OPTIONS,...t},s=new o(e);this.httpClient=s,this.galleries=new a(s),this.assets=new i(s)}async createUpload(t){let e=await this.httpClient.post("/api/v1/uploads",t);return{...e.upload,asset:e.asset,contentType:e.upload.contentType,expiresAt:e.upload.expiresAt,intentId:e.upload.intentId,uploadUrl:e.upload.uploadUrl}}async completeUpload(t){return this.assets.complete({uploadIntentId:t})}async getGallery(t){let e=await this.galleries.retrieve(t,{includeAssets:!0});return{access:e.visibility==="public"?"public":"private",description:e.description,id:e.id,items:e.items?.map(s=>({alt:s.asset.alt,downloadUrl:s.asset.delivery.downloadUrl,id:s.asset.id,src:s.asset.delivery.src}))??[],layout:e.layout,name:e.name,slug:e.slug}}async track(t){let e=await this.httpClient.rawRequest("/api/v1/events",{body:JSON.stringify({...t,occurredAt:t.occurredAt??new Date().toISOString()}),keepalive:!0,method:"POST"});if(!e.ok)throw new Error(`Event ingestion failed: ${e.status}`)}};0&&(module.exports={GalleryClient});
1
+ "use strict";var g=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var w=(n,t)=>{for(var e in t)g(n,e,{get:t[e],enumerable:!0})},A=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of f(t))!I.call(n,s)&&s!==e&&g(n,s,{get:()=>t[s],enumerable:!(i=b(t,s))||i.enumerable});return n};var G=n=>A(g({},"__esModule",{value:!0}),n);var C={};w(C,{GalleryApiError:()=>l,GalleryClient:()=>h,createPublicImageVariants:()=>m});module.exports=G(C);var c=class{constructor(t){this.httpClient=t}httpClient;async complete(t){let{idempotencyKey:e,...i}=t;return this.httpClient.post("/api/v1/assets",i,e?{"idempotency-key":e}:void 0)}async replace(t,e){let{idempotencyKey:i,...s}=e;return this.httpClient.post(`/api/v1/assets/${encodeURIComponent(t)}/replace`,s,i?{"idempotency-key":i}:void 0)}async list(t={}){return this.httpClient.getList("/api/v1/assets",t)}async retrieve(t){return this.httpClient.get(`/api/v1/assets/${encodeURIComponent(t)}`)}async update(t,e){return this.httpClient.patch(`/api/v1/assets/${encodeURIComponent(t)}`,e)}};var d=class{constructor(t){this.httpClient=t}httpClient;async attachAssets(t,e){return this.httpClient.post(`/api/v1/galleries/${encodeURIComponent(t)}/assets`,{assetIds:e})}async create(t){return this.httpClient.post("/api/v1/galleries",t)}async link(t){return this.httpClient.get(`/api/v1/galleries/${encodeURIComponent(t)}/link`)}async list(t={}){return this.httpClient.getList("/api/v1/galleries",t)}async retrieve(t,e={}){return this.httpClient.get(`/api/v1/galleries/${encodeURIComponent(t)}`,{...e,include:e.includeAssets?"assets":void 0,includeAssets:void 0})}async retrievePage(t,e={}){let i=await this.httpClient.getWithMeta(`/api/v1/galleries/${encodeURIComponent(t)}`,{...e,include:e.includeAssets?"assets":void 0,includeAssets:void 0}),s=i.meta?.pagination;return{gallery:i.data,pagination:s??{cursor:e.cursor??null,limit:e.limit??i.data.items?.length??0,nextCursor:null}}}async update(t,e){return this.httpClient.patch(`/api/v1/galleries/${encodeURIComponent(t)}`,e)}};var l=class extends Error{code;requestId;status;constructor(t){super(t.message),this.name=t.code,this.code=t.code,this.requestId=t.requestId,this.status=t.status}};var p=class{constructor(t){this.options=t}options;async get(t,e){return this.requestData(t,{method:"GET"},e)}async getWithMeta(t,e){let i=await this.rawRequest(t,{method:"GET"},e);if(!i.ok)throw await this.toError(i);return await i.json()}async getList(t,e){return this.requestList(t,{method:"GET"},e)}async patch(t,e){return this.requestData(t,{body:JSON.stringify(e),method:"PATCH"})}async post(t,e,i){return this.requestData(t,{body:JSON.stringify(e),headers:i,method:"POST"})}async requestData(t,e={},i){let s=await this.rawRequest(t,e,i);if(!s.ok)throw await this.toError(s);return(await s.json()).data}async requestList(t,e={},i){let s=await this.rawRequest(t,e,i);if(!s.ok)throw await this.toError(s);return await s.json()}async rawRequest(t,e={},i){let s=this.options.fetch??fetch,r=new URL(t,this.options.apiUrl),o=T();for(let[a,u]of Object.entries(i??{}))u!=null&&r.searchParams.set(a,String(u));return s(r,{...e,headers:{"content-type":"application/json",...this.authToken?{authorization:`Bearer ${this.authToken}`}:{},"x-request-id":o,...e.headers}})}get authToken(){return this.options.apiKey??this.options.readToken??this.options.publishableKey}async toError(t){let e=await t.json().catch(()=>{}),i=e?.error?.message??`The Gallery API request failed: ${t.status}`;return new l({code:e?.error?.code??"GalleryApiError",message:i,requestId:e?.error?.requestId??t.headers.get("x-request-id")??void 0,status:t.status})}};function T(){if(globalThis.crypto?.randomUUID)return globalThis.crypto.randomUUID();if(globalThis.crypto?.getRandomValues)return[...globalThis.crypto.getRandomValues(new Uint8Array(16))].map(t=>t.toString(16).padStart(2,"0")).join("");throw new Error("Secure random number generation is unavailable.")}var h=class n{static DEFAULT_OPTIONS={apiUrl:"https://api.degallery.dev",fetch};galleries;assets;httpClient;mediaHttpClient;mediaBase;analyticsHttpClient;analyticsBatchSize;analyticsFlushIntervalMs;analyticsQueue=[];analyticsFlushTimer;analyticsFlushPromise;constructor(t={}){let e={...n.DEFAULT_OPTIONS,...t},i=new p(e);this.httpClient=i,this.mediaBase=e.mediaUrl?.replace(/\/$/,""),this.mediaHttpClient=this.mediaBase?new p({apiUrl:this.mediaBase,fetch:e.fetch}):void 0;let s=(e.analyticsUrl??"https://analytics.degallery.dev").replace(/\/$/,"");this.analyticsHttpClient=new p({apiUrl:s,fetch:e.fetch}),this.analyticsBatchSize=Math.min(Math.max(Math.floor(e.analyticsBatchSize??20),1),100),this.analyticsFlushIntervalMs=Math.min(Math.max(Math.floor(e.analyticsFlushIntervalMs??2e3),250),6e4),this.galleries=new d(i),this.assets=new c(i)}async createUpload(t){let{idempotencyKey:e,...i}=t,s=await this.httpClient.post("/api/v1/uploads",i,e?{"idempotency-key":e}:void 0);return{...s.upload,asset:s.asset,contentType:s.upload.contentType,expiresAt:s.upload.expiresAt,intentId:s.upload.intentId,uploadUrl:s.upload.uploadUrl}}async completeUpload(t,e={}){return this.assets.complete({uploadIntentId:t,...e})}async createDeliveryCapability(t,e="original"){return this.httpClient.post(`/api/v1/assets/${encodeURIComponent(t)}/capability`,{preset:e})}async getPublicGalleryManifest(t){if(!this.mediaHttpClient)throw new l({code:"MEDIA_URL_REQUIRED",message:"mediaUrl is required to retrieve an edge gallery manifest.",status:500});let e=this.mediaBase;if(!e)throw new Error("Media base is unavailable.");let i=await this.mediaHttpClient.get(`/v1/public/galleries/${encodeURIComponent(t)}/manifest`,{limit:500});return{access:"public",description:i.description,id:i.galleryId,items:i.items.map(s=>{let r=`${e}/v1/public/${s.assetId}/${s.assetRevision}`,o=m(r,i.allowedPresets);return{alt:s.alt??"Gallery image",downloadUrl:r,id:s.assetId,position:s.position,revision:s.assetRevision,src:o.src,srcSet:o.srcSet,thumbnailSrc:o.thumbnailSrc,visibility:"public"}}),layout:i.layout,name:i.title,slug:i.slug}}async getPublicGalleryManifestPage(t,e={}){if(!this.mediaHttpClient)throw new l({code:"MEDIA_URL_REQUIRED",message:"mediaUrl is required to retrieve an edge gallery manifest.",status:500});let i=await this.mediaHttpClient.getWithMeta(`/v1/public/galleries/${encodeURIComponent(t)}/manifest`,e),s=i.data,r=this.mediaBase;if(!r)throw new Error("Media base is unavailable.");let o=i.meta?.pagination;return{gallery:{access:"public",description:s.description,id:s.galleryId,items:s.items.map(a=>{let u=`${r}/v1/public/${a.assetId}/${a.assetRevision}`,y=m(u,s.allowedPresets);return{alt:a.alt??"Gallery image",downloadUrl:u,id:a.assetId,position:a.position,revision:a.assetRevision,src:y.src,srcSet:y.srcSet,thumbnailSrc:y.thumbnailSrc,visibility:"public"}}),layout:s.layout,name:s.title,slug:s.slug},pagination:o??{cursor:e.cursor??null,limit:e.limit??s.items.length,nextCursor:null}}}async getGallery(t){let e=await this.galleries.retrieve(t,{includeAssets:!0});return{access:e.visibility==="public"?"public":"private",description:e.description,id:e.id,items:e.items?.map(i=>({alt:i.asset.alt,downloadUrl:i.asset.delivery.downloadUrl,id:i.asset.id,revision:i.asset.revision,src:i.asset.delivery.src,deliveryExpiresAt:i.asset.delivery.expiresAt,visibility:i.asset.visibility}))??[],layout:e.layout,name:e.name,slug:e.slug}}track(t){let e={...t,eventId:t.eventId??v(),occurredAt:t.occurredAt??new Date().toISOString()};return new Promise((i,s)=>{if(this.analyticsQueue.push({event:e,reject:s,resolve:i}),this.analyticsQueue.length>=this.analyticsBatchSize){this.flushEvents().catch(()=>{});return}this.scheduleAnalyticsFlush()})}async flushEvents(){if(this.analyticsFlushPromise)return this.analyticsFlushPromise;if(!this.analyticsQueue.length)return;this.analyticsFlushTimer!==void 0&&(clearTimeout(this.analyticsFlushTimer),this.analyticsFlushTimer=void 0);let t=this.analyticsQueue.splice(0,this.analyticsBatchSize);return this.analyticsFlushPromise=this.sendAnalyticsBatch(t).then(()=>{for(let e of t)e.resolve()}).catch(e=>{for(let i of t)i.reject(e);throw e}).finally(()=>{this.analyticsFlushPromise=void 0,this.analyticsQueue.length&&this.scheduleAnalyticsFlush()}),this.analyticsFlushPromise}scheduleAnalyticsFlush(){this.analyticsFlushTimer===void 0&&(this.analyticsFlushTimer=setTimeout(()=>{this.analyticsFlushTimer=void 0,this.flushEvents().catch(()=>{})},this.analyticsFlushIntervalMs))}async sendAnalyticsBatch(t){let e=await this.analyticsHttpClient.rawRequest("/v1/events",{body:JSON.stringify({events:t.map(i=>i.event)}),headers:{"x-request-id":v()},keepalive:!0,method:"POST"});if(!e.ok)throw new Error(`Event ingestion failed: ${e.status}`)}};function m(n,t=["original"]){try{let e=new URL(n);if(!/^\/v1\/public\/[0-9a-f-]+\/\d+$/i.test(e.pathname))return{src:n,srcSet:void 0,thumbnailSrc:void 0};if(!t.includes("large"))return{src:n,srcSet:void 0,thumbnailSrc:void 0};let i=new URL(e);i.searchParams.set("preset","large");let s=new URL(e);return t.includes("thumbnail")&&s.searchParams.set("preset","thumbnail"),{src:i.toString(),srcSet:t.includes("thumbnail")?`${s.toString()} 320w, ${i.toString()} 1600w`:`${i.toString()} 1600w`,thumbnailSrc:t.includes("thumbnail")?s.toString():void 0}}catch{return{src:n,srcSet:void 0,thumbnailSrc:void 0}}}function v(){if(globalThis.crypto?.randomUUID)return globalThis.crypto.randomUUID();let n=new Uint8Array(16);if(globalThis.crypto?.getRandomValues?.(n),!n.some(Boolean))throw new Error("Secure event ID generation is unavailable.");n[6]=n[6]&15|64,n[8]=n[8]&63|128;let t=Array.from(n,e=>e.toString(16).padStart(2,"0"));return`${t.slice(0,4).join("")}-${t.slice(4,6).join("")}-${t.slice(6,8).join("")}-${t.slice(8,10).join("")}-${t.slice(10).join("")}`}0&&(module.exports={GalleryApiError,GalleryClient,createPublicImageVariants});
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var i=class{constructor(t){this.httpClient=t}httpClient;async complete(t){return this.httpClient.post("/api/v1/assets",t)}async list(t={}){return this.httpClient.getList("/api/v1/assets",t)}async retrieve(t){return this.httpClient.get(`/api/v1/assets/${encodeURIComponent(t)}`)}async update(t,e){return this.httpClient.patch(`/api/v1/assets/${encodeURIComponent(t)}`,e)}};var a=class{constructor(t){this.httpClient=t}httpClient;async attachAssets(t,e){return this.httpClient.post(`/api/v1/galleries/${encodeURIComponent(t)}/assets`,{assetIds:e})}async create(t){return this.httpClient.post("/api/v1/galleries",t)}async link(t){return this.httpClient.get(`/api/v1/galleries/${encodeURIComponent(t)}/link`)}async list(t={}){return this.httpClient.getList("/api/v1/galleries",t)}async retrieve(t,e={}){return this.httpClient.get(`/api/v1/galleries/${encodeURIComponent(t)}`,{...e,include:e.includeAssets?"assets":void 0,includeAssets:void 0})}async update(t,e){this.httpClient.patch(`/api/v1/galleries/${encodeURIComponent(t)}`,e)}};var o=class{constructor(t){this.options=t}options;async get(t,e){return this.requestData(t,{method:"GET"},e)}async getList(t,e){return this.requestList(t,{method:"GET"},e)}async patch(t,e){return this.requestData(t,{body:JSON.stringify(e),method:"PATCH"})}async post(t,e){return this.requestData(t,{body:JSON.stringify(e),method:"POST"})}async requestData(t,e={},s){let n=await this.rawRequest(t,e,s);if(!n.ok)throw await this.toError(n);return(await n.json()).data}async requestList(t,e={},s){let n=await this.rawRequest(t,e,s);if(!n.ok)throw await this.toError(n);return await n.json()}async rawRequest(t,e={},s){let n=this.options.fetch??fetch,p=new URL(t,this.options.apiUrl);for(let[c,l]of Object.entries(s??{}))l!=null&&p.searchParams.set(c,String(l));return n(p,{...e,headers:{"content-type":"application/json",...this.authToken?{authorization:`Bearer ${this.authToken}`}:{},...e.headers}})}get authToken(){return this.options.apiKey??this.options.readToken??this.options.publishableKey}async toError(t){let e=await t.json().catch(()=>{}),s=e?.error?.message??`The Gallery API request failed: ${t.status}`,n=new Error(s);return n.name=e?.error?.code??"GalleryApiError",n}};var u=class r{static DEFAULT_OPTIONS={apiUrl:"https://api.degallery.mpotulo.com",fetch};galleries;assets;httpClient;constructor(t={}){let e={...r.DEFAULT_OPTIONS,...t},s=new o(e);this.httpClient=s,this.galleries=new a(s),this.assets=new i(s)}async createUpload(t){let e=await this.httpClient.post("/api/v1/uploads",t);return{...e.upload,asset:e.asset,contentType:e.upload.contentType,expiresAt:e.upload.expiresAt,intentId:e.upload.intentId,uploadUrl:e.upload.uploadUrl}}async completeUpload(t){return this.assets.complete({uploadIntentId:t})}async getGallery(t){let e=await this.galleries.retrieve(t,{includeAssets:!0});return{access:e.visibility==="public"?"public":"private",description:e.description,id:e.id,items:e.items?.map(s=>({alt:s.asset.alt,downloadUrl:s.asset.delivery.downloadUrl,id:s.asset.id,src:s.asset.delivery.src}))??[],layout:e.layout,name:e.name,slug:e.slug}}async track(t){let e=await this.httpClient.rawRequest("/api/v1/events",{body:JSON.stringify({...t,occurredAt:t.occurredAt??new Date().toISOString()}),keepalive:!0,method:"POST"});if(!e.ok)throw new Error(`Event ingestion failed: ${e.status}`)}};export{u as GalleryClient};
1
+ var c=class{constructor(t){this.httpClient=t}httpClient;async complete(t){let{idempotencyKey:e,...i}=t;return this.httpClient.post("/api/v1/assets",i,e?{"idempotency-key":e}:void 0)}async replace(t,e){let{idempotencyKey:i,...s}=e;return this.httpClient.post(`/api/v1/assets/${encodeURIComponent(t)}/replace`,s,i?{"idempotency-key":i}:void 0)}async list(t={}){return this.httpClient.getList("/api/v1/assets",t)}async retrieve(t){return this.httpClient.get(`/api/v1/assets/${encodeURIComponent(t)}`)}async update(t,e){return this.httpClient.patch(`/api/v1/assets/${encodeURIComponent(t)}`,e)}};var d=class{constructor(t){this.httpClient=t}httpClient;async attachAssets(t,e){return this.httpClient.post(`/api/v1/galleries/${encodeURIComponent(t)}/assets`,{assetIds:e})}async create(t){return this.httpClient.post("/api/v1/galleries",t)}async link(t){return this.httpClient.get(`/api/v1/galleries/${encodeURIComponent(t)}/link`)}async list(t={}){return this.httpClient.getList("/api/v1/galleries",t)}async retrieve(t,e={}){return this.httpClient.get(`/api/v1/galleries/${encodeURIComponent(t)}`,{...e,include:e.includeAssets?"assets":void 0,includeAssets:void 0})}async retrievePage(t,e={}){let i=await this.httpClient.getWithMeta(`/api/v1/galleries/${encodeURIComponent(t)}`,{...e,include:e.includeAssets?"assets":void 0,includeAssets:void 0}),s=i.meta?.pagination;return{gallery:i.data,pagination:s??{cursor:e.cursor??null,limit:e.limit??i.data.items?.length??0,nextCursor:null}}}async update(t,e){return this.httpClient.patch(`/api/v1/galleries/${encodeURIComponent(t)}`,e)}};var o=class extends Error{code;requestId;status;constructor(t){super(t.message),this.name=t.code,this.code=t.code,this.requestId=t.requestId,this.status=t.status}};var p=class{constructor(t){this.options=t}options;async get(t,e){return this.requestData(t,{method:"GET"},e)}async getWithMeta(t,e){let i=await this.rawRequest(t,{method:"GET"},e);if(!i.ok)throw await this.toError(i);return await i.json()}async getList(t,e){return this.requestList(t,{method:"GET"},e)}async patch(t,e){return this.requestData(t,{body:JSON.stringify(e),method:"PATCH"})}async post(t,e,i){return this.requestData(t,{body:JSON.stringify(e),headers:i,method:"POST"})}async requestData(t,e={},i){let s=await this.rawRequest(t,e,i);if(!s.ok)throw await this.toError(s);return(await s.json()).data}async requestList(t,e={},i){let s=await this.rawRequest(t,e,i);if(!s.ok)throw await this.toError(s);return await s.json()}async rawRequest(t,e={},i){let s=this.options.fetch??fetch,r=new URL(t,this.options.apiUrl),l=v();for(let[a,u]of Object.entries(i??{}))u!=null&&r.searchParams.set(a,String(u));return s(r,{...e,headers:{"content-type":"application/json",...this.authToken?{authorization:`Bearer ${this.authToken}`}:{},"x-request-id":l,...e.headers}})}get authToken(){return this.options.apiKey??this.options.readToken??this.options.publishableKey}async toError(t){let e=await t.json().catch(()=>{}),i=e?.error?.message??`The Gallery API request failed: ${t.status}`;return new o({code:e?.error?.code??"GalleryApiError",message:i,requestId:e?.error?.requestId??t.headers.get("x-request-id")??void 0,status:t.status})}};function v(){if(globalThis.crypto?.randomUUID)return globalThis.crypto.randomUUID();if(globalThis.crypto?.getRandomValues)return[...globalThis.crypto.getRandomValues(new Uint8Array(16))].map(t=>t.toString(16).padStart(2,"0")).join("");throw new Error("Secure random number generation is unavailable.")}var g=class n{static DEFAULT_OPTIONS={apiUrl:"https://api.degallery.dev",fetch};galleries;assets;httpClient;mediaHttpClient;mediaBase;analyticsHttpClient;analyticsBatchSize;analyticsFlushIntervalMs;analyticsQueue=[];analyticsFlushTimer;analyticsFlushPromise;constructor(t={}){let e={...n.DEFAULT_OPTIONS,...t},i=new p(e);this.httpClient=i,this.mediaBase=e.mediaUrl?.replace(/\/$/,""),this.mediaHttpClient=this.mediaBase?new p({apiUrl:this.mediaBase,fetch:e.fetch}):void 0;let s=(e.analyticsUrl??"https://analytics.degallery.dev").replace(/\/$/,"");this.analyticsHttpClient=new p({apiUrl:s,fetch:e.fetch}),this.analyticsBatchSize=Math.min(Math.max(Math.floor(e.analyticsBatchSize??20),1),100),this.analyticsFlushIntervalMs=Math.min(Math.max(Math.floor(e.analyticsFlushIntervalMs??2e3),250),6e4),this.galleries=new d(i),this.assets=new c(i)}async createUpload(t){let{idempotencyKey:e,...i}=t,s=await this.httpClient.post("/api/v1/uploads",i,e?{"idempotency-key":e}:void 0);return{...s.upload,asset:s.asset,contentType:s.upload.contentType,expiresAt:s.upload.expiresAt,intentId:s.upload.intentId,uploadUrl:s.upload.uploadUrl}}async completeUpload(t,e={}){return this.assets.complete({uploadIntentId:t,...e})}async createDeliveryCapability(t,e="original"){return this.httpClient.post(`/api/v1/assets/${encodeURIComponent(t)}/capability`,{preset:e})}async getPublicGalleryManifest(t){if(!this.mediaHttpClient)throw new o({code:"MEDIA_URL_REQUIRED",message:"mediaUrl is required to retrieve an edge gallery manifest.",status:500});let e=this.mediaBase;if(!e)throw new Error("Media base is unavailable.");let i=await this.mediaHttpClient.get(`/v1/public/galleries/${encodeURIComponent(t)}/manifest`,{limit:500});return{access:"public",description:i.description,id:i.galleryId,items:i.items.map(s=>{let r=`${e}/v1/public/${s.assetId}/${s.assetRevision}`,l=h(r,i.allowedPresets);return{alt:s.alt??"Gallery image",downloadUrl:r,id:s.assetId,position:s.position,revision:s.assetRevision,src:l.src,srcSet:l.srcSet,thumbnailSrc:l.thumbnailSrc,visibility:"public"}}),layout:i.layout,name:i.title,slug:i.slug}}async getPublicGalleryManifestPage(t,e={}){if(!this.mediaHttpClient)throw new o({code:"MEDIA_URL_REQUIRED",message:"mediaUrl is required to retrieve an edge gallery manifest.",status:500});let i=await this.mediaHttpClient.getWithMeta(`/v1/public/galleries/${encodeURIComponent(t)}/manifest`,e),s=i.data,r=this.mediaBase;if(!r)throw new Error("Media base is unavailable.");let l=i.meta?.pagination;return{gallery:{access:"public",description:s.description,id:s.galleryId,items:s.items.map(a=>{let u=`${r}/v1/public/${a.assetId}/${a.assetRevision}`,y=h(u,s.allowedPresets);return{alt:a.alt??"Gallery image",downloadUrl:u,id:a.assetId,position:a.position,revision:a.assetRevision,src:y.src,srcSet:y.srcSet,thumbnailSrc:y.thumbnailSrc,visibility:"public"}}),layout:s.layout,name:s.title,slug:s.slug},pagination:l??{cursor:e.cursor??null,limit:e.limit??s.items.length,nextCursor:null}}}async getGallery(t){let e=await this.galleries.retrieve(t,{includeAssets:!0});return{access:e.visibility==="public"?"public":"private",description:e.description,id:e.id,items:e.items?.map(i=>({alt:i.asset.alt,downloadUrl:i.asset.delivery.downloadUrl,id:i.asset.id,revision:i.asset.revision,src:i.asset.delivery.src,deliveryExpiresAt:i.asset.delivery.expiresAt,visibility:i.asset.visibility}))??[],layout:e.layout,name:e.name,slug:e.slug}}track(t){let e={...t,eventId:t.eventId??m(),occurredAt:t.occurredAt??new Date().toISOString()};return new Promise((i,s)=>{if(this.analyticsQueue.push({event:e,reject:s,resolve:i}),this.analyticsQueue.length>=this.analyticsBatchSize){this.flushEvents().catch(()=>{});return}this.scheduleAnalyticsFlush()})}async flushEvents(){if(this.analyticsFlushPromise)return this.analyticsFlushPromise;if(!this.analyticsQueue.length)return;this.analyticsFlushTimer!==void 0&&(clearTimeout(this.analyticsFlushTimer),this.analyticsFlushTimer=void 0);let t=this.analyticsQueue.splice(0,this.analyticsBatchSize);return this.analyticsFlushPromise=this.sendAnalyticsBatch(t).then(()=>{for(let e of t)e.resolve()}).catch(e=>{for(let i of t)i.reject(e);throw e}).finally(()=>{this.analyticsFlushPromise=void 0,this.analyticsQueue.length&&this.scheduleAnalyticsFlush()}),this.analyticsFlushPromise}scheduleAnalyticsFlush(){this.analyticsFlushTimer===void 0&&(this.analyticsFlushTimer=setTimeout(()=>{this.analyticsFlushTimer=void 0,this.flushEvents().catch(()=>{})},this.analyticsFlushIntervalMs))}async sendAnalyticsBatch(t){let e=await this.analyticsHttpClient.rawRequest("/v1/events",{body:JSON.stringify({events:t.map(i=>i.event)}),headers:{"x-request-id":m()},keepalive:!0,method:"POST"});if(!e.ok)throw new Error(`Event ingestion failed: ${e.status}`)}};function h(n,t=["original"]){try{let e=new URL(n);if(!/^\/v1\/public\/[0-9a-f-]+\/\d+$/i.test(e.pathname))return{src:n,srcSet:void 0,thumbnailSrc:void 0};if(!t.includes("large"))return{src:n,srcSet:void 0,thumbnailSrc:void 0};let i=new URL(e);i.searchParams.set("preset","large");let s=new URL(e);return t.includes("thumbnail")&&s.searchParams.set("preset","thumbnail"),{src:i.toString(),srcSet:t.includes("thumbnail")?`${s.toString()} 320w, ${i.toString()} 1600w`:`${i.toString()} 1600w`,thumbnailSrc:t.includes("thumbnail")?s.toString():void 0}}catch{return{src:n,srcSet:void 0,thumbnailSrc:void 0}}}function m(){if(globalThis.crypto?.randomUUID)return globalThis.crypto.randomUUID();let n=new Uint8Array(16);if(globalThis.crypto?.getRandomValues?.(n),!n.some(Boolean))throw new Error("Secure event ID generation is unavailable.");n[6]=n[6]&15|64,n[8]=n[8]&63|128;let t=Array.from(n,e=>e.toString(16).padStart(2,"0"));return`${t.slice(0,4).join("")}-${t.slice(4,6).join("")}-${t.slice(6,8).join("")}-${t.slice(8,10).join("")}-${t.slice(10).join("")}`}export{o as GalleryApiError,g as GalleryClient,h as createPublicImageVariants};
@@ -1,5 +1,5 @@
1
1
  import { HttpClient } from './http.client.js';
2
- import { CompleteAssetInput, Asset, ListAssetsInput } from './types.js';
2
+ import { Asset, CompleteAssetInput, ListAssetsInput, ReplaceAssetInput } from './types.js';
3
3
  /**
4
4
  * Provides operations for creating, listing, retrieving, and updating assets.
5
5
  */
@@ -13,6 +13,8 @@ export declare class Assets {
13
13
  * @returns The newly created asset.
14
14
  */
15
15
  complete(input: CompleteAssetInput): Promise<Asset>;
16
+ /** Replaces an existing asset's original while preserving its ID and gallery references. */
17
+ replace(assetId: string, input: ReplaceAssetInput): Promise<Asset>;
16
18
  /**
17
19
  * Lists assets matching the supplied filters.
18
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"assets.client.d.ts","sourceRoot":"","sources":["../../src/lib/assets.client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAExE;;GAEG;AACH,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,kBAAkB;IAIxC;;;;;OAKG;IACG,IAAI,CAAC,KAAK,GAAE,eAAoB;IAItC;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM;IAM9B;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC;CAMjE"}
1
+ {"version":3,"file":"assets.client.d.ts","sourceRoot":"","sources":["../../src/lib/assets.client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,KAAK,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,kBAAkB;IASxC,4FAA4F;IACtF,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB;IASvD;;;;;OAKG;IACG,IAAI,CAAC,KAAK,GAAE,eAAoB;IAItC;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM;IAM9B;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC;CAMjE"}
@@ -1,6 +1,6 @@
1
1
  import { Assets } from './assets.client.js';
2
2
  import { Gallery } from './gallery.client.js';
3
- import type { ClientOptions, GalleryEvent, Gallery as GalleryType, UploadImageInput, UploadIntent } from './types.js';
3
+ import type { ClientOptions, DeliveryCapability, GalleryEvent, GalleryPage, Gallery as GalleryType, UploadImageInput, UploadIntent } from './types.js';
4
4
  /**
5
5
  * Client for interacting with the Gallery API.
6
6
  *
@@ -17,13 +17,21 @@ import type { ClientOptions, GalleryEvent, Gallery as GalleryType, UploadImageIn
17
17
  * been uploaded.
18
18
  * @method getGallery Retrieves a gallery and maps it to the client-facing
19
19
  * gallery shape.
20
- * @method track Sends an analytics event to the Gallery API.
20
+ * @method track Queues an analytics event for batched Worker ingestion.
21
21
  */
22
22
  export declare class GalleryClient {
23
23
  private static readonly DEFAULT_OPTIONS;
24
24
  readonly galleries: Gallery;
25
25
  readonly assets: Assets;
26
26
  private readonly httpClient;
27
+ private readonly mediaHttpClient?;
28
+ private readonly mediaBase?;
29
+ private readonly analyticsHttpClient;
30
+ private readonly analyticsBatchSize;
31
+ private readonly analyticsFlushIntervalMs;
32
+ private analyticsQueue;
33
+ private analyticsFlushTimer;
34
+ private analyticsFlushPromise;
27
35
  /**
28
36
  * Creates a client configured to communicate with the Gallery API.
29
37
  *
@@ -44,7 +52,25 @@ export declare class GalleryClient {
44
52
  * @param intentId The ID of the upload intent to complete.
45
53
  * @returns The completed asset returned by the assets API.
46
54
  */
47
- completeUpload(intentId: string): Promise<import("./types.js").Asset>;
55
+ completeUpload(intentId: string, input?: {
56
+ alt?: string;
57
+ galleryIds?: string[];
58
+ title?: string;
59
+ visibility?: 'private' | 'public';
60
+ }): Promise<import("./types.js").Asset>;
61
+ /** Issues a short-lived private delivery URL for a scoped asset. */
62
+ createDeliveryCapability(assetId: string, preset?: 'original' | 'thumbnail' | 'large'): Promise<DeliveryCapability>;
63
+ /**
64
+ * Retrieves a public gallery manifest from the Cloudflare media plane.
65
+ * This is additive; callers that do not configure `mediaUrl` continue to
66
+ * use the canonical API-backed `getGallery` method.
67
+ */
68
+ getPublicGalleryManifest(id: string): Promise<GalleryType>;
69
+ /** Retrieves one cursor-paginated page from the public edge manifest. */
70
+ getPublicGalleryManifestPage(id: string, input?: {
71
+ cursor?: string;
72
+ limit?: number;
73
+ }): Promise<GalleryPage<GalleryType>>;
48
74
  /**
49
75
  * Retrieves a gallery and maps it to the client-facing gallery shape.
50
76
  *
@@ -55,17 +81,20 @@ export declare class GalleryClient {
55
81
  * @returns The gallery metadata and its available items.
56
82
  */
57
83
  getGallery(id: string): Promise<GalleryType>;
58
- /**
59
- * Sends an analytics event to the Gallery API.
60
- *
61
- * If the event does not provide an occurrence time, the current time is
62
- * added automatically. The request is sent with `keepalive` enabled so it
63
- * can complete while a page is unloading.
64
- *
65
- * @param event The gallery event to record.
66
- * @returns A promise that resolves when the event is accepted.
67
- * @throws Error when the API does not return a successful response.
68
- */
84
+ /** Queues an event for batched Cloudflare Worker ingestion. */
69
85
  track(event: GalleryEvent): Promise<void>;
86
+ /** Flushes the current browser analytics batch immediately. */
87
+ flushEvents(): Promise<void>;
88
+ private scheduleAnalyticsFlush;
89
+ private sendAnalyticsBatch;
70
90
  }
91
+ export declare function createPublicImageVariants(source: string, allowedPresets?: readonly string[]): {
92
+ src: string;
93
+ srcSet: undefined;
94
+ thumbnailSrc: undefined;
95
+ } | {
96
+ src: string;
97
+ srcSet: string;
98
+ thumbnailSrc: string | undefined;
99
+ };
71
100
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,OAAO,IAAI,WAAW,EACtB,gBAAgB,EAChB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAGrC;IAGF,SAAgB,SAAS,EAAE,OAAO,CAAC;IACnC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC;;;;;OAKG;gBACS,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM;IAahD;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBlE;;;;;OAKG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM;IAIrC;;;;;;;;OAQG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBlD;;;;;;;;;;OAUG;IACG,KAAK,CAAC,KAAK,EAAE,YAAY;CAYhC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,EAEZ,WAAW,EACX,OAAO,IAAI,WAAW,EACtB,gBAAgB,EAChB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAGrC;IAGF,SAAgB,SAAS,EAAE,OAAO,CAAC;IACnC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAa;IACjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,cAAc,CAId;IACR,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,qBAAqB,CAA4B;IAEzD;;;;;OAKG;gBACS,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM;IAmChD;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAqBlE;;;;;OAKG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;KAC9B;IAKR,oEAAoE;IAC9D,wBAAwB,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,UAAU,GAAG,WAAW,GAAG,OAAoB,GACtD,OAAO,CAAC,kBAAkB,CAAC;IAO9B;;;;OAIG;IACG,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyChE,yEAAyE;IACnE,4BAA4B,CAChC,EAAE,EAAE,MAAM,EACV,KAAK,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC9C,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAoDpC;;;;;;;;OAQG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBlD,+DAA+D;IAC/D,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzC,+DAA+D;IACzD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBlC,OAAO,CAAC,sBAAsB;YAQhB,kBAAkB;CAYjC;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,SAAS,MAAM,EAAiB;;;;;;;;EAyBjD"}
@@ -1,5 +1,5 @@
1
1
  import { HttpClient } from './http.client.js';
2
- import { GalleryDetail, GalleryInput, GalleryLinkPayload, GallerySummary, ListInput } from './types.js';
2
+ import { GalleryDetail, GalleryInput, GalleryLinkPayload, GalleryPage, GallerySummary, ListInput } from './types.js';
3
3
  export declare class Gallery {
4
4
  private readonly httpClient;
5
5
  constructor(httpClient: HttpClient);
@@ -25,11 +25,15 @@ export declare class Gallery {
25
25
  retrieve(galleryIdOrSlug: string, input?: ListInput & {
26
26
  includeAssets?: boolean;
27
27
  }): Promise<GalleryDetail>;
28
+ /** Retrieves a gallery page and preserves the API pagination metadata. */
29
+ retrievePage(galleryIdOrSlug: string, input?: ListInput & {
30
+ includeAssets?: boolean;
31
+ }): Promise<GalleryPage>;
28
32
  /**
29
33
  * Updates a gallery.
30
34
  * @param galleryIdOrSlug Gallery ID or slug.
31
35
  * @param input Fields to update.
32
36
  */
33
- update(galleryIdOrSlug: string, input: Partial<GalleryInput>): Promise<void>;
37
+ update(galleryIdOrSlug: string, input: Partial<GalleryInput>): Promise<GallerySummary>;
34
38
  }
35
39
  //# sourceMappingURL=gallery.client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gallery.client.d.ts","sourceRoot":"","sources":["../../src/lib/gallery.client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD;;;;OAIG;IACG,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAO9D,yBAAyB;IACnB,MAAM,CAAC,KAAK,EAAE,YAAY;IAIhC;;OAEG;IACG,IAAI,CAAC,eAAe,EAAE,MAAM;IAMlC,4EAA4E;IACtE,IAAI,CAAC,KAAK,GAAE,SAAc;IAIhC;;;;OAIG;IACG,QAAQ,CACZ,eAAe,EAAE,MAAM,EACvB,KAAK,GAAE,SAAS,GAAG;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO;IAYrD;;;;OAIG;IACG,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;CAMnE"}
1
+ {"version":3,"file":"gallery.client.d.ts","sourceRoot":"","sources":["../../src/lib/gallery.client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD;;;;OAIG;IACG,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IAO9D,yBAAyB;IACnB,MAAM,CAAC,KAAK,EAAE,YAAY;IAIhC;;OAEG;IACG,IAAI,CAAC,eAAe,EAAE,MAAM;IAMlC,4EAA4E;IACtE,IAAI,CAAC,KAAK,GAAE,SAAc;IAIhC;;;;OAIG;IACG,QAAQ,CACZ,eAAe,EAAE,MAAM,EACvB,KAAK,GAAE,SAAS,GAAG;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO;IAYrD,0EAA0E;IACpE,YAAY,CAChB,eAAe,EAAE,MAAM,EACvB,KAAK,GAAE,SAAS,GAAG;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO,GAClD,OAAO,CAAC,WAAW,CAAC;IAsBvB;;;;OAIG;IACG,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;CAMnE"}
@@ -1,11 +1,14 @@
1
- import { ApiListResponse, ClientOptions } from './types.js';
1
+ import { ApiListResponse, ApiResponse, ClientOptions } from './types.js';
2
2
  export declare class HttpClient {
3
3
  private readonly options;
4
4
  constructor(options: ClientOptions);
5
5
  get<T>(path: string, query?: Record<string, unknown>): Promise<T>;
6
+ getWithMeta<T>(path: string, query?: Record<string, unknown>): Promise<ApiResponse<T> & {
7
+ meta?: Record<string, unknown>;
8
+ }>;
6
9
  getList<T>(path: string, query?: Record<string, unknown>): Promise<ApiListResponse<T>>;
7
10
  patch<T>(path: string, body: unknown): Promise<T>;
8
- post<T>(path: string, body: unknown): Promise<T>;
11
+ post<T>(path: string, body: unknown, headers?: Record<string, string>): Promise<T>;
9
12
  private requestData;
10
13
  private requestList;
11
14
  rawRequest(path: string, init?: RequestInit, query?: Record<string, unknown>): Promise<Response>;
@@ -1 +1 @@
1
- {"version":3,"file":"http.client.d.ts","sourceRoot":"","sources":["../../src/lib/http.client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAe,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzE,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAE7C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIxD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAOpC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;YAO3B,WAAW;YAUX,WAAW;IAUnB,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,EACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsBjC,OAAO,KAAK,SAAS,GAMpB;YAEa,OAAO;CAWtB"}
1
+ {"version":3,"file":"http.client.d.ts","sourceRoot":"","sources":["../../src/lib/http.client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EAEd,MAAM,YAAY,CAAC;AAEpB,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAE7C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpD,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;eAIvD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;IAI5B,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIxD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAOpC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;YAQ7D,WAAW;YAUX,WAAW;IAUnB,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,EACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAwBjC,OAAO,KAAK,SAAS,GAMpB;YAEa,OAAO;CAiBtB"}
@@ -1,5 +1,5 @@
1
1
  export type AccessMode = 'public' | 'private';
2
- export type GalleryLayout = 'Grid' | 'Masonry' | 'Justified' | 'Carousel' | 'Single';
2
+ export type GalleryLayout = 'Grid' | 'Masonry' | 'Justified' | 'Carousel' | 'Single' | 'Stack';
3
3
  export type ApiResponse<T> = {
4
4
  data: T;
5
5
  meta?: Record<string, unknown>;
@@ -12,13 +12,31 @@ export type ApiListResponse<T> = {
12
12
  nextCursor?: string | null;
13
13
  };
14
14
  };
15
+ /** Structured error returned by the Gallery API. */
16
+ export declare class GalleryApiError extends Error {
17
+ readonly code: string;
18
+ readonly requestId?: string;
19
+ readonly status: number;
20
+ constructor(input: {
21
+ code: string;
22
+ message: string;
23
+ requestId?: string;
24
+ status: number;
25
+ });
26
+ }
15
27
  export type GalleryItem = {
16
28
  id: string;
29
+ position?: number;
30
+ revision?: number;
17
31
  src: string;
18
32
  alt: string;
33
+ thumbnailSrc?: string;
19
34
  width?: number;
20
35
  height?: number;
21
36
  downloadUrl?: string;
37
+ srcSet?: string;
38
+ deliveryExpiresAt?: string;
39
+ visibility?: 'private' | 'public' | 'unlisted';
22
40
  };
23
41
  export type Gallery = {
24
42
  id: string;
@@ -29,6 +47,21 @@ export type Gallery = {
29
47
  layout?: GalleryLayout;
30
48
  items: GalleryItem[];
31
49
  };
50
+ export type GalleryManifest = {
51
+ description: string;
52
+ galleryId: string;
53
+ items: Array<{
54
+ alt?: string;
55
+ assetId: string;
56
+ assetRevision: number;
57
+ position: number;
58
+ }>;
59
+ layout: GalleryLayout;
60
+ revision: number;
61
+ allowedPresets?: Array<'original' | 'thumbnail' | 'large'>;
62
+ slug: string;
63
+ title: string;
64
+ };
32
65
  export type Asset = {
33
66
  alt: string;
34
67
  bytes: number;
@@ -36,12 +69,14 @@ export type Asset = {
36
69
  createdAt: string;
37
70
  delivery: {
38
71
  downloadUrl: string;
72
+ expiresAt?: string;
39
73
  originalUrl: string;
40
74
  src: string;
41
75
  };
42
76
  filename: string;
43
77
  galleries?: GalleryReference[];
44
78
  id: string;
79
+ revision: number;
45
80
  status: string;
46
81
  title: string | null;
47
82
  visibility: 'private' | 'public' | 'unlisted';
@@ -75,6 +110,14 @@ export type GalleryDetail = GallerySummary & {
75
110
  position: number;
76
111
  }[];
77
112
  };
113
+ export type GalleryPage<TGallery = GalleryDetail> = {
114
+ gallery: TGallery;
115
+ pagination: {
116
+ cursor: string | null;
117
+ limit: number;
118
+ nextCursor: string | null;
119
+ };
120
+ };
78
121
  export type GalleryLinkPayload = {
79
122
  links: {
80
123
  api: string;
@@ -111,14 +154,22 @@ export type UploadIntent = {
111
154
  };
112
155
  export type GalleryEvent = {
113
156
  event: 'gallery_view' | 'image_view' | 'interaction' | 'download';
157
+ eventId?: string;
114
158
  galleryId: string;
115
159
  assetId?: string;
116
160
  occurredAt?: string;
117
161
  };
118
162
  export type ClientOptions = {
163
+ /** Public Cloudflare Worker endpoint used for batched browser analytics. */
164
+ analyticsUrl?: string;
165
+ /** Maximum number of events sent in one analytics request. */
166
+ analyticsBatchSize?: number;
167
+ /** Delay before a non-full analytics batch is flushed. */
168
+ analyticsFlushIntervalMs?: number;
119
169
  apiKey?: string;
120
170
  apiUrl: string;
121
171
  fetch?: typeof fetch;
172
+ mediaUrl?: string;
122
173
  publishableKey?: string;
123
174
  readToken?: string;
124
175
  };
@@ -127,6 +178,7 @@ export type UploadImageInput = {
127
178
  contentType: string;
128
179
  filename: string;
129
180
  galleryIds?: string[];
181
+ idempotencyKey?: string;
130
182
  metadata?: Record<string, unknown>;
131
183
  size: number;
132
184
  visibility?: 'private' | 'public' | 'unlisted';
@@ -134,10 +186,20 @@ export type UploadImageInput = {
134
186
  export type CompleteAssetInput = {
135
187
  alt?: string;
136
188
  galleryIds?: string[];
189
+ idempotencyKey?: string;
137
190
  title?: string;
138
191
  uploadIntentId: string;
139
192
  visibility?: 'private' | 'public';
140
193
  };
194
+ export type ReplaceAssetInput = {
195
+ idempotencyKey?: string;
196
+ uploadIntentId: string;
197
+ };
198
+ export type DeliveryCapability = {
199
+ capability: string;
200
+ expiresAt: string;
201
+ url: string;
202
+ };
141
203
  export type ListAssetsInput = {
142
204
  cursor?: string;
143
205
  galleryId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,10 @@
1
1
  {
2
2
  "name": "@degallery/sdk",
3
- "version": "0.2.2",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
- "scripts": {
9
- "lib:publish": "npm publish --access public"
10
- },
11
8
  "exports": {
12
9
  "./package.json": "./package.json",
13
10
  ".": {
@@ -53,5 +50,8 @@
53
50
  }
54
51
  }
55
52
  },
56
- "dependencies": {}
57
- }
53
+ "dependencies": {},
54
+ "scripts": {
55
+ "lib:publish": "pnpm publish --access public"
56
+ }
57
+ }