@rnsk/toolkits 0.0.8 → 0.0.9

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 (201) hide show
  1. package/README.md +9 -1
  2. package/dist/index.d.ts +9 -1
  3. package/dist/index.js +17 -1
  4. package/dist/toolkits/bitbucket/icon.d.ts +5 -0
  5. package/dist/toolkits/bitbucket/icon.js +6 -0
  6. package/dist/toolkits/bitbucket/manifest.d.ts +3 -0
  7. package/dist/toolkits/bitbucket/manifest.js +56 -0
  8. package/dist/toolkits/bitbucket/tools/client.d.ts +38 -0
  9. package/dist/toolkits/bitbucket/tools/client.js +87 -0
  10. package/dist/toolkits/bitbucket/tools/commits.d.ts +149 -0
  11. package/dist/toolkits/bitbucket/tools/commits.js +444 -0
  12. package/dist/toolkits/bitbucket/tools/index.d.ts +1093 -0
  13. package/dist/toolkits/bitbucket/tools/index.js +770 -0
  14. package/dist/toolkits/bitbucket/tools/issues.d.ts +73 -0
  15. package/dist/toolkits/bitbucket/tools/issues.js +234 -0
  16. package/dist/toolkits/bitbucket/tools/pipelines.d.ts +124 -0
  17. package/dist/toolkits/bitbucket/tools/pipelines.js +446 -0
  18. package/dist/toolkits/bitbucket/tools/pull-requests.d.ts +174 -0
  19. package/dist/toolkits/bitbucket/tools/pull-requests.js +541 -0
  20. package/dist/toolkits/bitbucket/tools/reports.d.ts +84 -0
  21. package/dist/toolkits/bitbucket/tools/reports.js +213 -0
  22. package/dist/toolkits/bitbucket/tools/repositories.d.ts +156 -0
  23. package/dist/toolkits/bitbucket/tools/repositories.js +531 -0
  24. package/dist/toolkits/bitbucket/tools/search.d.ts +17 -0
  25. package/dist/toolkits/bitbucket/tools/search.js +67 -0
  26. package/dist/toolkits/bitbucket/tools/snippets.d.ts +34 -0
  27. package/dist/toolkits/bitbucket/tools/snippets.js +122 -0
  28. package/dist/toolkits/bitbucket/tools/users-workspaces.d.ts +65 -0
  29. package/dist/toolkits/bitbucket/tools/users-workspaces.js +294 -0
  30. package/dist/toolkits/discord/icon.d.ts +5 -0
  31. package/dist/toolkits/discord/icon.js +12 -0
  32. package/dist/toolkits/discord/manifest.d.ts +3 -0
  33. package/dist/toolkits/discord/manifest.js +52 -0
  34. package/dist/toolkits/discord/tools/applications.d.ts +79 -0
  35. package/dist/toolkits/discord/tools/applications.js +216 -0
  36. package/dist/toolkits/discord/tools/client.d.ts +22 -0
  37. package/dist/toolkits/discord/tools/client.js +69 -0
  38. package/dist/toolkits/discord/tools/guilds.d.ts +39 -0
  39. package/dist/toolkits/discord/tools/guilds.js +123 -0
  40. package/dist/toolkits/discord/tools/index.d.ts +222 -0
  41. package/dist/toolkits/discord/tools/index.js +170 -0
  42. package/dist/toolkits/discord/tools/misc.d.ts +7 -0
  43. package/dist/toolkits/discord/tools/misc.js +40 -0
  44. package/dist/toolkits/discord/tools/users.d.ts +28 -0
  45. package/dist/toolkits/discord/tools/users.js +128 -0
  46. package/dist/toolkits/figma/tools/index.d.ts +1 -1
  47. package/dist/toolkits/figma/tools/render-images-of-file-nodes.d.ts +1 -1
  48. package/dist/toolkits/gitlab/icon.d.ts +5 -0
  49. package/dist/toolkits/gitlab/icon.js +6 -0
  50. package/dist/toolkits/gitlab/manifest.d.ts +3 -0
  51. package/dist/toolkits/gitlab/manifest.js +36 -0
  52. package/dist/toolkits/gitlab/tools/client.d.ts +7 -0
  53. package/dist/toolkits/gitlab/tools/client.js +45 -0
  54. package/dist/toolkits/gitlab/tools/index.d.ts +306 -0
  55. package/dist/toolkits/gitlab/tools/index.js +36 -0
  56. package/dist/toolkits/gitlab/tools/issues.d.ts +45 -0
  57. package/dist/toolkits/gitlab/tools/issues.js +103 -0
  58. package/dist/toolkits/gitlab/tools/merge-requests.d.ts +35 -0
  59. package/dist/toolkits/gitlab/tools/merge-requests.js +91 -0
  60. package/dist/toolkits/gitlab/tools/pipelines.d.ts +30 -0
  61. package/dist/toolkits/gitlab/tools/pipelines.js +66 -0
  62. package/dist/toolkits/gitlab/tools/projects.d.ts +36 -0
  63. package/dist/toolkits/gitlab/tools/projects.js +94 -0
  64. package/dist/toolkits/gitlab/tools/repository.d.ts +21 -0
  65. package/dist/toolkits/gitlab/tools/repository.js +53 -0
  66. package/dist/toolkits/gitlab/tools/users-groups.d.ts +11 -0
  67. package/dist/toolkits/gitlab/tools/users-groups.js +30 -0
  68. package/dist/toolkits/google-ads/tools/get-rmf-report.d.ts +2 -2
  69. package/dist/toolkits/google-ads/tools/index.d.ts +2 -2
  70. package/dist/toolkits/google-analytics/icon.d.ts +5 -0
  71. package/dist/toolkits/google-analytics/icon.js +11 -0
  72. package/dist/toolkits/google-analytics/manifest.d.ts +3 -0
  73. package/dist/toolkits/google-analytics/manifest.js +48 -0
  74. package/dist/toolkits/google-analytics/tools/admin.d.ts +73 -0
  75. package/dist/toolkits/google-analytics/tools/admin.js +238 -0
  76. package/dist/toolkits/google-analytics/tools/audiences.d.ts +81 -0
  77. package/dist/toolkits/google-analytics/tools/audiences.js +190 -0
  78. package/dist/toolkits/google-analytics/tools/client.d.ts +47 -0
  79. package/dist/toolkits/google-analytics/tools/client.js +74 -0
  80. package/dist/toolkits/google-analytics/tools/custom-definitions.d.ts +62 -0
  81. package/dist/toolkits/google-analytics/tools/custom-definitions.js +106 -0
  82. package/dist/toolkits/google-analytics/tools/index.d.ts +16 -0
  83. package/dist/toolkits/google-analytics/tools/index.js +88 -0
  84. package/dist/toolkits/google-analytics/tools/links.d.ts +22 -0
  85. package/dist/toolkits/google-analytics/tools/links.js +56 -0
  86. package/dist/toolkits/google-analytics/tools/measurement.d.ts +3 -0
  87. package/dist/toolkits/google-analytics/tools/measurement.js +55 -0
  88. package/dist/toolkits/google-analytics/tools/reports.d.ts +136 -0
  89. package/dist/toolkits/google-analytics/tools/reports.js +200 -0
  90. package/dist/toolkits/google-contacts/icon.d.ts +5 -0
  91. package/dist/toolkits/google-contacts/icon.js +6 -0
  92. package/dist/toolkits/google-contacts/manifest.d.ts +3 -0
  93. package/dist/toolkits/google-contacts/manifest.js +48 -0
  94. package/dist/toolkits/google-contacts/tools/client.d.ts +19 -0
  95. package/dist/toolkits/google-contacts/tools/client.js +44 -0
  96. package/dist/toolkits/google-contacts/tools/contacts.d.ts +94 -0
  97. package/dist/toolkits/google-contacts/tools/contacts.js +273 -0
  98. package/dist/toolkits/google-contacts/tools/directory.d.ts +36 -0
  99. package/dist/toolkits/google-contacts/tools/directory.js +99 -0
  100. package/dist/toolkits/google-contacts/tools/groups.d.ts +68 -0
  101. package/dist/toolkits/google-contacts/tools/groups.js +169 -0
  102. package/dist/toolkits/google-contacts/tools/index.d.ts +347 -0
  103. package/dist/toolkits/google-contacts/tools/index.js +34 -0
  104. package/dist/toolkits/google-contacts/tools/photos.d.ts +26 -0
  105. package/dist/toolkits/google-contacts/tools/photos.js +52 -0
  106. package/dist/toolkits/google-maps/icon.d.ts +5 -0
  107. package/dist/toolkits/google-maps/icon.js +39 -0
  108. package/dist/toolkits/google-maps/manifest.d.ts +3 -0
  109. package/dist/toolkits/google-maps/manifest.js +55 -0
  110. package/dist/toolkits/google-maps/tools/client.d.ts +27 -0
  111. package/dist/toolkits/google-maps/tools/client.js +72 -0
  112. package/dist/toolkits/google-maps/tools/geocode.d.ts +49 -0
  113. package/dist/toolkits/google-maps/tools/geocode.js +168 -0
  114. package/dist/toolkits/google-maps/tools/index.d.ts +432 -0
  115. package/dist/toolkits/google-maps/tools/index.js +31 -0
  116. package/dist/toolkits/google-maps/tools/misc.d.ts +70 -0
  117. package/dist/toolkits/google-maps/tools/misc.js +158 -0
  118. package/dist/toolkits/google-maps/tools/places.d.ts +112 -0
  119. package/dist/toolkits/google-maps/tools/places.js +185 -0
  120. package/dist/toolkits/google-maps/tools/routes.d.ts +48 -0
  121. package/dist/toolkits/google-maps/tools/routes.js +97 -0
  122. package/dist/toolkits/google-maps/tools/tiles.d.ts +51 -0
  123. package/dist/toolkits/google-maps/tools/tiles.js +84 -0
  124. package/dist/toolkits/google-photos/icon.d.ts +5 -0
  125. package/dist/toolkits/google-photos/icon.js +6 -0
  126. package/dist/toolkits/google-photos/manifest.d.ts +3 -0
  127. package/dist/toolkits/google-photos/manifest.js +47 -0
  128. package/dist/toolkits/google-photos/tools/albums.d.ts +83 -0
  129. package/dist/toolkits/google-photos/tools/albums.js +180 -0
  130. package/dist/toolkits/google-photos/tools/client.d.ts +24 -0
  131. package/dist/toolkits/google-photos/tools/client.js +77 -0
  132. package/dist/toolkits/google-photos/tools/index.d.ts +261 -0
  133. package/dist/toolkits/google-photos/tools/index.js +22 -0
  134. package/dist/toolkits/google-photos/tools/media.d.ts +52 -0
  135. package/dist/toolkits/google-photos/tools/media.js +142 -0
  136. package/dist/toolkits/google-photos/tools/uploads.d.ts +58 -0
  137. package/dist/toolkits/google-photos/tools/uploads.js +107 -0
  138. package/dist/toolkits/google-tasks/tools/index.d.ts +1 -1
  139. package/dist/toolkits/google-tasks/tools/update-task-full.d.ts +1 -1
  140. package/dist/toolkits/groww/tools/index.d.ts +1 -1
  141. package/dist/toolkits/groww/tools/instruments.d.ts +1 -1
  142. package/dist/toolkits/reddit/tools/index.d.ts +1 -1
  143. package/dist/toolkits/reddit/tools/search-across-subreddits.d.ts +1 -1
  144. package/dist/toolkits/slack/icon.d.ts +5 -0
  145. package/dist/toolkits/slack/icon.js +20 -0
  146. package/dist/toolkits/slack/manifest.d.ts +3 -0
  147. package/dist/toolkits/slack/manifest.js +93 -0
  148. package/dist/toolkits/slack/tools/admin-apps.d.ts +32 -0
  149. package/dist/toolkits/slack/tools/admin-apps.js +116 -0
  150. package/dist/toolkits/slack/tools/admin-conversations.d.ts +62 -0
  151. package/dist/toolkits/slack/tools/admin-conversations.js +246 -0
  152. package/dist/toolkits/slack/tools/admin-invites.d.ts +19 -0
  153. package/dist/toolkits/slack/tools/admin-invites.js +75 -0
  154. package/dist/toolkits/slack/tools/admin-users.d.ts +52 -0
  155. package/dist/toolkits/slack/tools/admin-users.js +182 -0
  156. package/dist/toolkits/slack/tools/audit.d.ts +20 -0
  157. package/dist/toolkits/slack/tools/audit.js +81 -0
  158. package/dist/toolkits/slack/tools/calls.d.ts +38 -0
  159. package/dist/toolkits/slack/tools/calls.js +141 -0
  160. package/dist/toolkits/slack/tools/canvas.d.ts +24 -0
  161. package/dist/toolkits/slack/tools/canvas.js +102 -0
  162. package/dist/toolkits/slack/tools/client.d.ts +22 -0
  163. package/dist/toolkits/slack/tools/client.js +73 -0
  164. package/dist/toolkits/slack/tools/conversations.d.ts +131 -0
  165. package/dist/toolkits/slack/tools/conversations.js +463 -0
  166. package/dist/toolkits/slack/tools/emoji.d.ts +29 -0
  167. package/dist/toolkits/slack/tools/emoji.js +118 -0
  168. package/dist/toolkits/slack/tools/files.d.ts +113 -0
  169. package/dist/toolkits/slack/tools/files.js +368 -0
  170. package/dist/toolkits/slack/tools/index.d.ts +28 -0
  171. package/dist/toolkits/slack/tools/index.js +187 -0
  172. package/dist/toolkits/slack/tools/messages.d.ts +106 -0
  173. package/dist/toolkits/slack/tools/messages.js +340 -0
  174. package/dist/toolkits/slack/tools/misc.d.ts +42 -0
  175. package/dist/toolkits/slack/tools/misc.js +127 -0
  176. package/dist/toolkits/slack/tools/reactions-stars-pins.d.ts +69 -0
  177. package/dist/toolkits/slack/tools/reactions-stars-pins.js +236 -0
  178. package/dist/toolkits/slack/tools/reminders.d.ts +22 -0
  179. package/dist/toolkits/slack/tools/reminders.js +83 -0
  180. package/dist/toolkits/slack/tools/search.d.ts +49 -0
  181. package/dist/toolkits/slack/tools/search.js +155 -0
  182. package/dist/toolkits/slack/tools/slack-lists.d.ts +65 -0
  183. package/dist/toolkits/slack/tools/slack-lists.js +282 -0
  184. package/dist/toolkits/slack/tools/teams.d.ts +75 -0
  185. package/dist/toolkits/slack/tools/teams.js +285 -0
  186. package/dist/toolkits/slack/tools/usergroups.d.ts +56 -0
  187. package/dist/toolkits/slack/tools/usergroups.js +194 -0
  188. package/dist/toolkits/slack/tools/users.d.ts +87 -0
  189. package/dist/toolkits/slack/tools/users.js +396 -0
  190. package/dist/toolkits/youtube/tools/add-video-to-playlist.d.ts +1 -1
  191. package/dist/toolkits/youtube/tools/delete-video.d.ts +1 -1
  192. package/dist/toolkits/youtube/tools/index.d.ts +10 -10
  193. package/dist/toolkits/youtube/tools/list-caption-track.d.ts +1 -1
  194. package/dist/toolkits/youtube/tools/list-playlist-items.d.ts +1 -1
  195. package/dist/toolkits/youtube/tools/list-video-categories.d.ts +1 -1
  196. package/dist/toolkits/youtube/tools/post-comment.d.ts +1 -1
  197. package/dist/toolkits/youtube/tools/report-video-abuse.d.ts +1 -1
  198. package/dist/toolkits/youtube/tools/search-youtube.d.ts +1 -1
  199. package/dist/toolkits/youtube/tools/update-thumbnail.d.ts +1 -1
  200. package/dist/toolkits/youtube/tools/update-video.d.ts +1 -1
  201. package/package.json +1 -1
@@ -0,0 +1,238 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ import { ADMIN_V1BETA, gaGet, gaPost, gaRequest, googleAnalyticsTokenField, normalizeProperty, paginationSchema, } from './client.js';
5
+ export const getAccount = tool({
6
+ description: 'Gets a single account by resource name. Confirm the name (accounts/{id}) via listAccountsV1Beta first.',
7
+ inputSchema: z.object({
8
+ googleAnalyticsToken: googleAnalyticsTokenField,
9
+ name: z.string().describe("Account 'accounts/{id}'"),
10
+ }),
11
+ execute: async ({ googleAnalyticsToken, name }) => {
12
+ try {
13
+ return await gaGet(googleAnalyticsToken, ADMIN_V1BETA, name);
14
+ }
15
+ catch (error) {
16
+ return { error: 'Error getting account', message: error instanceof Error ? error.message : 'Unknown error' };
17
+ }
18
+ },
19
+ });
20
+ export const listAccountsV1Beta = tool({
21
+ description: 'Lists all accounts accessible to the caller (v1beta). Soft-deleted accounts are excluded unless showDeleted is set.',
22
+ inputSchema: z.object({
23
+ googleAnalyticsToken: googleAnalyticsTokenField,
24
+ ...paginationSchema,
25
+ showDeleted: z.boolean().optional().describe('Include soft-deleted accounts'),
26
+ }),
27
+ execute: async ({ googleAnalyticsToken, pageSize, pageToken, showDeleted }) => {
28
+ try {
29
+ const result = await gaRequest(googleAnalyticsToken, ADMIN_V1BETA, '/accounts', {
30
+ pageSize, pageToken, showDeleted,
31
+ });
32
+ if (!result.ok)
33
+ return { error: 'Failed to list accounts', details: result.error };
34
+ return result.data;
35
+ }
36
+ catch (error) {
37
+ return { error: 'Error listing accounts', message: error instanceof Error ? error.message : 'Unknown error' };
38
+ }
39
+ },
40
+ });
41
+ export const listAccountSummaries = tool({
42
+ description: 'Lists high-level summaries of all accessible accounts and their properties without fetching full details.',
43
+ inputSchema: z.object({
44
+ googleAnalyticsToken: googleAnalyticsTokenField,
45
+ ...paginationSchema,
46
+ }),
47
+ execute: async ({ googleAnalyticsToken, pageSize, pageToken }) => {
48
+ try {
49
+ const result = await gaRequest(googleAnalyticsToken, ADMIN_V1BETA, '/accountSummaries', { pageSize, pageToken });
50
+ if (!result.ok)
51
+ return { error: 'Failed to list account summaries', details: result.error };
52
+ return result.data;
53
+ }
54
+ catch (error) {
55
+ return { error: 'Error listing account summaries', message: error instanceof Error ? error.message : 'Unknown error' };
56
+ }
57
+ },
58
+ });
59
+ export const provisionAccountTicket = tool({
60
+ description: 'Provisions an account ticket for creating a new account. Returns a ticket the user accepts via Terms of Service at redirectUri.',
61
+ inputSchema: z.object({
62
+ googleAnalyticsToken: googleAnalyticsTokenField,
63
+ account: z.object({
64
+ displayName: z.string().describe('Human-readable account name'),
65
+ regionCode: z.string().describe("Business country as CLDR region code, e.g. 'US'"),
66
+ }).describe('Account details to create'),
67
+ redirectUri: z.string().describe('Redirect URI (registered in Cloud Console) after ToS acceptance'),
68
+ }),
69
+ execute: async ({ googleAnalyticsToken, account, redirectUri }) => gaPost(googleAnalyticsToken, ADMIN_V1BETA, 'accounts:provisionAccountTicket', { account, redirectUri }, undefined, 'provision account ticket'),
70
+ });
71
+ export const getProperty = tool({
72
+ description: 'Gets a single GA4 property (display name, time zone, currency, settings) by resource name.',
73
+ inputSchema: z.object({
74
+ googleAnalyticsToken: googleAnalyticsTokenField,
75
+ name: z.string().describe("Property 'properties/{id}'"),
76
+ }),
77
+ execute: async ({ googleAnalyticsToken, name }) => {
78
+ try {
79
+ return await gaGet(googleAnalyticsToken, ADMIN_V1BETA, name);
80
+ }
81
+ catch (error) {
82
+ return { error: 'Error getting property', message: error instanceof Error ? error.message : 'Unknown error' };
83
+ }
84
+ },
85
+ });
86
+ export const listPropertiesFiltered = tool({
87
+ description: "Lists GA4 properties by filter ('parent:accounts/123', 'ancestor:accounts/123', or 'firebase_project:...'). Preferred over the deprecated unfiltered list.",
88
+ inputSchema: z.object({
89
+ googleAnalyticsToken: googleAnalyticsTokenField,
90
+ filter: z.string().describe("Filter, e.g. 'parent:accounts/123' or 'ancestor:accounts/123'"),
91
+ ...paginationSchema,
92
+ showDeleted: z.boolean().optional().describe('Include soft-deleted properties'),
93
+ }),
94
+ execute: async ({ googleAnalyticsToken, filter, pageSize, pageToken, showDeleted }) => {
95
+ try {
96
+ const result = await gaRequest(googleAnalyticsToken, ADMIN_V1BETA, '/properties', {
97
+ filter, pageSize, pageToken, showDeleted,
98
+ });
99
+ if (!result.ok)
100
+ return { error: 'Failed to list properties', details: result.error };
101
+ return result.data;
102
+ }
103
+ catch (error) {
104
+ return { error: 'Error listing properties', message: error instanceof Error ? error.message : 'Unknown error' };
105
+ }
106
+ },
107
+ });
108
+ export const updateProperty = tool({
109
+ description: 'Updates a property (displayName, timeZone, currencyCode). Only updateMask fields change — use snake_case names or "*" for full replace.',
110
+ inputSchema: z.object({
111
+ googleAnalyticsToken: googleAnalyticsTokenField,
112
+ name: z.string().describe("Property 'properties/{id}'"),
113
+ updateMask: z.string().describe("Fields to update, e.g. 'display_name,time_zone' or '*'"),
114
+ displayName: z.string().max(100).optional(),
115
+ timeZone: z.string().optional().describe("IANA time zone, e.g. 'America/Los_Angeles'"),
116
+ currencyCode: z.string().optional().describe("ISO 4217 code, e.g. 'USD'"),
117
+ industryCategory: z.string().optional(),
118
+ propertyType: z.enum(['PROPERTY_TYPE_UNSPECIFIED', 'PROPERTY_TYPE_ORDINARY', 'PROPERTY_TYPE_SUBPROPERTY', 'PROPERTY_TYPE_ROLLUP']).optional(),
119
+ parent: z.string().optional().describe("Logical parent 'accounts/{id}' or 'properties/{id}'"),
120
+ }),
121
+ execute: async ({ googleAnalyticsToken, name, updateMask, ...fields }) => {
122
+ try {
123
+ const body = { name };
124
+ const keyMap = {
125
+ displayName: 'displayName', timeZone: 'timeZone', currencyCode: 'currencyCode',
126
+ industryCategory: 'industryCategory', propertyType: 'propertyType', parent: 'parent',
127
+ };
128
+ for (const [k, v] of Object.entries(fields)) {
129
+ if (v !== undefined && keyMap[k])
130
+ body[keyMap[k]] = v;
131
+ }
132
+ const result = await gaRequest(googleAnalyticsToken, ADMIN_V1BETA, `/${name}`, {
133
+ method: 'PATCH', query: { updateMask }, body,
134
+ });
135
+ if (!result.ok)
136
+ return { error: 'Failed to update property', details: result.error };
137
+ return result.data;
138
+ }
139
+ catch (error) {
140
+ return { error: 'Error updating property', message: error instanceof Error ? error.message : 'Unknown error' };
141
+ }
142
+ },
143
+ });
144
+ export const createRollupProperty = tool({
145
+ description: 'Creates a roll-up property aggregating multiple GA4 source properties into one view.',
146
+ inputSchema: z.object({
147
+ googleAnalyticsToken: googleAnalyticsTokenField,
148
+ account: z.string().describe("Parent account 'accounts/{id}'"),
149
+ displayName: z.string().describe('Display name for the roll-up property'),
150
+ timeZone: z.string().describe("IANA time zone, e.g. 'America/Los_Angeles'"),
151
+ sourceProperties: z.array(z.string()).optional().describe("Source properties, e.g. ['properties/123']"),
152
+ }),
153
+ execute: async ({ googleAnalyticsToken, account, displayName, timeZone, sourceProperties }) => {
154
+ const body = { account, displayName, timeZone };
155
+ if (sourceProperties)
156
+ body.sourceProperties = sourceProperties;
157
+ return gaPost(googleAnalyticsToken, ADMIN_V1BETA, 'properties:createRollupProperty', body, undefined, 'create roll-up property');
158
+ },
159
+ });
160
+ export const getPropertyQuotasSnapshot = tool({
161
+ description: 'Gets property quota usage by category (core, funnel, realtime snapshots). Data can lag real consumption — treat as approximate.',
162
+ inputSchema: z.object({
163
+ googleAnalyticsToken: googleAnalyticsTokenField,
164
+ property: z.string().describe("Property 'properties/{id}' (bare ID accepted)"),
165
+ }),
166
+ execute: async ({ googleAnalyticsToken, property }) => {
167
+ try {
168
+ const result = await gaRequest(googleAnalyticsToken, ADMIN_V1BETA, `/${normalizeProperty(property)}:getPropertyQuotasSnapshot`);
169
+ if (!result.ok)
170
+ return { error: 'Failed to get property quotas snapshot', details: result.error };
171
+ return result.data;
172
+ }
173
+ catch (error) {
174
+ return { error: 'Error getting property quotas snapshot', message: error instanceof Error ? error.message : 'Unknown error' };
175
+ }
176
+ },
177
+ });
178
+ export const getAttributionSettings = tool({
179
+ description: 'Gets attribution configuration (models, lookback windows, conversion export) for a property.',
180
+ inputSchema: z.object({
181
+ googleAnalyticsToken: googleAnalyticsTokenField,
182
+ name: z.string().describe("Attribution settings 'properties/{id}/attributionSettings'"),
183
+ }),
184
+ execute: async ({ googleAnalyticsToken, name }) => {
185
+ try {
186
+ return await gaGet(googleAnalyticsToken, ADMIN_V1BETA, name);
187
+ }
188
+ catch (error) {
189
+ return { error: 'Error getting attribution settings', message: error instanceof Error ? error.message : 'Unknown error' };
190
+ }
191
+ },
192
+ });
193
+ export const getDataRetentionSettings = tool({
194
+ description: 'Gets event-level and user-level data retention durations and reset settings for a property.',
195
+ inputSchema: z.object({
196
+ googleAnalyticsToken: googleAnalyticsTokenField,
197
+ name: z.string().describe("Retention settings 'properties/{id}/dataRetentionSettings'"),
198
+ }),
199
+ execute: async ({ googleAnalyticsToken, name }) => {
200
+ try {
201
+ return await gaGet(googleAnalyticsToken, ADMIN_V1BETA, name);
202
+ }
203
+ catch (error) {
204
+ return { error: 'Error getting data retention settings', message: error instanceof Error ? error.message : 'Unknown error' };
205
+ }
206
+ },
207
+ });
208
+ export const getDataSharingSettings = tool({
209
+ description: 'Gets data-sharing configuration for an account (support, sales, product sharing flags).',
210
+ inputSchema: z.object({
211
+ googleAnalyticsToken: googleAnalyticsTokenField,
212
+ name: z.string().describe("Sharing settings 'accounts/{id}/dataSharingSettings'"),
213
+ }),
214
+ execute: async ({ googleAnalyticsToken, name }) => {
215
+ try {
216
+ return await gaGet(googleAnalyticsToken, ADMIN_V1BETA, name);
217
+ }
218
+ catch (error) {
219
+ return { error: 'Error getting data sharing settings', message: error instanceof Error ? error.message : 'Unknown error' };
220
+ }
221
+ },
222
+ });
223
+ export const getGoogleSignalsSettings = tool({
224
+ description: 'Gets Google Signals configuration (enabled state, consent status) for a property.',
225
+ inputSchema: z.object({
226
+ googleAnalyticsToken: googleAnalyticsTokenField,
227
+ name: z.string().describe("Signals settings 'properties/{id}/googleSignalsSettings'"),
228
+ }),
229
+ execute: async ({ googleAnalyticsToken, name }) => {
230
+ try {
231
+ return await gaGet(googleAnalyticsToken, ADMIN_V1BETA, name);
232
+ }
233
+ catch (error) {
234
+ return { error: 'Error getting Google Signals settings', message: error instanceof Error ? error.message : 'Unknown error' };
235
+ }
236
+ },
237
+ });
238
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1,81 @@
1
+ export declare const getAudience: import("ai").Tool<{
2
+ googleAnalyticsToken: string;
3
+ propertyId: string;
4
+ audienceId: string;
5
+ }, any>;
6
+ export declare const listAudiences: import("ai").Tool<{
7
+ parent: string;
8
+ googleAnalyticsToken: string;
9
+ pageToken?: string | undefined;
10
+ pageSize?: number | undefined;
11
+ }, any>;
12
+ export declare const createAudienceExport: import("ai").Tool<{
13
+ parent: string;
14
+ audience: string;
15
+ googleAnalyticsToken: string;
16
+ dimensions?: {
17
+ dimensionName: string;
18
+ }[] | undefined;
19
+ }, any>;
20
+ export declare const getAudienceExport: import("ai").Tool<{
21
+ name: string;
22
+ googleAnalyticsToken: string;
23
+ }, any>;
24
+ export declare const listAudienceExports: import("ai").Tool<{
25
+ parent: string;
26
+ googleAnalyticsToken: string;
27
+ pageToken?: string | undefined;
28
+ pageSize?: number | undefined;
29
+ }, any>;
30
+ export declare const queryAudienceExport: import("ai").Tool<{
31
+ name: string;
32
+ googleAnalyticsToken: string;
33
+ limit?: number | undefined;
34
+ offset?: number | undefined;
35
+ }, any>;
36
+ export declare const createAudienceList: import("ai").Tool<{
37
+ parent: string;
38
+ dimensions: {
39
+ dimensionName: string;
40
+ }[];
41
+ audience: string;
42
+ googleAnalyticsToken: string;
43
+ webhookNotification?: Record<string, any> | undefined;
44
+ }, any>;
45
+ export declare const getAudienceList: import("ai").Tool<{
46
+ name: string;
47
+ googleAnalyticsToken: string;
48
+ }, any>;
49
+ export declare const listAudienceLists: import("ai").Tool<{
50
+ parent: string;
51
+ googleAnalyticsToken: string;
52
+ pageToken?: string | undefined;
53
+ pageSize?: number | undefined;
54
+ }, any>;
55
+ export declare const queryAudienceList: import("ai").Tool<{
56
+ name: string;
57
+ googleAnalyticsToken: string;
58
+ limit?: number | undefined;
59
+ offset?: number | undefined;
60
+ }, any>;
61
+ export declare const createRecurringAudienceList: import("ai").Tool<{
62
+ parent: string;
63
+ dimensions: {
64
+ dimensionName: string;
65
+ }[];
66
+ audience: string;
67
+ googleAnalyticsToken: string;
68
+ webhookNotification?: Record<string, any> | undefined;
69
+ activeDaysRemaining?: number | undefined;
70
+ }, any>;
71
+ export declare const getRecurringAudienceList: import("ai").Tool<{
72
+ name: string;
73
+ googleAnalyticsToken: string;
74
+ }, any>;
75
+ export declare const listRecurringAudienceLists: import("ai").Tool<{
76
+ parent: string;
77
+ googleAnalyticsToken: string;
78
+ pageToken?: string | undefined;
79
+ pageSize?: number | undefined;
80
+ }, any>;
81
+ //# sourceMappingURL=audiences.d.ts.map
@@ -0,0 +1,190 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ import { ADMIN_V1ALPHA, ADMIN_V1BETA, DATA_V1ALPHA, gaGet, gaList, gaPost, googleAnalyticsTokenField, normalizeProperty, paginationSchema, } from './client.js';
5
+ const audienceDimension = z.object({
6
+ dimensionName: z.string().describe("Dimension API name, e.g. 'deviceId', 'userId', 'city', 'country'"),
7
+ });
8
+ const propertyField = z.string().describe("GA4 property 'properties/{id}' (bare numeric ID accepted)");
9
+ export const getAudience = tool({
10
+ description: 'Gets a single audience configuration (membership criteria, filter clauses) by property + audience ID.',
11
+ inputSchema: z.object({
12
+ googleAnalyticsToken: googleAnalyticsTokenField,
13
+ propertyId: z.string().describe("Property ID ('123456789' or 'properties/123456789')"),
14
+ audienceId: z.string().describe("Numeric audience ID, e.g. '11228260226'"),
15
+ }),
16
+ execute: async ({ googleAnalyticsToken, propertyId, audienceId }) => {
17
+ try {
18
+ return await gaGet(googleAnalyticsToken, ADMIN_V1BETA, `${normalizeProperty(propertyId)}/audiences/${audienceId}`);
19
+ }
20
+ catch (error) {
21
+ return { error: 'Error getting audience', message: error instanceof Error ? error.message : 'Unknown error' };
22
+ }
23
+ },
24
+ });
25
+ export const listAudiences = tool({
26
+ description: 'Lists audience configurations on a property. Audiences created before 2020 may not be supported.',
27
+ inputSchema: z.object({
28
+ googleAnalyticsToken: googleAnalyticsTokenField,
29
+ parent: propertyField,
30
+ ...paginationSchema,
31
+ }),
32
+ execute: async ({ googleAnalyticsToken, parent, pageSize, pageToken }) => gaList(googleAnalyticsToken, ADMIN_V1BETA, normalizeProperty(parent), 'audiences', { pageSize, pageToken }, 'list audiences'),
33
+ });
34
+ export const createAudienceExport = tool({
35
+ description: 'Exports a snapshot of users in an audience (async long-running operation). Poll getAudienceExport, then queryAudienceExport for rows.',
36
+ inputSchema: z.object({
37
+ googleAnalyticsToken: googleAnalyticsTokenField,
38
+ parent: propertyField,
39
+ audience: z.string().describe("Audience 'properties/{id}/audiences/{audienceId}'"),
40
+ dimensions: z.array(audienceDimension).optional().describe('Dimensions to include in the export rows'),
41
+ }),
42
+ execute: async ({ googleAnalyticsToken, parent, audience, dimensions }) => {
43
+ const body = { audience };
44
+ if (dimensions)
45
+ body.dimensions = dimensions;
46
+ return gaPost(googleAnalyticsToken, ADMIN_V1ALPHA, `${normalizeProperty(parent)}/audienceExports`, body, undefined, 'create audience export');
47
+ },
48
+ });
49
+ export const getAudienceExport = tool({
50
+ description: 'Gets audience-export metadata/state after creation.',
51
+ inputSchema: z.object({
52
+ googleAnalyticsToken: googleAnalyticsTokenField,
53
+ name: z.string().describe("Export 'properties/{id}/audienceExports/{exportId}'"),
54
+ }),
55
+ execute: async ({ googleAnalyticsToken, name }) => {
56
+ try {
57
+ return await gaGet(googleAnalyticsToken, ADMIN_V1ALPHA, name);
58
+ }
59
+ catch (error) {
60
+ return { error: 'Error getting audience export', message: error instanceof Error ? error.message : 'Unknown error' };
61
+ }
62
+ },
63
+ });
64
+ export const listAudienceExports = tool({
65
+ description: 'Lists audience exports for a property to find and reuse existing exports.',
66
+ inputSchema: z.object({
67
+ googleAnalyticsToken: googleAnalyticsTokenField,
68
+ parent: propertyField,
69
+ ...paginationSchema,
70
+ }),
71
+ execute: async ({ googleAnalyticsToken, parent, pageSize, pageToken }) => gaList(googleAnalyticsToken, ADMIN_V1ALPHA, normalizeProperty(parent), 'audienceExports', { pageSize, pageToken }, 'list audience exports'),
72
+ });
73
+ export const queryAudienceExport = tool({
74
+ description: 'Retrieves rows from an audience export. Use after the export operation completes.',
75
+ inputSchema: z.object({
76
+ googleAnalyticsToken: googleAnalyticsTokenField,
77
+ name: z.string().describe("Export 'properties/{id}/audienceExports/{exportId}'"),
78
+ limit: z.number().min(1).optional(),
79
+ offset: z.number().min(0).optional(),
80
+ }),
81
+ execute: async ({ googleAnalyticsToken, name, limit, offset }) => {
82
+ const body = {};
83
+ if (limit !== undefined)
84
+ body.limit = limit;
85
+ if (offset !== undefined)
86
+ body.offset = offset;
87
+ return gaPost(googleAnalyticsToken, DATA_V1ALPHA, `${name}:query`, body, undefined, 'query audience export');
88
+ },
89
+ });
90
+ export const createAudienceList = tool({
91
+ description: 'Creates an audience list snapshot (async operation). At least one dimension is required. Poll getAudienceList, then queryAudienceList.',
92
+ inputSchema: z.object({
93
+ googleAnalyticsToken: googleAnalyticsTokenField,
94
+ parent: propertyField,
95
+ audience: z.string().describe("Audience 'properties/{id}/audiences/{audienceId}'"),
96
+ dimensions: z.array(audienceDimension).min(1).describe('At least one dimension is required'),
97
+ webhookNotification: z.record(z.any()).optional(),
98
+ }),
99
+ execute: async ({ googleAnalyticsToken, parent, audience, dimensions, webhookNotification }) => {
100
+ const body = { audience, dimensions };
101
+ if (webhookNotification)
102
+ body.webhookNotification = webhookNotification;
103
+ return gaPost(googleAnalyticsToken, ADMIN_V1ALPHA, `${normalizeProperty(parent)}/audienceLists`, body, undefined, 'create audience list');
104
+ },
105
+ });
106
+ export const getAudienceList = tool({
107
+ description: 'Gets audience-list metadata/state after creation.',
108
+ inputSchema: z.object({
109
+ googleAnalyticsToken: googleAnalyticsTokenField,
110
+ name: z.string().describe("Audience list 'properties/{id}/audienceLists/{listId}'"),
111
+ }),
112
+ execute: async ({ googleAnalyticsToken, name }) => {
113
+ try {
114
+ return await gaGet(googleAnalyticsToken, ADMIN_V1ALPHA, name);
115
+ }
116
+ catch (error) {
117
+ return { error: 'Error getting audience list', message: error instanceof Error ? error.message : 'Unknown error' };
118
+ }
119
+ },
120
+ });
121
+ export const listAudienceLists = tool({
122
+ description: 'Lists audience lists for a property to find and reuse existing lists.',
123
+ inputSchema: z.object({
124
+ googleAnalyticsToken: googleAnalyticsTokenField,
125
+ parent: propertyField,
126
+ ...paginationSchema,
127
+ }),
128
+ execute: async ({ googleAnalyticsToken, parent, pageSize, pageToken }) => gaList(googleAnalyticsToken, ADMIN_V1ALPHA, normalizeProperty(parent), 'audienceLists', { pageSize, pageToken }, 'list audience lists'),
129
+ });
130
+ export const queryAudienceList = tool({
131
+ description: 'Retrieves rows from an audience list. Use after the list operation completes.',
132
+ inputSchema: z.object({
133
+ googleAnalyticsToken: googleAnalyticsTokenField,
134
+ name: z.string().describe("Audience list 'properties/{id}/audienceLists/{listId}'"),
135
+ limit: z.number().min(1).optional(),
136
+ offset: z.number().min(0).optional(),
137
+ }),
138
+ execute: async ({ googleAnalyticsToken, name, limit, offset }) => {
139
+ const body = {};
140
+ if (limit !== undefined)
141
+ body.limit = limit;
142
+ if (offset !== undefined)
143
+ body.offset = offset;
144
+ return gaPost(googleAnalyticsToken, DATA_V1ALPHA, `${name}:query`, body, undefined, 'query audience list');
145
+ },
146
+ });
147
+ export const createRecurringAudienceList = tool({
148
+ description: 'Creates a recurring audience list that auto-generates fresh lists daily. Reduces quota-token consumption vs repeated one-off lists.',
149
+ inputSchema: z.object({
150
+ googleAnalyticsToken: googleAnalyticsTokenField,
151
+ parent: propertyField,
152
+ audience: z.string().describe("Audience 'properties/{id}/audiences/{audienceId}'"),
153
+ dimensions: z.array(audienceDimension).min(1).describe('At least one dimension is required'),
154
+ activeDaysRemaining: z.number().min(1).optional().describe('Days the recurring list stays active'),
155
+ webhookNotification: z.record(z.any()).optional(),
156
+ }),
157
+ execute: async ({ googleAnalyticsToken, parent, audience, dimensions, activeDaysRemaining, webhookNotification }) => {
158
+ const body = { audience, dimensions };
159
+ if (activeDaysRemaining !== undefined)
160
+ body.activeDaysRemaining = activeDaysRemaining;
161
+ if (webhookNotification)
162
+ body.webhookNotification = webhookNotification;
163
+ return gaPost(googleAnalyticsToken, ADMIN_V1ALPHA, `${normalizeProperty(parent)}/recurringAudienceLists`, body, undefined, 'create recurring audience list');
164
+ },
165
+ });
166
+ export const getRecurringAudienceList = tool({
167
+ description: 'Gets a recurring audience list, including the resource name of the most recent generated list.',
168
+ inputSchema: z.object({
169
+ googleAnalyticsToken: googleAnalyticsTokenField,
170
+ name: z.string().describe("Recurring list 'properties/{id}/recurringAudienceLists/{listId}'"),
171
+ }),
172
+ execute: async ({ googleAnalyticsToken, name }) => {
173
+ try {
174
+ return await gaGet(googleAnalyticsToken, ADMIN_V1ALPHA, name);
175
+ }
176
+ catch (error) {
177
+ return { error: 'Error getting recurring audience list', message: error instanceof Error ? error.message : 'Unknown error' };
178
+ }
179
+ },
180
+ });
181
+ export const listRecurringAudienceLists = tool({
182
+ description: 'Lists recurring audience lists for a property.',
183
+ inputSchema: z.object({
184
+ googleAnalyticsToken: googleAnalyticsTokenField,
185
+ parent: propertyField,
186
+ ...paginationSchema,
187
+ }),
188
+ execute: async ({ googleAnalyticsToken, parent, pageSize, pageToken }) => gaList(googleAnalyticsToken, ADMIN_V1ALPHA, normalizeProperty(parent), 'recurringAudienceLists', { pageSize, pageToken }, 'list recurring audience lists'),
189
+ });
190
+ //# sourceMappingURL=audiences.js.map
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ export declare const ADMIN_V1BETA = "https://analyticsadmin.googleapis.com/v1beta";
3
+ export declare const ADMIN_V1ALPHA = "https://analyticsadmin.googleapis.com/v1alpha";
4
+ export declare const DATA_V1BETA = "https://analyticsdata.googleapis.com/v1beta";
5
+ export declare const DATA_V1ALPHA = "https://analyticsdata.googleapis.com/v1alpha";
6
+ export declare const googleAnalyticsTokenField: z.ZodString;
7
+ export declare function buildQuery(params: Record<string, string | number | boolean | undefined>): string;
8
+ export declare function gaRequest(googleAnalyticsToken: string, base: string, path: string, options?: {
9
+ method?: string;
10
+ query?: Record<string, string | number | boolean | undefined>;
11
+ body?: unknown;
12
+ }): Promise<{
13
+ ok: false;
14
+ error: any;
15
+ data?: undefined;
16
+ } | {
17
+ ok: true;
18
+ data: any;
19
+ error?: undefined;
20
+ }>;
21
+ export declare function gaGet(token: string, base: string, name: string, query?: Record<string, string | number | boolean | undefined>): Promise<any>;
22
+ export declare function gaPost(token: string, base: string, path: string, body?: unknown, query?: Record<string, string | number | boolean | undefined>, action?: string): Promise<any>;
23
+ export declare function gaList(token: string, base: string, parent: string, resource: string, options?: {
24
+ pageSize?: number;
25
+ pageToken?: string;
26
+ extra?: Record<string, string | number | boolean | undefined>;
27
+ }, action?: string): Promise<any>;
28
+ export declare function normalizeProperty(property: string): string;
29
+ export declare const paginationSchema: {
30
+ pageSize: z.ZodOptional<z.ZodNumber>;
31
+ pageToken: z.ZodOptional<z.ZodString>;
32
+ };
33
+ export declare const namedMetric: z.ZodObject<{
34
+ name: z.ZodString;
35
+ }, "strip", z.ZodUnknown, z.objectOutputType<{
36
+ name: z.ZodString;
37
+ }, z.ZodUnknown, "strip">, z.objectInputType<{
38
+ name: z.ZodString;
39
+ }, z.ZodUnknown, "strip">>;
40
+ export declare const namedDimension: z.ZodObject<{
41
+ name: z.ZodString;
42
+ }, "strip", z.ZodUnknown, z.objectOutputType<{
43
+ name: z.ZodString;
44
+ }, z.ZodUnknown, "strip">, z.objectInputType<{
45
+ name: z.ZodString;
46
+ }, z.ZodUnknown, "strip">>;
47
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1,74 @@
1
+ // @ts-nocheck
2
+ import { z } from 'zod';
3
+ export const ADMIN_V1BETA = 'https://analyticsadmin.googleapis.com/v1beta';
4
+ export const ADMIN_V1ALPHA = 'https://analyticsadmin.googleapis.com/v1alpha';
5
+ export const DATA_V1BETA = 'https://analyticsdata.googleapis.com/v1beta';
6
+ export const DATA_V1ALPHA = 'https://analyticsdata.googleapis.com/v1alpha';
7
+ export const googleAnalyticsTokenField = z.string().describe('Google Analytics OAuth access token (Bearer)');
8
+ export function buildQuery(params) {
9
+ const search = new URLSearchParams();
10
+ for (const [key, value] of Object.entries(params)) {
11
+ if (value !== undefined)
12
+ search.set(key, String(value));
13
+ }
14
+ const qs = search.toString();
15
+ return qs ? `?${qs}` : '';
16
+ }
17
+ export async function gaRequest(googleAnalyticsToken, base, path, options) {
18
+ const url = `${base}${path.startsWith('/') ? path : `/${path}`}${buildQuery(options?.query ?? {})}`;
19
+ const headers = { Authorization: `Bearer ${googleAnalyticsToken}` };
20
+ if (options?.body !== undefined)
21
+ headers['Content-Type'] = 'application/json';
22
+ const response = await fetch(url, {
23
+ method: options?.method ?? 'GET',
24
+ headers,
25
+ body: options?.body !== undefined ? JSON.stringify(options.body) : undefined,
26
+ });
27
+ if (!response.ok) {
28
+ const details = await response.json().catch(() => ({}));
29
+ return { ok: false, error: details };
30
+ }
31
+ if (response.status === 204)
32
+ return { ok: true, data: { success: true } };
33
+ return { ok: true, data: await response.json().catch(() => ({})) };
34
+ }
35
+ export async function gaGet(token, base, name, query) {
36
+ const result = await gaRequest(token, base, `/${name}`, { query });
37
+ if (!result.ok)
38
+ return { error: 'Failed to fetch resource', details: result.error };
39
+ return result.data;
40
+ }
41
+ export async function gaPost(token, base, path, body, query, action = 'perform action') {
42
+ try {
43
+ const result = await gaRequest(token, base, `/${path}`, { method: 'POST', body: body ?? {}, query });
44
+ if (!result.ok)
45
+ return { error: `Failed to ${action}`, details: result.error };
46
+ return result.data;
47
+ }
48
+ catch (error) {
49
+ return { error: `Error while trying to ${action}`, message: error instanceof Error ? error.message : 'Unknown error' };
50
+ }
51
+ }
52
+ export async function gaList(token, base, parent, resource, options, action = 'list resources') {
53
+ try {
54
+ const result = await gaRequest(token, base, `/${parent}/${resource}`, {
55
+ query: { pageSize: options?.pageSize, pageToken: options?.pageToken, ...options?.extra },
56
+ });
57
+ if (!result.ok)
58
+ return { error: `Failed to ${action}`, details: result.error };
59
+ return result.data;
60
+ }
61
+ catch (error) {
62
+ return { error: `Error while trying to ${action}`, message: error instanceof Error ? error.message : 'Unknown error' };
63
+ }
64
+ }
65
+ export function normalizeProperty(property) {
66
+ return property.startsWith('properties/') ? property : `properties/${property}`;
67
+ }
68
+ export const paginationSchema = {
69
+ pageSize: z.number().min(1).max(200).optional().describe('Max resources per page (default 50, max 200)'),
70
+ pageToken: z.string().optional().describe('Page token from a previous list call'),
71
+ };
72
+ export const namedMetric = z.object({ name: z.string().describe("Metric API name, e.g. 'activeUsers'") }).catchall(z.unknown());
73
+ export const namedDimension = z.object({ name: z.string().describe("Dimension API name, e.g. 'country'") }).catchall(z.unknown());
74
+ //# sourceMappingURL=client.js.map