@rawdash/sdk-nextjs 0.19.0 → 0.21.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/dist/index.d.ts CHANGED
@@ -3,13 +3,6 @@ export { ACTIVE_SYNC_STATUSES, CachedWidget, DataSource, HealthResponse, SyncSta
3
3
  import { HttpOptions } from '@rawdash/sdk-client';
4
4
  export { HttpOptions } from '@rawdash/sdk-client';
5
5
 
6
- /**
7
- * Next.js-aware variant of `http` from `@rawdash/sdk-client`.
8
- *
9
- * Identical to `http` but wraps the underlying fetch so that widget requests
10
- * are tagged with the `'rawdash'` cache tag, enabling `revalidateTag`-based
11
- * invalidation from Server Actions.
12
- */
13
6
  declare function http(opts: HttpOptions): DataSource;
14
7
  declare function createRawdashClient(dataSource: DataSource): DataSource;
15
8
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { DataSource } from '@rawdash/core';\n\n/**\n * A configured Rawdash client for use in Next.js Server Components and Server\n * Actions.\n *\n * Wrap a `DataSource` (from `@rawdash/core`) with Next.js-specific\n * behaviour: `triggerSync` waits for the sync to complete, then calls\n * `revalidateTag` so Server Components re-fetch widget data.\n *\n * ```ts\n * // lib/rawdash.ts\n * import { createRawdashClient, http } from '@rawdash/sdk-nextjs';\n *\n * export const rawdash = createRawdashClient(\n * http({ baseUrl: process.env.RAWDASH_URL! }),\n * );\n * ```\n */\nimport { isSyncActive } from '@rawdash/core';\nimport { http as clientHttp } from '@rawdash/sdk-client';\nimport type { HttpOptions } from '@rawdash/sdk-client';\nimport { revalidateTag } from 'next/cache';\n\nexport type { HttpOptions } from '@rawdash/sdk-client';\n\nexport type {\n CachedWidget,\n DataSource,\n HealthResponse,\n SyncState,\n SyncStatus,\n TriggerSyncResponse,\n WidgetSyncState,\n WidgetsListResponse,\n} from '@rawdash/core';\n\nexport { ACTIVE_SYNC_STATUSES, isSyncActive } from '@rawdash/core';\n\nconst RAWDASH_CACHE_TAG = 'rawdash';\n\ntype NextFetchInit = RequestInit & {\n next?: {\n revalidate?: number | false;\n tags?: string[];\n };\n};\n\n/**\n * Next.js-aware variant of `http` from `@rawdash/sdk-client`.\n *\n * Identical to `http` but wraps the underlying fetch so that widget requests\n * are tagged with the `'rawdash'` cache tag, enabling `revalidateTag`-based\n * invalidation from Server Actions.\n */\nexport function http(opts: HttpOptions): DataSource {\n const taggedFetch: typeof globalThis.fetch = (input, init) => {\n return globalThis.fetch(\n input as RequestInfo,\n {\n ...(init as NextFetchInit),\n next: {\n ...(init as NextFetchInit | undefined)?.next,\n tags: [\n ...((init as NextFetchInit | undefined)?.next?.tags ?? []),\n RAWDASH_CACHE_TAG,\n ],\n },\n } as RequestInit,\n );\n };\n return clientHttp({ ...opts, fetch: taggedFetch });\n}\n\nconst DEFAULT_SYNC_TIMEOUT_MS = 30_000;\nconst DEFAULT_SYNC_POLL_INTERVAL_MS = 500;\n\nexport function createRawdashClient(dataSource: DataSource): DataSource {\n return {\n getWidget: (dashboardId, widgetId) =>\n dataSource.getWidget(dashboardId, widgetId),\n\n getWidgets: (dashboardId) => dataSource.getWidgets(dashboardId),\n\n getHealth: () => dataSource.getHealth(),\n\n getSyncState: () => dataSource.getSyncState(),\n\n async ensureFresh(maxAgeMs) {\n const synced = await dataSource.ensureFresh(maxAgeMs);\n if (synced) {\n revalidateTag(RAWDASH_CACHE_TAG);\n }\n return synced;\n },\n\n async triggerSync() {\n const result = await dataSource.triggerSync();\n\n const deadline = Date.now() + DEFAULT_SYNC_TIMEOUT_MS;\n for (;;) {\n const state = await dataSource.getSyncState();\n if (!isSyncActive(state.status)) {\n if (state.status === 'failed') {\n throw new Error(\n `Rawdash sync failed: ${state.lastError ?? 'unknown error'}`,\n );\n }\n revalidateTag(RAWDASH_CACHE_TAG);\n return result;\n }\n if (Date.now() >= deadline) {\n throw new Error(\n `Rawdash sync did not settle within ${DEFAULT_SYNC_TIMEOUT_MS}ms (last status: ${state.status})`,\n );\n }\n await new Promise<void>((resolve) =>\n setTimeout(resolve, DEFAULT_SYNC_POLL_INTERVAL_MS),\n );\n }\n },\n };\n}\n"],"mappings":";AAmBA,SAAS,oBAAoB;AAC7B,SAAS,QAAQ,kBAAkB;AAEnC,SAAS,qBAAqB;AAe9B,SAAS,sBAAsB,gBAAAA,qBAAoB;AAEnD,IAAM,oBAAoB;AAgBnB,SAAS,KAAK,MAA+B;AAClD,QAAM,cAAuC,CAAC,OAAO,SAAS;AAC5D,WAAO,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,QACE,GAAI;AAAA,QACJ,MAAM;AAAA,UACJ,GAAI,MAAoC;AAAA,UACxC,MAAM;AAAA,YACJ,GAAK,MAAoC,MAAM,QAAQ,CAAC;AAAA,YACxD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,WAAW,EAAE,GAAG,MAAM,OAAO,YAAY,CAAC;AACnD;AAEA,IAAM,0BAA0B;AAChC,IAAM,gCAAgC;AAE/B,SAAS,oBAAoB,YAAoC;AACtE,SAAO;AAAA,IACL,WAAW,CAAC,aAAa,aACvB,WAAW,UAAU,aAAa,QAAQ;AAAA,IAE5C,YAAY,CAAC,gBAAgB,WAAW,WAAW,WAAW;AAAA,IAE9D,WAAW,MAAM,WAAW,UAAU;AAAA,IAEtC,cAAc,MAAM,WAAW,aAAa;AAAA,IAE5C,MAAM,YAAY,UAAU;AAC1B,YAAM,SAAS,MAAM,WAAW,YAAY,QAAQ;AACpD,UAAI,QAAQ;AACV,sBAAc,iBAAiB;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,cAAc;AAClB,YAAM,SAAS,MAAM,WAAW,YAAY;AAE5C,YAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,iBAAS;AACP,cAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,YAAI,CAAC,aAAa,MAAM,MAAM,GAAG;AAC/B,cAAI,MAAM,WAAW,UAAU;AAC7B,kBAAM,IAAI;AAAA,cACR,wBAAwB,MAAM,aAAa,eAAe;AAAA,YAC5D;AAAA,UACF;AACA,wBAAc,iBAAiB;AAC/B,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,IAAI,KAAK,UAAU;AAC1B,gBAAM,IAAI;AAAA,YACR,sCAAsC,uBAAuB,oBAAoB,MAAM,MAAM;AAAA,UAC/F;AAAA,QACF;AACA,cAAM,IAAI;AAAA,UAAc,CAAC,YACvB,WAAW,SAAS,6BAA6B;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":["isSyncActive"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { DataSource } from '@rawdash/core';\nimport { isSyncActive } from '@rawdash/core';\nimport { http as clientHttp } from '@rawdash/sdk-client';\nimport type { HttpOptions } from '@rawdash/sdk-client';\nimport { revalidateTag } from 'next/cache';\n\nexport type { HttpOptions } from '@rawdash/sdk-client';\n\nexport type {\n CachedWidget,\n DataSource,\n HealthResponse,\n SyncState,\n SyncStatus,\n TriggerSyncResponse,\n WidgetSyncState,\n WidgetsListResponse,\n} from '@rawdash/core';\n\nexport { ACTIVE_SYNC_STATUSES, isSyncActive } from '@rawdash/core';\n\nconst RAWDASH_CACHE_TAG = 'rawdash';\n\ntype NextFetchInit = RequestInit & {\n next?: {\n revalidate?: number | false;\n tags?: string[];\n };\n};\n\nexport function http(opts: HttpOptions): DataSource {\n const taggedFetch: typeof globalThis.fetch = (input, init) => {\n return globalThis.fetch(\n input as RequestInfo,\n {\n ...(init as NextFetchInit),\n next: {\n ...(init as NextFetchInit | undefined)?.next,\n tags: [\n ...((init as NextFetchInit | undefined)?.next?.tags ?? []),\n RAWDASH_CACHE_TAG,\n ],\n },\n } as RequestInit,\n );\n };\n return clientHttp({ ...opts, fetch: taggedFetch });\n}\n\nconst DEFAULT_SYNC_TIMEOUT_MS = 30_000;\nconst DEFAULT_SYNC_POLL_INTERVAL_MS = 500;\n\nexport function createRawdashClient(dataSource: DataSource): DataSource {\n return {\n getWidget: (dashboardId, widgetId) =>\n dataSource.getWidget(dashboardId, widgetId),\n\n getWidgets: (dashboardId) => dataSource.getWidgets(dashboardId),\n\n getHealth: () => dataSource.getHealth(),\n\n getSyncState: () => dataSource.getSyncState(),\n\n async ensureFresh(maxAgeMs) {\n const synced = await dataSource.ensureFresh(maxAgeMs);\n if (synced) {\n revalidateTag(RAWDASH_CACHE_TAG);\n }\n return synced;\n },\n\n async triggerSync() {\n const result = await dataSource.triggerSync();\n\n const deadline = Date.now() + DEFAULT_SYNC_TIMEOUT_MS;\n for (;;) {\n const state = await dataSource.getSyncState();\n if (!isSyncActive(state.status)) {\n if (state.status === 'failed') {\n throw new Error(\n `Rawdash sync failed: ${state.lastError ?? 'unknown error'}`,\n );\n }\n revalidateTag(RAWDASH_CACHE_TAG);\n return result;\n }\n if (Date.now() >= deadline) {\n throw new Error(\n `Rawdash sync did not settle within ${DEFAULT_SYNC_TIMEOUT_MS}ms (last status: ${state.status})`,\n );\n }\n await new Promise<void>((resolve) =>\n setTimeout(resolve, DEFAULT_SYNC_POLL_INTERVAL_MS),\n );\n }\n },\n };\n}\n"],"mappings":";AACA,SAAS,oBAAoB;AAC7B,SAAS,QAAQ,kBAAkB;AAEnC,SAAS,qBAAqB;AAe9B,SAAS,sBAAsB,gBAAAA,qBAAoB;AAEnD,IAAM,oBAAoB;AASnB,SAAS,KAAK,MAA+B;AAClD,QAAM,cAAuC,CAAC,OAAO,SAAS;AAC5D,WAAO,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,QACE,GAAI;AAAA,QACJ,MAAM;AAAA,UACJ,GAAI,MAAoC;AAAA,UACxC,MAAM;AAAA,YACJ,GAAK,MAAoC,MAAM,QAAQ,CAAC;AAAA,YACxD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,WAAW,EAAE,GAAG,MAAM,OAAO,YAAY,CAAC;AACnD;AAEA,IAAM,0BAA0B;AAChC,IAAM,gCAAgC;AAE/B,SAAS,oBAAoB,YAAoC;AACtE,SAAO;AAAA,IACL,WAAW,CAAC,aAAa,aACvB,WAAW,UAAU,aAAa,QAAQ;AAAA,IAE5C,YAAY,CAAC,gBAAgB,WAAW,WAAW,WAAW;AAAA,IAE9D,WAAW,MAAM,WAAW,UAAU;AAAA,IAEtC,cAAc,MAAM,WAAW,aAAa;AAAA,IAE5C,MAAM,YAAY,UAAU;AAC1B,YAAM,SAAS,MAAM,WAAW,YAAY,QAAQ;AACpD,UAAI,QAAQ;AACV,sBAAc,iBAAiB;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,cAAc;AAClB,YAAM,SAAS,MAAM,WAAW,YAAY;AAE5C,YAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,iBAAS;AACP,cAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,YAAI,CAAC,aAAa,MAAM,MAAM,GAAG;AAC/B,cAAI,MAAM,WAAW,UAAU;AAC7B,kBAAM,IAAI;AAAA,cACR,wBAAwB,MAAM,aAAa,eAAe;AAAA,YAC5D;AAAA,UACF;AACA,wBAAc,iBAAiB;AAC/B,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,IAAI,KAAK,UAAU;AAC1B,gBAAM,IAAI;AAAA,YACR,sCAAsC,uBAAuB,oBAAoB,MAAM,MAAM;AAAA,UAC/F;AAAA,QACF;AACA,cAAM,IAAI;AAAA,UAAc,CAAC,YACvB,WAAW,SAAS,6BAA6B;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":["isSyncActive"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rawdash/sdk-nextjs",
3
- "version": "0.19.0",
3
+ "version": "0.21.0",
4
4
  "description": "Rawdash client SDK for Next.js App Router (Server Components and Server Actions)",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -32,9 +32,9 @@
32
32
  }
33
33
  },
34
34
  "dependencies": {
35
- "@rawdash/sdk-runtime": "0.19.0",
36
- "@rawdash/core": "0.19.0",
37
- "@rawdash/sdk-client": "0.19.0"
35
+ "@rawdash/sdk-client": "0.21.0",
36
+ "@rawdash/core": "0.21.0",
37
+ "@rawdash/sdk-runtime": "0.21.0"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "next": ">=14.0.0",