@truefoundry/trueforge-ui 0.2.4 → 0.3.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +55 -23
  3. package/dist/AgentCodeSnippets-NZOFJE57.js +74 -0
  4. package/dist/AgentCodeSnippets-NZOFJE57.js.map +1 -0
  5. package/dist/AgentMetricChart-JPU3MFQ2.js +15 -0
  6. package/dist/AgentOverview-EEBHJC32.js +167 -0
  7. package/dist/AgentOverview-EEBHJC32.js.map +1 -0
  8. package/dist/AgentSessionEventTimeline-26Z6IB3B.js +79 -0
  9. package/dist/AgentSessionEventTimeline-26Z6IB3B.js.map +1 -0
  10. package/dist/AgentSessionEventTimelineChart-CGCU7WBK.js +504 -0
  11. package/dist/AgentSessionEventTimelineChart-CGCU7WBK.js.map +1 -0
  12. package/dist/AgentSessions-3MPDZASK.js +275 -0
  13. package/dist/AgentSessions-3MPDZASK.js.map +1 -0
  14. package/dist/{ConnectorSettings-ODC3LVHN.js → ConnectorSettings-MXFRWWR6.js} +8 -6
  15. package/dist/{ConnectorSettings-ODC3LVHN.js.map → ConnectorSettings-MXFRWWR6.js.map} +1 -1
  16. package/dist/{DockLayout-TEOWEMSV.js → DockLayout-LM4AFMFY.js} +12 -11
  17. package/dist/{DockLayout-TEOWEMSV.js.map → DockLayout-LM4AFMFY.js.map} +1 -1
  18. package/dist/DrawerLayout-JR3O6RRB.js +184 -0
  19. package/dist/DrawerLayout-JR3O6RRB.js.map +1 -0
  20. package/dist/{ModelSettings-CKQ5CVAC.js → ModelSettings-G7IFNC2Y.js} +8 -6
  21. package/dist/{ModelSettings-CKQ5CVAC.js.map → ModelSettings-G7IFNC2Y.js.map} +1 -1
  22. package/dist/OpenUiFenceBlock-2TV5TQ6P.js +9 -0
  23. package/dist/OpenUiFenceBlock-2TV5TQ6P.js.map +1 -0
  24. package/dist/{SandboxSettings-HSCPYUOC.js → SandboxSettings-NXAANMAX.js} +8 -6
  25. package/dist/{SandboxSettings-HSCPYUOC.js.map → SandboxSettings-NXAANMAX.js.map} +1 -1
  26. package/dist/SchedulesPage-KKLUDO6B.js +15 -0
  27. package/dist/SchedulesPage-KKLUDO6B.js.map +1 -0
  28. package/dist/{SettingsBuilder-MYWRFXRI.js → SettingsBuilder-L34IQ56S.js} +26 -22
  29. package/dist/SettingsBuilder-L34IQ56S.js.map +1 -0
  30. package/dist/{ShellRouteSync-T4WLY57Q.js → ShellRouteSync-CEBETGEJ.js} +95 -22
  31. package/dist/ShellRouteSync-CEBETGEJ.js.map +1 -0
  32. package/dist/SidebarLayout-A2HJPPHS.js +308 -0
  33. package/dist/SidebarLayout-A2HJPPHS.js.map +1 -0
  34. package/dist/{SkillSettings-ECH6SHZ7.js → SkillSettings-FGGMSUNO.js} +8 -6
  35. package/dist/{SkillSettings-ECH6SHZ7.js.map → SkillSettings-FGGMSUNO.js.map} +1 -1
  36. package/dist/{TrueForgeUIWithRouter-KMHPOKLN.js → TrueForgeUIWithRouter-MZVJWJMB.js} +15 -11
  37. package/dist/{TrueForgeUIWithRouter-KMHPOKLN.js.map → TrueForgeUIWithRouter-MZVJWJMB.js.map} +1 -1
  38. package/dist/{WidgetLayout-4ZIG3RXV.js → WidgetLayout-6QM45OQQ.js} +19 -15
  39. package/dist/WidgetLayout-6QM45OQQ.js.map +1 -0
  40. package/dist/chunk-2XPPBEYF.js +74 -0
  41. package/dist/chunk-2XPPBEYF.js.map +1 -0
  42. package/dist/chunk-6O6FWUDW.js +1376 -0
  43. package/dist/chunk-6O6FWUDW.js.map +1 -0
  44. package/dist/chunk-7Z2C2K7F.js +578 -0
  45. package/dist/chunk-7Z2C2K7F.js.map +1 -0
  46. package/dist/{chunk-FXCYLEFB.js → chunk-BSIPI3KV.js} +18 -2
  47. package/dist/chunk-BSIPI3KV.js.map +1 -0
  48. package/dist/{chunk-255AE5NI.js → chunk-CYHJDKFB.js} +118 -33
  49. package/dist/chunk-CYHJDKFB.js.map +1 -0
  50. package/dist/chunk-DJUFS2BW.js +27 -0
  51. package/dist/chunk-DJUFS2BW.js.map +1 -0
  52. package/dist/chunk-DMMZSZTN.js +252 -0
  53. package/dist/chunk-DMMZSZTN.js.map +1 -0
  54. package/dist/chunk-FJW36PD7.js +180 -0
  55. package/dist/chunk-FJW36PD7.js.map +1 -0
  56. package/dist/chunk-M62XY4NC.js +555 -0
  57. package/dist/chunk-M62XY4NC.js.map +1 -0
  58. package/dist/{chunk-JRRCAKEP.js → chunk-MPNSO7E6.js} +2 -2
  59. package/dist/{chunk-CFLVPV5M.js → chunk-QC42MLAK.js} +7 -2
  60. package/dist/chunk-QC42MLAK.js.map +1 -0
  61. package/dist/chunk-RDXBMTP5.js +32 -0
  62. package/dist/chunk-RDXBMTP5.js.map +1 -0
  63. package/dist/chunk-SFZNIO6U.js +18 -0
  64. package/dist/chunk-SFZNIO6U.js.map +1 -0
  65. package/dist/chunk-U7KURWW3.js +840 -0
  66. package/dist/chunk-U7KURWW3.js.map +1 -0
  67. package/dist/chunk-WVE3F724.js +200 -0
  68. package/dist/chunk-WVE3F724.js.map +1 -0
  69. package/dist/{chunk-IFLE7OMM.js → chunk-XAU7QFG3.js} +180 -38
  70. package/dist/chunk-XAU7QFG3.js.map +1 -0
  71. package/dist/chunk-Y6S4OVVQ.js +16 -0
  72. package/dist/chunk-Y6S4OVVQ.js.map +1 -0
  73. package/dist/chunk-ZKNUMH2M.js +119 -0
  74. package/dist/chunk-ZKNUMH2M.js.map +1 -0
  75. package/dist/chunk-ZTMKFZQ3.js +13214 -0
  76. package/dist/chunk-ZTMKFZQ3.js.map +1 -0
  77. package/dist/{createTrueFoundryServer-B72bU-J7.d.ts → createTrueFoundryServer-CmZnBh_l.d.ts} +15 -4
  78. package/dist/index.d.ts +1199 -161
  79. package/dist/index.js +699 -69
  80. package/dist/index.js.map +1 -1
  81. package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +552 -12
  82. package/dist/plugins/trueforge-agent-server-adapter/index.js +506 -188
  83. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  84. package/dist/styles.css +1 -1
  85. package/package.json +11 -10
  86. package/dist/DrawerLayout-2JOQ4EDZ.js +0 -159
  87. package/dist/DrawerLayout-2JOQ4EDZ.js.map +0 -1
  88. package/dist/OpenUiFenceBlock-3EFPY4JW.js +0 -9
  89. package/dist/SettingsBuilder-MYWRFXRI.js.map +0 -1
  90. package/dist/ShellRouteSync-T4WLY57Q.js.map +0 -1
  91. package/dist/SidebarLayout-6MHQYW45.js +0 -239
  92. package/dist/SidebarLayout-6MHQYW45.js.map +0 -1
  93. package/dist/WidgetLayout-4ZIG3RXV.js.map +0 -1
  94. package/dist/chunk-255AE5NI.js.map +0 -1
  95. package/dist/chunk-72LC2M3R.js +0 -567
  96. package/dist/chunk-72LC2M3R.js.map +0 -1
  97. package/dist/chunk-CFLVPV5M.js.map +0 -1
  98. package/dist/chunk-FXCYLEFB.js.map +0 -1
  99. package/dist/chunk-IFLE7OMM.js.map +0 -1
  100. package/dist/chunk-IWPDSPVA.js +0 -2068
  101. package/dist/chunk-IWPDSPVA.js.map +0 -1
  102. package/dist/chunk-OZTNBS6V.js +0 -75
  103. package/dist/chunk-OZTNBS6V.js.map +0 -1
  104. package/dist/chunk-PUFYHFND.js +0 -91
  105. package/dist/chunk-PUFYHFND.js.map +0 -1
  106. package/dist/chunk-WQULF5AT.js +0 -460
  107. package/dist/chunk-WQULF5AT.js.map +0 -1
  108. package/dist/chunk-XRTTKGKN.js +0 -6825
  109. package/dist/chunk-XRTTKGKN.js.map +0 -1
  110. package/dist/chunk-YIWUG6MC.js +0 -101
  111. package/dist/chunk-YIWUG6MC.js.map +0 -1
  112. /package/dist/{OpenUiFenceBlock-3EFPY4JW.js.map → AgentMetricChart-JPU3MFQ2.js.map} +0 -0
  113. /package/dist/{chunk-JRRCAKEP.js.map → chunk-MPNSO7E6.js.map} +0 -0
@@ -5,6 +5,8 @@ function createTrueFoundryServer(opts) {
5
5
  getModels: opts.getModels,
6
6
  getSkills: opts.getSkills,
7
7
  getMcp: opts.getMcp,
8
+ ...opts.listMcp === void 0 ? {} : { listMcp: opts.listMcp },
9
+ ...opts.getMcpTools === void 0 ? {} : { getMcpTools: opts.getMcpTools },
8
10
  searchAgents: opts.searchAgents,
9
11
  saveAgent: opts.saveAgent,
10
12
  deleteAgent: async (req) => {
@@ -18,7 +20,10 @@ function createTrueFoundryServer(opts) {
18
20
  const server = {
19
21
  ...opts.chatServer,
20
22
  ...builder,
21
- ...opts.catalog != null ? { catalog: opts.catalog } : {}
23
+ ...opts.catalog != null ? { catalog: opts.catalog } : {},
24
+ ...opts.sessions != null ? { sessions: opts.sessions } : {},
25
+ ...opts.metrics != null ? { metrics: opts.metrics } : {},
26
+ ...opts.schedules != null ? { schedules: opts.schedules } : {}
22
27
  };
23
28
  return server;
24
29
  }
@@ -26,4 +31,4 @@ function createTrueFoundryServer(opts) {
26
31
  export {
27
32
  createTrueFoundryServer
28
33
  };
29
- //# sourceMappingURL=chunk-CFLVPV5M.js.map
34
+ //# sourceMappingURL=chunk-QC42MLAK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/createTrueFoundryServer.ts"],"sourcesContent":["import type {\n AgentBuilderCapabilitiesResponse,\n AgentBuilderServer,\n AgentChatServer,\n AgentLibraryEntry,\n AgentMetricsServer,\n AgentSessionsServer,\n AgentSkill,\n AgentSpec,\n CatalogServer,\n ConnectorState,\n ListResult,\n ModelSelection,\n PageParams,\n SaveAgentRequest,\n SaveAgentResult,\n ScheduleServer,\n SearchAgentsParams,\n} from './types.js';\n\nexport type CreateTrueFoundryServerOptions<\n TSpec extends AgentSpec = AgentSpec,\n TModel extends ModelSelection = ModelSelection,\n TSkill extends AgentSkill = AgentSkill,\n TMcp extends ConnectorState = ConnectorState,\n TAgent extends AgentLibraryEntry = AgentLibraryEntry,\n TSave extends SaveAgentResult = SaveAgentResult,\n TCatalog extends CatalogServer = CatalogServer,\n TCapabilities extends AgentBuilderCapabilitiesResponse = AgentBuilderCapabilitiesResponse,\n TSessions extends AgentSessionsServer<TSpec> = AgentSessionsServer<TSpec>,\n TMetrics extends AgentMetricsServer = AgentMetricsServer,\n TSchedules extends ScheduleServer = ScheduleServer,\n> = {\n /** Chat port — e.g. from `@truefoundry/agent-server-adapter`. */\n chatServer: AgentChatServer<TSpec>;\n getCapabilities: () => Promise<TCapabilities>;\n getModels: () => Promise<TModel[]>;\n getSkills: () => Promise<TSkill[]>;\n getMcp: () => Promise<TMcp[]>;\n listMcp?: (req?: PageParams) => Promise<ListResult<TMcp>>;\n getMcpTools?: AgentBuilderServer<TSpec, TModel, TSkill, TMcp, TAgent, TSave, TCapabilities>['getMcpTools'];\n searchAgents: (req?: SearchAgentsParams) => Promise<TAgent[]>;\n saveAgent: (req: SaveAgentRequest<TSpec>) => Promise<TSave>;\n deleteAgent?: (req: { agentName: string }) => Promise<void>;\n /** Settings catalog (models + connectors). Optional. */\n catalog?: TCatalog;\n /** Optional agent-detail port (Overview + Use In Code). */\n sessions?: TSessions;\n /** Optional aggregate metrics + chart port. */\n metrics?: TMetrics;\n /** Schedules listing + CRUD. Optional. */\n schedules?: TSchedules;\n};\n\nexport type TrueFoundryServer<\n TSpec extends AgentSpec = AgentSpec,\n TModel extends ModelSelection = ModelSelection,\n TSkill extends AgentSkill = AgentSkill,\n TMcp extends ConnectorState = ConnectorState,\n TAgent extends AgentLibraryEntry = AgentLibraryEntry,\n TSave extends SaveAgentResult = SaveAgentResult,\n TCatalog extends CatalogServer = CatalogServer,\n TCapabilities extends AgentBuilderCapabilitiesResponse = AgentBuilderCapabilitiesResponse,\n TSessions extends AgentSessionsServer<TSpec> = AgentSessionsServer<TSpec>,\n TMetrics extends AgentMetricsServer = AgentMetricsServer,\n TSchedules extends ScheduleServer = ScheduleServer,\n> = AgentChatServer<TSpec> &\n AgentBuilderServer<TSpec, TModel, TSkill, TMcp, TAgent, TSave, TCapabilities> & {\n catalog?: TCatalog;\n sessions?: TSessions;\n metrics?: TMetrics;\n schedules?: TSchedules;\n };\n\n/**\n * Composes an `AgentChatServer` with host-provided builder catalog callbacks\n * and an optional settings `catalog`.\n * Gateway wiring lives in the host (or `@truefoundry/agent-server-adapter`).\n */\nexport function createTrueFoundryServer<\n TSpec extends AgentSpec = AgentSpec,\n TModel extends ModelSelection = ModelSelection,\n TSkill extends AgentSkill = AgentSkill,\n TMcp extends ConnectorState = ConnectorState,\n TAgent extends AgentLibraryEntry = AgentLibraryEntry,\n TSave extends SaveAgentResult = SaveAgentResult,\n TCatalog extends CatalogServer = CatalogServer,\n TCapabilities extends AgentBuilderCapabilitiesResponse = AgentBuilderCapabilitiesResponse,\n TSessions extends AgentSessionsServer<TSpec> = AgentSessionsServer<TSpec>,\n TMetrics extends AgentMetricsServer = AgentMetricsServer,\n TSchedules extends ScheduleServer = ScheduleServer,\n>(\n opts: CreateTrueFoundryServerOptions<\n TSpec,\n TModel,\n TSkill,\n TMcp,\n TAgent,\n TSave,\n TCatalog,\n TCapabilities,\n TSessions,\n TMetrics,\n TSchedules\n >,\n): TrueFoundryServer<\n TSpec,\n TModel,\n TSkill,\n TMcp,\n TAgent,\n TSave,\n TCatalog,\n TCapabilities,\n TSessions,\n TMetrics,\n TSchedules\n> {\n const builder: AgentBuilderServer<TSpec, TModel, TSkill, TMcp, TAgent, TSave, TCapabilities> = {\n getCapabilities: opts.getCapabilities,\n getModels: opts.getModels,\n getSkills: opts.getSkills,\n getMcp: opts.getMcp,\n ...(opts.listMcp === undefined ? {} : { listMcp: opts.listMcp }),\n ...(opts.getMcpTools === undefined ? {} : { getMcpTools: opts.getMcpTools }),\n searchAgents: opts.searchAgents,\n saveAgent: opts.saveAgent,\n deleteAgent: async req => {\n if (opts.deleteAgent) {\n await opts.deleteAgent(req);\n return;\n }\n throw new Error('deleteAgent is host-owned. Pass deleteAgent to createTrueFoundryServer.');\n },\n };\n\n const server: TrueFoundryServer<\n TSpec,\n TModel,\n TSkill,\n TMcp,\n TAgent,\n TSave,\n TCatalog,\n TCapabilities,\n TSessions,\n TMetrics,\n TSchedules\n > = {\n ...opts.chatServer,\n ...builder,\n ...(opts.catalog != null ? { catalog: opts.catalog } : {}),\n ...(opts.sessions != null ? { sessions: opts.sessions } : {}),\n ...(opts.metrics != null ? { metrics: opts.metrics } : {}),\n ...(opts.schedules != null ? { schedules: opts.schedules } : {}),\n };\n return server;\n}\n"],"mappings":";AA+EO,SAAS,wBAad,MAyBA;AACA,QAAM,UAAyF;AAAA,IAC7F,iBAAiB,KAAK;AAAA,IACtB,WAAW,KAAK;AAAA,IAChB,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK;AAAA,IACb,GAAI,KAAK,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ;AAAA,IAC9D,GAAI,KAAK,gBAAgB,SAAY,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY;AAAA,IAC1E,cAAc,KAAK;AAAA,IACnB,WAAW,KAAK;AAAA,IAChB,aAAa,OAAM,QAAO;AACxB,UAAI,KAAK,aAAa;AACpB,cAAM,KAAK,YAAY,GAAG;AAC1B;AAAA,MACF;AACA,YAAM,IAAI,MAAM,yEAAyE;AAAA,IAC3F;AAAA,EACF;AAEA,QAAM,SAYF;AAAA,IACF,GAAG,KAAK;AAAA,IACR,GAAG;AAAA,IACH,GAAI,KAAK,WAAW,OAAO,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,IACxD,GAAI,KAAK,YAAY,OAAO,EAAE,UAAU,KAAK,SAAS,IAAI,CAAC;AAAA,IAC3D,GAAI,KAAK,WAAW,OAAO,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,IACxD,GAAI,KAAK,aAAa,OAAO,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,EAChE;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,32 @@
1
+ // src/atoms/lib/sessionCreateAgent.ts
2
+ var IS_CREATE_AGENT_METADATA_KEY = "is_create_agent";
3
+ function isCreateAgentMetadataValue(isCreateAgent) {
4
+ return isCreateAgent ? "true" : "false";
5
+ }
6
+ function readSessionIsCreateAgent(metadata) {
7
+ if (metadata == null) return false;
8
+ return Reflect.get(metadata, IS_CREATE_AGENT_METADATA_KEY) === "true";
9
+ }
10
+ function sessionIsCreateAgent(session) {
11
+ if ("isCreateAgent" in session && Reflect.get(session, "isCreateAgent") === true) {
12
+ return true;
13
+ }
14
+ if (!("metadata" in session)) return false;
15
+ const metadata = Reflect.get(session, "metadata");
16
+ if (typeof metadata !== "object" || metadata === null) return false;
17
+ const record = {};
18
+ for (const key of Object.keys(metadata)) {
19
+ const value = Reflect.get(metadata, key);
20
+ if (typeof value !== "string") continue;
21
+ record[key] = value;
22
+ }
23
+ return readSessionIsCreateAgent(record);
24
+ }
25
+
26
+ export {
27
+ IS_CREATE_AGENT_METADATA_KEY,
28
+ isCreateAgentMetadataValue,
29
+ readSessionIsCreateAgent,
30
+ sessionIsCreateAgent
31
+ };
32
+ //# sourceMappingURL=chunk-RDXBMTP5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/atoms/lib/sessionCreateAgent.ts"],"sourcesContent":["/** Session metadata key for New Chat vs New Agent builder intent (wire/jsonb snake_case). */\nexport const IS_CREATE_AGENT_METADATA_KEY = 'is_create_agent';\n\n/** Wire metadata values are strings (`SessionMetadataSchema`). */\nexport function isCreateAgentMetadataValue(isCreateAgent: boolean): 'true' | 'false' {\n return isCreateAgent ? 'true' : 'false';\n}\n\n/**\n * Read create-agent intent from session metadata.\n * Missing / undefined / anything other than `\"true\"` → false (legacy = Chat).\n */\nexport function readSessionIsCreateAgent(metadata: Record<string, string> | null | undefined): boolean {\n if (metadata == null) return false;\n return Reflect.get(metadata, IS_CREATE_AGENT_METADATA_KEY) === 'true';\n}\n\n/** True when a UI session was stamped as agent-builder (own prop or metadata). */\nexport function sessionIsCreateAgent(session: object): boolean {\n if ('isCreateAgent' in session && Reflect.get(session, 'isCreateAgent') === true) {\n return true;\n }\n if (!('metadata' in session)) return false;\n const metadata = Reflect.get(session, 'metadata');\n if (typeof metadata !== 'object' || metadata === null) return false;\n const record: Record<string, string> = {};\n for (const key of Object.keys(metadata)) {\n const value = Reflect.get(metadata, key);\n if (typeof value !== 'string') continue;\n record[key] = value;\n }\n return readSessionIsCreateAgent(record);\n}\n"],"mappings":";AACO,IAAM,+BAA+B;AAGrC,SAAS,2BAA2B,eAA0C;AACnF,SAAO,gBAAgB,SAAS;AAClC;AAMO,SAAS,yBAAyB,UAA8D;AACrG,MAAI,YAAY,KAAM,QAAO;AAC7B,SAAO,QAAQ,IAAI,UAAU,4BAA4B,MAAM;AACjE;AAGO,SAAS,qBAAqB,SAA0B;AAC7D,MAAI,mBAAmB,WAAW,QAAQ,IAAI,SAAS,eAAe,MAAM,MAAM;AAChF,WAAO;AAAA,EACT;AACA,MAAI,EAAE,cAAc,SAAU,QAAO;AACrC,QAAM,WAAW,QAAQ,IAAI,SAAS,UAAU;AAChD,MAAI,OAAO,aAAa,YAAY,aAAa,KAAM,QAAO;AAC9D,QAAM,SAAiC,CAAC;AACxC,aAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACvC,UAAM,QAAQ,QAAQ,IAAI,UAAU,GAAG;AACvC,QAAI,OAAO,UAAU,SAAU;AAC/B,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,SAAO,yBAAyB,MAAM;AACxC;","names":[]}
@@ -0,0 +1,18 @@
1
+ // src/utils/drainListPages.ts
2
+ async function drainListPages({
3
+ fetchPage
4
+ }) {
5
+ const items = [];
6
+ let pageToken;
7
+ do {
8
+ const page = await fetchPage(pageToken);
9
+ items.push(...page.data);
10
+ pageToken = page.nextPageToken;
11
+ } while (pageToken != null && pageToken.length > 0);
12
+ return items;
13
+ }
14
+
15
+ export {
16
+ drainListPages
17
+ };
18
+ //# sourceMappingURL=chunk-SFZNIO6U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/drainListPages.ts"],"sourcesContent":["import type { ListResult } from '../server/types.js';\n\n/** Drain token-paginated list endpoints until `nextPageToken` is exhausted. */\nexport async function drainListPages<T>({\n fetchPage,\n}: {\n fetchPage: (pageToken?: string) => Promise<ListResult<T>>;\n}): Promise<T[]> {\n const items: T[] = [];\n let pageToken: string | undefined;\n do {\n const page = await fetchPage(pageToken);\n items.push(...page.data);\n pageToken = page.nextPageToken;\n } while (pageToken != null && pageToken.length > 0);\n return items;\n}\n"],"mappings":";AAGA,eAAsB,eAAkB;AAAA,EACtC;AACF,GAEiB;AACf,QAAM,QAAa,CAAC;AACpB,MAAI;AACJ,KAAG;AACD,UAAM,OAAO,MAAM,UAAU,SAAS;AACtC,UAAM,KAAK,GAAG,KAAK,IAAI;AACvB,gBAAY,KAAK;AAAA,EACnB,SAAS,aAAa,QAAQ,UAAU,SAAS;AACjD,SAAO;AACT;","names":[]}