@settlemint/sdk-hasura 2.4.1 → 2.5.1-maine2c05e47

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
@@ -30,7 +30,9 @@
30
30
  - [API Reference](#api-reference)
31
31
  - [Functions](#functions)
32
32
  - [createHasuraClient()](#createhasuraclient)
33
+ - [createHasuraMetadataClient()](#createhasurametadataclient)
33
34
  - [createPostgresPool()](#createpostgrespool)
35
+ - [trackAllTables()](#trackalltables)
34
36
  - [Type Aliases](#type-aliases)
35
37
  - [ClientOptions](#clientoptions)
36
38
  - [RequestConfig](#requestconfig)
@@ -51,7 +53,7 @@ The SettleMint Hasura SDK provides a seamless way to interact with Hasura GraphQ
51
53
 
52
54
  > **createHasuraClient**\<`Setup`\>(`options`, `clientOptions?`, `logger?`): `object`
53
55
 
54
- Defined in: [sdk/hasura/src/hasura.ts:82](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L82)
56
+ Defined in: [sdk/hasura/src/hasura.ts:83](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L83)
55
57
 
56
58
  Creates a Hasura GraphQL client with proper type safety using gql.tada
57
59
 
@@ -83,8 +85,8 @@ An object containing:
83
85
 
84
86
  | Name | Type | Defined in |
85
87
  | ------ | ------ | ------ |
86
- | `client` | `GraphQLClient` | [sdk/hasura/src/hasura.ts:87](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L87) |
87
- | `graphql` | `initGraphQLTada`\<`Setup`\> | [sdk/hasura/src/hasura.ts:88](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L88) |
88
+ | `client` | `GraphQLClient` | [sdk/hasura/src/hasura.ts:88](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L88) |
89
+ | `graphql` | `initGraphQLTada`\<`Setup`\> | [sdk/hasura/src/hasura.ts:89](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L89) |
88
90
 
89
91
  ##### Throws
90
92
 
@@ -138,11 +140,77 @@ const result = await client.request(query);
138
140
 
139
141
  ***
140
142
 
143
+ #### createHasuraMetadataClient()
144
+
145
+ > **createHasuraMetadataClient**(`options`, `logger?`): \<`T`\>(`query`) => `Promise`\<\{ `data`: `T`; `ok`: `boolean`; \}\>
146
+
147
+ Defined in: [sdk/hasura/src/hasura.ts:132](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L132)
148
+
149
+ Creates a Hasura Metadata client
150
+
151
+ ##### Parameters
152
+
153
+ | Parameter | Type | Description |
154
+ | ------ | ------ | ------ |
155
+ | `options` | \{ `accessToken?`: `string`; `adminSecret`: `string`; `cache?`: `"default"` \| `"force-cache"` \| `"no-cache"` \| `"no-store"` \| `"only-if-cached"` \| `"reload"`; `instance`: `string`; \} | Configuration options for the client |
156
+ | `options.accessToken?` | `string` | - |
157
+ | `options.adminSecret?` | `string` | - |
158
+ | `options.cache?` | `"default"` \| `"force-cache"` \| `"no-cache"` \| `"no-store"` \| `"only-if-cached"` \| `"reload"` | - |
159
+ | `options.instance?` | `string` | - |
160
+ | `logger?` | `Logger` | Optional logger to use for logging the requests |
161
+
162
+ ##### Returns
163
+
164
+ A function that can be used to make requests to the Hasura Metadata API
165
+
166
+ > \<`T`\>(`query`): `Promise`\<\{ `data`: `T`; `ok`: `boolean`; \}\>
167
+
168
+ ###### Type Parameters
169
+
170
+ | Type Parameter |
171
+ | ------ |
172
+ | `T` |
173
+
174
+ ###### Parameters
175
+
176
+ | Parameter | Type |
177
+ | ------ | ------ |
178
+ | `query` | `object` |
179
+
180
+ ###### Returns
181
+
182
+ `Promise`\<\{ `data`: `T`; `ok`: `boolean`; \}\>
183
+
184
+ ##### Throws
185
+
186
+ Will throw an error if the options fail validation against ClientOptionsSchema
187
+
188
+ ##### Example
189
+
190
+ ```ts
191
+ import { createHasuraMetadataClient } from '@settlemint/sdk-hasura';
192
+
193
+ const client = createHasuraMetadataClient({
194
+ instance: process.env.SETTLEMINT_HASURA_ENDPOINT,
195
+ accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,
196
+ adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,
197
+ });
198
+
199
+ const result = await client({
200
+ type: "pg_get_source_tables",
201
+ args: {
202
+ source: "default",
203
+ },
204
+ });
205
+ ```
206
+
207
+ ***
208
+
141
209
  #### createPostgresPool()
142
210
 
143
211
  > **createPostgresPool**(`databaseUrl`): `Pool`
144
212
 
145
- Defined in: [sdk/hasura/src/postgres.ts:107](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/postgres.ts#L107)
213
+ Defined in: [sdk/hasura/src/postgres.ts:107](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/postgres.ts#L107)
146
214
 
147
215
  Creates a PostgreSQL connection pool with error handling and retry mechanisms
148
216
 
@@ -179,13 +247,60 @@ try {
179
247
  }
180
248
  ```
181
249
 
250
+ ***
251
+
252
+ #### trackAllTables()
253
+
254
+ > **trackAllTables**(`databaseName`, `client`, `tableOptions`): `Promise`\<\{ `messages`: `string`[]; `result`: `"success"` \| `"no-tables"`; \}\>
255
+
256
+ Defined in: [sdk/hasura/src/utils/track-all-tables.ts:30](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/utils/track-all-tables.ts#L30)
257
+
258
+ Track all tables in a database
259
+
260
+ ##### Parameters
261
+
262
+ | Parameter | Type | Description |
263
+ | ------ | ------ | ------ |
264
+ | `databaseName` | `string` | The name of the database to track tables for |
265
+ | `client` | \<`T`\>(`query`) => `Promise`\<\{ `data`: `T`; `ok`: `boolean`; \}\> | The client options to use for the Hasura client |
266
+ | `tableOptions` | \{ `excludeSchemas?`: `string`[]; `includeSchemas?`: `string`[]; \} | The options to use for the table tracking |
267
+ | `tableOptions.excludeSchemas?` | `string`[] | The schemas to exclude from the tracking |
268
+ | `tableOptions.includeSchemas?` | `string`[] | The schemas to include in the tracking |
269
+
270
+ ##### Returns
271
+
272
+ `Promise`\<\{ `messages`: `string`[]; `result`: `"success"` \| `"no-tables"`; \}\>
273
+
274
+ A promise that resolves to an object with a result property indicating success or failure
275
+
276
+ ##### Example
277
+
278
+ ```ts
279
+ import { trackAllTables } from "@settlemint/sdk-hasura/utils/track-all-tables";
280
+
281
+ const client = createHasuraMetadataClient({
282
+ instance: "http://localhost:8080",
283
+ accessToken: "test",
284
+ adminSecret: "test",
285
+ });
286
+
287
+ const result = await trackAllTables("default", client, {
288
+ excludeSchemas: ["drizzle"],
289
+ });
290
+ if (result.result === "success") {
291
+ console.log("Tables tracked successfully");
292
+ } else {
293
+ console.error("Failed to track tables");
294
+ }
295
+ ```
296
+
182
297
  ### Type Aliases
183
298
 
184
299
  #### ClientOptions
185
300
 
186
301
  > **ClientOptions** = `object`
187
302
 
188
- Defined in: [sdk/hasura/src/hasura.ts:27](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L27)
303
+ Defined in: [sdk/hasura/src/hasura.ts:28](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L28)
189
304
 
190
305
  Type definition for client options derived from the ClientOptionsSchema.
191
306
 
@@ -193,10 +308,10 @@ Type definition for client options derived from the ClientOptionsSchema.
193
308
 
194
309
  | Name | Type | Default value | Defined in |
195
310
  | ------ | ------ | ------ | ------ |
196
- | <a id="accesstoken"></a> `accessToken?` | `string` | - | [sdk/hasura/src/hasura.ts:19](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L19) |
197
- | <a id="adminsecret"></a> `adminSecret` | `string` | - | [sdk/hasura/src/hasura.ts:20](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L20) |
198
- | <a id="cache"></a> `cache?` | `"default"` \| `"force-cache"` \| `"no-cache"` \| `"no-store"` \| `"only-if-cached"` \| `"reload"` | - | [sdk/hasura/src/hasura.ts:21](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L21) |
199
- | <a id="instance"></a> `instance` | `string` | `UrlOrPathSchema` | [sdk/hasura/src/hasura.ts:18](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L18) |
311
+ | <a id="accesstoken"></a> `accessToken?` | `string` | - | [sdk/hasura/src/hasura.ts:20](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L20) |
312
+ | <a id="adminsecret"></a> `adminSecret` | `string` | - | [sdk/hasura/src/hasura.ts:21](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L21) |
313
+ | <a id="cache"></a> `cache?` | `"default"` \| `"force-cache"` \| `"no-cache"` \| `"no-store"` \| `"only-if-cached"` \| `"reload"` | - | [sdk/hasura/src/hasura.ts:22](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L22) |
314
+ | <a id="instance"></a> `instance` | `string` | `UrlOrPathSchema` | [sdk/hasura/src/hasura.ts:19](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L19) |
200
315
 
201
316
  ***
202
317
 
@@ -204,7 +319,7 @@ Type definition for client options derived from the ClientOptionsSchema.
204
319
 
205
320
  > **RequestConfig** = `ConstructorParameters`\<*typeof* `GraphQLClient`\>\[`1`\]
206
321
 
207
- Defined in: [sdk/hasura/src/hasura.ts:12](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L12)
322
+ Defined in: [sdk/hasura/src/hasura.ts:13](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L13)
208
323
 
209
324
  Type definition for GraphQL client configuration options
210
325
 
@@ -214,7 +329,7 @@ Type definition for GraphQL client configuration options
214
329
 
215
330
  > `const` **ClientOptionsSchema**: `ZodObject`\<[`ClientOptions`](#clientoptions)\>
216
331
 
217
- Defined in: [sdk/hasura/src/hasura.ts:17](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L17)
332
+ Defined in: [sdk/hasura/src/hasura.ts:18](https://github.com/settlemint/sdk/blob/v2.5.1/sdk/hasura/src/hasura.ts#L18)
218
333
 
219
334
  Schema for validating client options for the Hasura client.
220
335
 
package/dist/hasura.cjs CHANGED
@@ -22,6 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  }) : target, mod));
23
23
 
24
24
  //#endregion
25
+ const __settlemint_sdk_utils = __toESM(require("@settlemint/sdk-utils"));
25
26
  const __settlemint_sdk_utils_http = __toESM(require("@settlemint/sdk-utils/http"));
26
27
  const __settlemint_sdk_utils_logging = __toESM(require("@settlemint/sdk-utils/logging"));
27
28
  const __settlemint_sdk_utils_runtime = __toESM(require("@settlemint/sdk-utils/runtime"));
@@ -30,6 +31,89 @@ const gql_tada = __toESM(require("gql.tada"));
30
31
  const graphql_request = __toESM(require("graphql-request"));
31
32
  const zod_v4 = __toESM(require("zod/v4"));
32
33
 
34
+ //#region src/utils/track-all-tables.ts
35
+ /**
36
+ * Track all tables in a database
37
+ *
38
+ * @param databaseName - The name of the database to track tables for
39
+ * @param client - The client options to use for the Hasura client
40
+ * @param tableOptions - The options to use for the table tracking
41
+ * @param tableOptions.includeSchemas - The schemas to include in the tracking
42
+ * @param tableOptions.excludeSchemas - The schemas to exclude from the tracking
43
+ * @returns A promise that resolves to an object with a result property indicating success or failure
44
+ * @example
45
+ * import { trackAllTables } from "@settlemint/sdk-hasura/utils/track-all-tables";
46
+ *
47
+ * const client = createHasuraMetadataClient({
48
+ * instance: "http://localhost:8080",
49
+ * accessToken: "test",
50
+ * adminSecret: "test",
51
+ * });
52
+ *
53
+ * const result = await trackAllTables("default", client, {
54
+ * excludeSchemas: ["drizzle"],
55
+ * });
56
+ * if (result.result === "success") {
57
+ * console.log("Tables tracked successfully");
58
+ * } else {
59
+ * console.error("Failed to track tables");
60
+ * }
61
+ */
62
+ async function trackAllTables(databaseName, client, tableOptions = {
63
+ includeSchemas: undefined,
64
+ excludeSchemas: undefined
65
+ }) {
66
+ const messages = [];
67
+ const { includeSchemas, excludeSchemas } = tableOptions;
68
+ const getTablesResult = await client({
69
+ type: "pg_get_source_tables",
70
+ args: { source: databaseName }
71
+ });
72
+ if (!getTablesResult.ok) {
73
+ throw new Error(`Failed to get tables: ${JSON.stringify(getTablesResult.data)}`);
74
+ }
75
+ const tables = getTablesResult.data;
76
+ if (tables.length === 0) {
77
+ return {
78
+ result: "no-tables",
79
+ messages
80
+ };
81
+ }
82
+ messages.push(`Found ${tables.length} tables in database "${databaseName}"`);
83
+ await client({
84
+ type: "pg_untrack_tables",
85
+ args: {
86
+ tables: tables.map((table) => ({ table })),
87
+ allow_warnings: true
88
+ }
89
+ });
90
+ const tablesToTrack = tables.filter((table) => {
91
+ if (Array.isArray(includeSchemas)) {
92
+ return includeSchemas.includes(table.schema);
93
+ }
94
+ if (Array.isArray(excludeSchemas)) {
95
+ return !excludeSchemas.includes(table.schema);
96
+ }
97
+ return true;
98
+ });
99
+ const trackResult = await client({
100
+ type: "pg_track_tables",
101
+ args: {
102
+ tables: tablesToTrack.map((table) => ({ table })),
103
+ allow_warnings: true
104
+ }
105
+ });
106
+ if (!trackResult.ok) {
107
+ throw new Error(`Failed to track tables: ${JSON.stringify(trackResult.data)}`);
108
+ }
109
+ messages.push(`Successfully tracked ${tablesToTrack.length} tables`);
110
+ return {
111
+ result: "success",
112
+ messages
113
+ };
114
+ }
115
+
116
+ //#endregion
33
117
  //#region src/hasura.ts
34
118
  /**
35
119
  * Schema for validating client options for the Hasura client.
@@ -117,14 +201,66 @@ function createHasuraClient(options, clientOptions, logger) {
117
201
  graphql
118
202
  };
119
203
  }
204
+ /**
205
+ * Creates a Hasura Metadata client
206
+ *
207
+ * @param options - Configuration options for the client
208
+ * @param logger - Optional logger to use for logging the requests
209
+ * @returns A function that can be used to make requests to the Hasura Metadata API
210
+ * @throws Will throw an error if the options fail validation against ClientOptionsSchema
211
+ * @example
212
+ * import { createHasuraMetadataClient } from '@settlemint/sdk-hasura';
213
+ *
214
+ * const client = createHasuraMetadataClient({
215
+ * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,
216
+ * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,
217
+ * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,
218
+ * });
219
+ *
220
+ * const result = await client({
221
+ * type: "pg_get_source_tables",
222
+ * args: {
223
+ * source: "default",
224
+ * },
225
+ * });
226
+ */
227
+ function createHasuraMetadataClient(options, logger) {
228
+ (0, __settlemint_sdk_utils_runtime.ensureServer)();
229
+ const validatedOptions = (0, __settlemint_sdk_utils_validation.validate)(ClientOptionsSchema, options);
230
+ const baseUrl = (0, __settlemint_sdk_utils.extractBaseUrlBeforeSegment)(options.instance, "/v1/graphql");
231
+ const queryEndpoint = new URL(`${baseUrl}/v1/metadata`).toString();
232
+ const fetchInstance = logger ? (0, __settlemint_sdk_utils_logging.requestLogger)(logger, "hasura", fetch) : fetch;
233
+ return async (query) => {
234
+ const response = await fetchInstance(queryEndpoint, {
235
+ method: "POST",
236
+ headers: (0, __settlemint_sdk_utils_http.appendHeaders)({ "Content-Type": "application/json" }, {
237
+ "x-auth-token": validatedOptions.accessToken,
238
+ "x-hasura-admin-secret": validatedOptions.adminSecret
239
+ }),
240
+ body: JSON.stringify(query)
241
+ });
242
+ if (!response.ok) {
243
+ return {
244
+ ok: false,
245
+ data: await response.json()
246
+ };
247
+ }
248
+ return {
249
+ ok: true,
250
+ data: await response.json()
251
+ };
252
+ };
253
+ }
120
254
 
121
255
  //#endregion
122
256
  exports.ClientOptionsSchema = ClientOptionsSchema;
123
257
  exports.createHasuraClient = createHasuraClient;
258
+ exports.createHasuraMetadataClient = createHasuraMetadataClient;
124
259
  Object.defineProperty(exports, 'readFragment', {
125
260
  enumerable: true,
126
261
  get: function () {
127
262
  return gql_tada.readFragment;
128
263
  }
129
264
  });
265
+ exports.trackAllTables = trackAllTables;
130
266
  //# sourceMappingURL=hasura.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"hasura.cjs","names":["UrlOrPathSchema","options: ClientOptions","clientOptions?: RequestConfig","logger?: Logger","GraphQLClient"],"sources":["../src/hasura.ts"],"sourcesContent":["import { appendHeaders } from \"@settlemint/sdk-utils/http\";\nimport { type Logger, requestLogger } from \"@settlemint/sdk-utils/logging\";\nimport { ensureServer } from \"@settlemint/sdk-utils/runtime\";\nimport { ApplicationAccessTokenSchema, UrlOrPathSchema, validate } from \"@settlemint/sdk-utils/validation\";\nimport { type AbstractSetupSchema, initGraphQLTada } from \"gql.tada\";\nimport { GraphQLClient } from \"graphql-request\";\nimport { z } from \"zod/v4\";\n\n/**\n * Type definition for GraphQL client configuration options\n */\nexport type RequestConfig = ConstructorParameters<typeof GraphQLClient>[1];\n\n/**\n * Schema for validating client options for the Hasura client.\n */\nexport const ClientOptionsSchema = z.object({\n instance: UrlOrPathSchema,\n accessToken: ApplicationAccessTokenSchema.optional(),\n adminSecret: z.string(),\n cache: z.enum([\"default\", \"force-cache\", \"no-cache\", \"no-store\", \"only-if-cached\", \"reload\"]).optional(),\n});\n\n/**\n * Type definition for client options derived from the ClientOptionsSchema.\n */\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n\n/**\n * Creates a Hasura GraphQL client with proper type safety using gql.tada\n *\n * @param options - Configuration options for the client\n * @param clientOptions - Optional GraphQL client configuration options\n * @param logger - Optional logger to use for logging the requests\n * @returns An object containing:\n * - client: The configured GraphQL client instance\n * - graphql: The initialized gql.tada function for type-safe queries\n * @throws Will throw an error if the options fail validation against ClientOptionsSchema\n * @example\n * import { createHasuraClient } from '@settlemint/sdk-hasura';\n * import type { introspection } from \"@schemas/hasura-env\";\n * import { createLogger, requestLogger } from \"@settlemint/sdk-utils/logging\";\n *\n * const logger = createLogger();\n *\n * const { client, graphql } = createHasuraClient<{\n * introspection: introspection;\n * disableMasking: true;\n * scalars: {\n * timestamp: string;\n * timestampz: string;\n * uuid: string;\n * date: string;\n * time: string;\n * jsonb: string;\n * numeric: string;\n * interval: string;\n * geometry: string;\n * geography: string;\n * };\n * }>({\n * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,\n * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,\n * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,\n * }, {\n * fetch: requestLogger(logger, \"hasura\", fetch) as typeof fetch,\n * });\n *\n * // Making GraphQL queries\n * const query = graphql(`\n * query GetUsers {\n * users {\n * id\n * name\n * email\n * }\n * }\n * `);\n *\n * const result = await client.request(query);\n */\nexport function createHasuraClient<const Setup extends AbstractSetupSchema>(\n options: ClientOptions,\n clientOptions?: RequestConfig,\n logger?: Logger,\n): {\n client: GraphQLClient;\n graphql: initGraphQLTada<Setup>;\n} {\n ensureServer();\n const validatedOptions = validate(ClientOptionsSchema, options);\n const graphql = initGraphQLTada<Setup>();\n const fullUrl = new URL(validatedOptions.instance).toString();\n\n return {\n client: new GraphQLClient(fullUrl, {\n ...clientOptions,\n headers: appendHeaders(clientOptions?.headers, {\n \"x-auth-token\": validatedOptions.accessToken,\n \"x-hasura-admin-secret\": validatedOptions.adminSecret,\n }),\n fetch: (logger ? requestLogger(logger, \"hasura\", fetch) : fetch) as typeof fetch,\n }),\n graphql,\n };\n}\n\nexport { readFragment } from \"gql.tada\";\nexport type { FragmentOf, ResultOf, VariablesOf } from \"gql.tada\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAa,sBAAsB,SAAE,OAAO;CAC1C,UAAUA;CACV,aAAa,+DAA6B,UAAU;CACpD,aAAa,SAAE,QAAQ;CACvB,OAAO,SAAE,KAAK;EAAC;EAAW;EAAe;EAAY;EAAY;EAAkB;CAAS,EAAC,CAAC,UAAU;AACzG,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DF,SAAgB,mBACdC,SACAC,eACAC,QAIA;AACA,mDAAc;CACd,MAAM,mBAAmB,gDAAS,qBAAqB,QAAQ;CAC/D,MAAM,UAAU,+BAAwB;CACxC,MAAM,UAAU,IAAI,IAAI,iBAAiB,UAAU,UAAU;AAE7D,QAAO;EACL,QAAQ,IAAIC,8BAAc,SAAS;GACjC,GAAG;GACH,SAAS,+CAAc,eAAe,SAAS;IAC7C,gBAAgB,iBAAiB;IACjC,yBAAyB,iBAAiB;GAC3C,EAAC;GACF,OAAQ,SAAS,kDAAc,QAAQ,UAAU,MAAM,GAAG;EAC3D;EACD;CACD;AACF"}
1
+ {"version":3,"file":"hasura.cjs","names":["databaseName: string","client: ReturnType<typeof createHasuraMetadataClient>","tableOptions: {\n includeSchemas?: string[];\n excludeSchemas?: string[];\n }","messages: string[]","UrlOrPathSchema","options: ClientOptions","clientOptions?: RequestConfig","logger?: Logger","GraphQLClient","query: object"],"sources":["../src/utils/track-all-tables.ts","../src/hasura.ts"],"sourcesContent":["import type { createHasuraMetadataClient } from \"../hasura.js\";\n\n/**\n * Track all tables in a database\n *\n * @param databaseName - The name of the database to track tables for\n * @param client - The client options to use for the Hasura client\n * @param tableOptions - The options to use for the table tracking\n * @param tableOptions.includeSchemas - The schemas to include in the tracking\n * @param tableOptions.excludeSchemas - The schemas to exclude from the tracking\n * @returns A promise that resolves to an object with a result property indicating success or failure\n * @example\n * import { trackAllTables } from \"@settlemint/sdk-hasura/utils/track-all-tables\";\n *\n * const client = createHasuraMetadataClient({\n * instance: \"http://localhost:8080\",\n * accessToken: \"test\",\n * adminSecret: \"test\",\n * });\n *\n * const result = await trackAllTables(\"default\", client, {\n * excludeSchemas: [\"drizzle\"],\n * });\n * if (result.result === \"success\") {\n * console.log(\"Tables tracked successfully\");\n * } else {\n * console.error(\"Failed to track tables\");\n * }\n */\nexport async function trackAllTables(\n databaseName: string,\n client: ReturnType<typeof createHasuraMetadataClient>,\n tableOptions: {\n includeSchemas?: string[];\n excludeSchemas?: string[];\n } = {\n includeSchemas: undefined,\n excludeSchemas: undefined,\n },\n): Promise<{ result: \"success\" | \"no-tables\"; messages: string[] }> {\n const messages: string[] = [];\n\n const { includeSchemas, excludeSchemas } = tableOptions;\n\n // Get all tables using pg_get_source_tables\n const getTablesResult = await client<\n Array<{\n name: string;\n schema: string;\n }>\n >({\n type: \"pg_get_source_tables\",\n args: {\n source: databaseName,\n },\n });\n\n if (!getTablesResult.ok) {\n throw new Error(`Failed to get tables: ${JSON.stringify(getTablesResult.data)}`);\n }\n\n const tables = getTablesResult.data;\n\n if (tables.length === 0) {\n return { result: \"no-tables\" as const, messages };\n }\n\n messages.push(`Found ${tables.length} tables in database \"${databaseName}\"`);\n\n // Incase a table is already tracked, untrack it first\n await client<{ code?: string }>({\n type: \"pg_untrack_tables\",\n args: {\n tables: tables.map((table) => ({\n table: table,\n })),\n allow_warnings: true,\n },\n });\n\n const tablesToTrack = tables.filter((table) => {\n if (Array.isArray(includeSchemas)) {\n return includeSchemas.includes(table.schema);\n }\n if (Array.isArray(excludeSchemas)) {\n return !excludeSchemas.includes(table.schema);\n }\n return true;\n });\n\n // Track all tables\n const trackResult = await client<{ code?: string }>({\n type: \"pg_track_tables\",\n args: {\n tables: tablesToTrack.map((table) => ({\n table: table,\n })),\n allow_warnings: true,\n },\n });\n\n if (!trackResult.ok) {\n throw new Error(`Failed to track tables: ${JSON.stringify(trackResult.data)}`);\n }\n\n messages.push(`Successfully tracked ${tablesToTrack.length} tables`);\n\n return { result: \"success\" as const, messages };\n}\n","import { extractBaseUrlBeforeSegment } from \"@settlemint/sdk-utils\";\nimport { appendHeaders } from \"@settlemint/sdk-utils/http\";\nimport { type Logger, requestLogger } from \"@settlemint/sdk-utils/logging\";\nimport { ensureServer } from \"@settlemint/sdk-utils/runtime\";\nimport { ApplicationAccessTokenSchema, UrlOrPathSchema, validate } from \"@settlemint/sdk-utils/validation\";\nimport { type AbstractSetupSchema, initGraphQLTada } from \"gql.tada\";\nimport { GraphQLClient } from \"graphql-request\";\nimport { z } from \"zod/v4\";\n\n/**\n * Type definition for GraphQL client configuration options\n */\nexport type RequestConfig = ConstructorParameters<typeof GraphQLClient>[1];\n\n/**\n * Schema for validating client options for the Hasura client.\n */\nexport const ClientOptionsSchema = z.object({\n instance: UrlOrPathSchema,\n accessToken: ApplicationAccessTokenSchema.optional(),\n adminSecret: z.string(),\n cache: z.enum([\"default\", \"force-cache\", \"no-cache\", \"no-store\", \"only-if-cached\", \"reload\"]).optional(),\n});\n\n/**\n * Type definition for client options derived from the ClientOptionsSchema.\n */\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n\n/**\n * Creates a Hasura GraphQL client with proper type safety using gql.tada\n *\n * @param options - Configuration options for the client\n * @param clientOptions - Optional GraphQL client configuration options\n * @param logger - Optional logger to use for logging the requests\n * @returns An object containing:\n * - client: The configured GraphQL client instance\n * - graphql: The initialized gql.tada function for type-safe queries\n * @throws Will throw an error if the options fail validation against ClientOptionsSchema\n * @example\n * import { createHasuraClient } from '@settlemint/sdk-hasura';\n * import type { introspection } from \"@schemas/hasura-env\";\n * import { createLogger, requestLogger } from \"@settlemint/sdk-utils/logging\";\n *\n * const logger = createLogger();\n *\n * const { client, graphql } = createHasuraClient<{\n * introspection: introspection;\n * disableMasking: true;\n * scalars: {\n * timestamp: string;\n * timestampz: string;\n * uuid: string;\n * date: string;\n * time: string;\n * jsonb: string;\n * numeric: string;\n * interval: string;\n * geometry: string;\n * geography: string;\n * };\n * }>({\n * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,\n * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,\n * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,\n * }, {\n * fetch: requestLogger(logger, \"hasura\", fetch) as typeof fetch,\n * });\n *\n * // Making GraphQL queries\n * const query = graphql(`\n * query GetUsers {\n * users {\n * id\n * name\n * email\n * }\n * }\n * `);\n *\n * const result = await client.request(query);\n */\nexport function createHasuraClient<const Setup extends AbstractSetupSchema>(\n options: ClientOptions,\n clientOptions?: RequestConfig,\n logger?: Logger,\n): {\n client: GraphQLClient;\n graphql: initGraphQLTada<Setup>;\n} {\n ensureServer();\n const validatedOptions = validate(ClientOptionsSchema, options);\n const graphql = initGraphQLTada<Setup>();\n const fullUrl = new URL(validatedOptions.instance).toString();\n\n return {\n client: new GraphQLClient(fullUrl, {\n ...clientOptions,\n headers: appendHeaders(clientOptions?.headers, {\n \"x-auth-token\": validatedOptions.accessToken,\n \"x-hasura-admin-secret\": validatedOptions.adminSecret,\n }),\n fetch: (logger ? requestLogger(logger, \"hasura\", fetch) : fetch) as typeof fetch,\n }),\n graphql,\n };\n}\n\n/**\n * Creates a Hasura Metadata client\n *\n * @param options - Configuration options for the client\n * @param logger - Optional logger to use for logging the requests\n * @returns A function that can be used to make requests to the Hasura Metadata API\n * @throws Will throw an error if the options fail validation against ClientOptionsSchema\n * @example\n * import { createHasuraMetadataClient } from '@settlemint/sdk-hasura';\n *\n * const client = createHasuraMetadataClient({\n * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,\n * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,\n * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,\n * });\n *\n * const result = await client({\n * type: \"pg_get_source_tables\",\n * args: {\n * source: \"default\",\n * },\n * });\n */\nexport function createHasuraMetadataClient(options: ClientOptions, logger?: Logger) {\n ensureServer();\n const validatedOptions = validate(ClientOptionsSchema, options);\n const baseUrl = extractBaseUrlBeforeSegment(options.instance, \"/v1/graphql\");\n const queryEndpoint = new URL(`${baseUrl}/v1/metadata`).toString();\n const fetchInstance = logger ? requestLogger(logger, \"hasura\", fetch) : fetch;\n\n return async <T>(query: object): Promise<{ ok: boolean; data: T }> => {\n const response = await fetchInstance(queryEndpoint, {\n method: \"POST\",\n headers: appendHeaders(\n { \"Content-Type\": \"application/json\" },\n {\n \"x-auth-token\": validatedOptions.accessToken,\n \"x-hasura-admin-secret\": validatedOptions.adminSecret,\n },\n ),\n body: JSON.stringify(query),\n });\n\n if (!response.ok) {\n return { ok: false, data: (await response.json()) as T };\n }\n\n return { ok: true, data: (await response.json()) as T };\n };\n}\n\nexport type { FragmentOf, ResultOf, VariablesOf } from \"gql.tada\";\nexport { readFragment } from \"gql.tada\";\nexport { trackAllTables } from \"./utils/track-all-tables.js\";\n"],"mappings":"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"}
package/dist/hasura.d.cts CHANGED
@@ -4,6 +4,43 @@ import { AbstractSetupSchema, FragmentOf, ResultOf, VariablesOf, initGraphQLTada
4
4
  import { GraphQLClient } from "graphql-request";
5
5
  import { z } from "zod/v4";
6
6
 
7
+ //#region src/utils/track-all-tables.d.ts
8
+
9
+ /**
10
+ * Track all tables in a database
11
+ *
12
+ * @param databaseName - The name of the database to track tables for
13
+ * @param client - The client options to use for the Hasura client
14
+ * @param tableOptions - The options to use for the table tracking
15
+ * @param tableOptions.includeSchemas - The schemas to include in the tracking
16
+ * @param tableOptions.excludeSchemas - The schemas to exclude from the tracking
17
+ * @returns A promise that resolves to an object with a result property indicating success or failure
18
+ * @example
19
+ * import { trackAllTables } from "@settlemint/sdk-hasura/utils/track-all-tables";
20
+ *
21
+ * const client = createHasuraMetadataClient({
22
+ * instance: "http://localhost:8080",
23
+ * accessToken: "test",
24
+ * adminSecret: "test",
25
+ * });
26
+ *
27
+ * const result = await trackAllTables("default", client, {
28
+ * excludeSchemas: ["drizzle"],
29
+ * });
30
+ * if (result.result === "success") {
31
+ * console.log("Tables tracked successfully");
32
+ * } else {
33
+ * console.error("Failed to track tables");
34
+ * }
35
+ */
36
+ declare function trackAllTables(databaseName: string, client: ReturnType<typeof createHasuraMetadataClient>, tableOptions?: {
37
+ includeSchemas?: string[];
38
+ excludeSchemas?: string[];
39
+ }): Promise<{
40
+ result: "success" | "no-tables";
41
+ messages: string[];
42
+ }>;
43
+ //#endregion
7
44
  //#region src/hasura.d.ts
8
45
  /**
9
46
  * Type definition for GraphQL client configuration options
@@ -86,6 +123,33 @@ declare function createHasuraClient<const Setup extends AbstractSetupSchema>(opt
86
123
  client: GraphQLClient;
87
124
  graphql: initGraphQLTada<Setup>;
88
125
  };
126
+ /**
127
+ * Creates a Hasura Metadata client
128
+ *
129
+ * @param options - Configuration options for the client
130
+ * @param logger - Optional logger to use for logging the requests
131
+ * @returns A function that can be used to make requests to the Hasura Metadata API
132
+ * @throws Will throw an error if the options fail validation against ClientOptionsSchema
133
+ * @example
134
+ * import { createHasuraMetadataClient } from '@settlemint/sdk-hasura';
135
+ *
136
+ * const client = createHasuraMetadataClient({
137
+ * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,
138
+ * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,
139
+ * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,
140
+ * });
141
+ *
142
+ * const result = await client({
143
+ * type: "pg_get_source_tables",
144
+ * args: {
145
+ * source: "default",
146
+ * },
147
+ * });
148
+ */
149
+ declare function createHasuraMetadataClient(options: ClientOptions, logger?: Logger): <T>(query: object) => Promise<{
150
+ ok: boolean;
151
+ data: T;
152
+ }>;
89
153
  //#endregion
90
- export { ClientOptions, ClientOptionsSchema, FragmentOf, RequestConfig, ResultOf, VariablesOf, createHasuraClient, readFragment };
154
+ export { ClientOptions, ClientOptionsSchema, FragmentOf, RequestConfig, ResultOf, VariablesOf, createHasuraClient, createHasuraMetadataClient, readFragment, trackAllTables };
91
155
  //# sourceMappingURL=hasura.d.cts.map
package/dist/hasura.d.ts CHANGED
@@ -4,6 +4,43 @@ import { AbstractSetupSchema, FragmentOf, ResultOf, VariablesOf, initGraphQLTada
4
4
  import { GraphQLClient } from "graphql-request";
5
5
  import { z } from "zod/v4";
6
6
 
7
+ //#region src/utils/track-all-tables.d.ts
8
+
9
+ /**
10
+ * Track all tables in a database
11
+ *
12
+ * @param databaseName - The name of the database to track tables for
13
+ * @param client - The client options to use for the Hasura client
14
+ * @param tableOptions - The options to use for the table tracking
15
+ * @param tableOptions.includeSchemas - The schemas to include in the tracking
16
+ * @param tableOptions.excludeSchemas - The schemas to exclude from the tracking
17
+ * @returns A promise that resolves to an object with a result property indicating success or failure
18
+ * @example
19
+ * import { trackAllTables } from "@settlemint/sdk-hasura/utils/track-all-tables";
20
+ *
21
+ * const client = createHasuraMetadataClient({
22
+ * instance: "http://localhost:8080",
23
+ * accessToken: "test",
24
+ * adminSecret: "test",
25
+ * });
26
+ *
27
+ * const result = await trackAllTables("default", client, {
28
+ * excludeSchemas: ["drizzle"],
29
+ * });
30
+ * if (result.result === "success") {
31
+ * console.log("Tables tracked successfully");
32
+ * } else {
33
+ * console.error("Failed to track tables");
34
+ * }
35
+ */
36
+ declare function trackAllTables(databaseName: string, client: ReturnType<typeof createHasuraMetadataClient>, tableOptions?: {
37
+ includeSchemas?: string[];
38
+ excludeSchemas?: string[];
39
+ }): Promise<{
40
+ result: "success" | "no-tables";
41
+ messages: string[];
42
+ }>;
43
+ //#endregion
7
44
  //#region src/hasura.d.ts
8
45
  /**
9
46
  * Type definition for GraphQL client configuration options
@@ -86,6 +123,33 @@ declare function createHasuraClient<const Setup extends AbstractSetupSchema>(opt
86
123
  client: GraphQLClient;
87
124
  graphql: initGraphQLTada<Setup>;
88
125
  };
126
+ /**
127
+ * Creates a Hasura Metadata client
128
+ *
129
+ * @param options - Configuration options for the client
130
+ * @param logger - Optional logger to use for logging the requests
131
+ * @returns A function that can be used to make requests to the Hasura Metadata API
132
+ * @throws Will throw an error if the options fail validation against ClientOptionsSchema
133
+ * @example
134
+ * import { createHasuraMetadataClient } from '@settlemint/sdk-hasura';
135
+ *
136
+ * const client = createHasuraMetadataClient({
137
+ * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,
138
+ * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,
139
+ * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,
140
+ * });
141
+ *
142
+ * const result = await client({
143
+ * type: "pg_get_source_tables",
144
+ * args: {
145
+ * source: "default",
146
+ * },
147
+ * });
148
+ */
149
+ declare function createHasuraMetadataClient(options: ClientOptions, logger?: Logger): <T>(query: object) => Promise<{
150
+ ok: boolean;
151
+ data: T;
152
+ }>;
89
153
  //#endregion
90
- export { ClientOptions, ClientOptionsSchema, FragmentOf, RequestConfig, ResultOf, VariablesOf, createHasuraClient, readFragment };
154
+ export { ClientOptions, ClientOptionsSchema, FragmentOf, RequestConfig, ResultOf, VariablesOf, createHasuraClient, createHasuraMetadataClient, readFragment, trackAllTables };
91
155
  //# sourceMappingURL=hasura.d.ts.map
package/dist/hasura.js CHANGED
@@ -1,4 +1,5 @@
1
1
  /* SettleMint Hasura SDK - GraphQL API */
2
+ import { extractBaseUrlBeforeSegment } from "@settlemint/sdk-utils";
2
3
  import { appendHeaders } from "@settlemint/sdk-utils/http";
3
4
  import { requestLogger } from "@settlemint/sdk-utils/logging";
4
5
  import { ensureServer } from "@settlemint/sdk-utils/runtime";
@@ -7,6 +8,89 @@ import { initGraphQLTada, readFragment } from "gql.tada";
7
8
  import { GraphQLClient } from "graphql-request";
8
9
  import { z } from "zod/v4";
9
10
 
11
+ //#region src/utils/track-all-tables.ts
12
+ /**
13
+ * Track all tables in a database
14
+ *
15
+ * @param databaseName - The name of the database to track tables for
16
+ * @param client - The client options to use for the Hasura client
17
+ * @param tableOptions - The options to use for the table tracking
18
+ * @param tableOptions.includeSchemas - The schemas to include in the tracking
19
+ * @param tableOptions.excludeSchemas - The schemas to exclude from the tracking
20
+ * @returns A promise that resolves to an object with a result property indicating success or failure
21
+ * @example
22
+ * import { trackAllTables } from "@settlemint/sdk-hasura/utils/track-all-tables";
23
+ *
24
+ * const client = createHasuraMetadataClient({
25
+ * instance: "http://localhost:8080",
26
+ * accessToken: "test",
27
+ * adminSecret: "test",
28
+ * });
29
+ *
30
+ * const result = await trackAllTables("default", client, {
31
+ * excludeSchemas: ["drizzle"],
32
+ * });
33
+ * if (result.result === "success") {
34
+ * console.log("Tables tracked successfully");
35
+ * } else {
36
+ * console.error("Failed to track tables");
37
+ * }
38
+ */
39
+ async function trackAllTables(databaseName, client, tableOptions = {
40
+ includeSchemas: undefined,
41
+ excludeSchemas: undefined
42
+ }) {
43
+ const messages = [];
44
+ const { includeSchemas, excludeSchemas } = tableOptions;
45
+ const getTablesResult = await client({
46
+ type: "pg_get_source_tables",
47
+ args: { source: databaseName }
48
+ });
49
+ if (!getTablesResult.ok) {
50
+ throw new Error(`Failed to get tables: ${JSON.stringify(getTablesResult.data)}`);
51
+ }
52
+ const tables = getTablesResult.data;
53
+ if (tables.length === 0) {
54
+ return {
55
+ result: "no-tables",
56
+ messages
57
+ };
58
+ }
59
+ messages.push(`Found ${tables.length} tables in database "${databaseName}"`);
60
+ await client({
61
+ type: "pg_untrack_tables",
62
+ args: {
63
+ tables: tables.map((table) => ({ table })),
64
+ allow_warnings: true
65
+ }
66
+ });
67
+ const tablesToTrack = tables.filter((table) => {
68
+ if (Array.isArray(includeSchemas)) {
69
+ return includeSchemas.includes(table.schema);
70
+ }
71
+ if (Array.isArray(excludeSchemas)) {
72
+ return !excludeSchemas.includes(table.schema);
73
+ }
74
+ return true;
75
+ });
76
+ const trackResult = await client({
77
+ type: "pg_track_tables",
78
+ args: {
79
+ tables: tablesToTrack.map((table) => ({ table })),
80
+ allow_warnings: true
81
+ }
82
+ });
83
+ if (!trackResult.ok) {
84
+ throw new Error(`Failed to track tables: ${JSON.stringify(trackResult.data)}`);
85
+ }
86
+ messages.push(`Successfully tracked ${tablesToTrack.length} tables`);
87
+ return {
88
+ result: "success",
89
+ messages
90
+ };
91
+ }
92
+
93
+ //#endregion
10
94
  //#region src/hasura.ts
11
95
  /**
12
96
  * Schema for validating client options for the Hasura client.
@@ -94,7 +178,57 @@ function createHasuraClient(options, clientOptions, logger) {
94
178
  graphql
95
179
  };
96
180
  }
181
+ /**
182
+ * Creates a Hasura Metadata client
183
+ *
184
+ * @param options - Configuration options for the client
185
+ * @param logger - Optional logger to use for logging the requests
186
+ * @returns A function that can be used to make requests to the Hasura Metadata API
187
+ * @throws Will throw an error if the options fail validation against ClientOptionsSchema
188
+ * @example
189
+ * import { createHasuraMetadataClient } from '@settlemint/sdk-hasura';
190
+ *
191
+ * const client = createHasuraMetadataClient({
192
+ * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,
193
+ * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,
194
+ * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,
195
+ * });
196
+ *
197
+ * const result = await client({
198
+ * type: "pg_get_source_tables",
199
+ * args: {
200
+ * source: "default",
201
+ * },
202
+ * });
203
+ */
204
+ function createHasuraMetadataClient(options, logger) {
205
+ ensureServer();
206
+ const validatedOptions = validate(ClientOptionsSchema, options);
207
+ const baseUrl = extractBaseUrlBeforeSegment(options.instance, "/v1/graphql");
208
+ const queryEndpoint = new URL(`${baseUrl}/v1/metadata`).toString();
209
+ const fetchInstance = logger ? requestLogger(logger, "hasura", fetch) : fetch;
210
+ return async (query) => {
211
+ const response = await fetchInstance(queryEndpoint, {
212
+ method: "POST",
213
+ headers: appendHeaders({ "Content-Type": "application/json" }, {
214
+ "x-auth-token": validatedOptions.accessToken,
215
+ "x-hasura-admin-secret": validatedOptions.adminSecret
216
+ }),
217
+ body: JSON.stringify(query)
218
+ });
219
+ if (!response.ok) {
220
+ return {
221
+ ok: false,
222
+ data: await response.json()
223
+ };
224
+ }
225
+ return {
226
+ ok: true,
227
+ data: await response.json()
228
+ };
229
+ };
230
+ }
97
231
 
98
232
  //#endregion
99
- export { ClientOptionsSchema, createHasuraClient, readFragment };
233
+ export { ClientOptionsSchema, createHasuraClient, createHasuraMetadataClient, readFragment, trackAllTables };
100
234
  //# sourceMappingURL=hasura.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hasura.js","names":["options: ClientOptions","clientOptions?: RequestConfig","logger?: Logger"],"sources":["../src/hasura.ts"],"sourcesContent":["import { appendHeaders } from \"@settlemint/sdk-utils/http\";\nimport { type Logger, requestLogger } from \"@settlemint/sdk-utils/logging\";\nimport { ensureServer } from \"@settlemint/sdk-utils/runtime\";\nimport { ApplicationAccessTokenSchema, UrlOrPathSchema, validate } from \"@settlemint/sdk-utils/validation\";\nimport { type AbstractSetupSchema, initGraphQLTada } from \"gql.tada\";\nimport { GraphQLClient } from \"graphql-request\";\nimport { z } from \"zod/v4\";\n\n/**\n * Type definition for GraphQL client configuration options\n */\nexport type RequestConfig = ConstructorParameters<typeof GraphQLClient>[1];\n\n/**\n * Schema for validating client options for the Hasura client.\n */\nexport const ClientOptionsSchema = z.object({\n instance: UrlOrPathSchema,\n accessToken: ApplicationAccessTokenSchema.optional(),\n adminSecret: z.string(),\n cache: z.enum([\"default\", \"force-cache\", \"no-cache\", \"no-store\", \"only-if-cached\", \"reload\"]).optional(),\n});\n\n/**\n * Type definition for client options derived from the ClientOptionsSchema.\n */\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n\n/**\n * Creates a Hasura GraphQL client with proper type safety using gql.tada\n *\n * @param options - Configuration options for the client\n * @param clientOptions - Optional GraphQL client configuration options\n * @param logger - Optional logger to use for logging the requests\n * @returns An object containing:\n * - client: The configured GraphQL client instance\n * - graphql: The initialized gql.tada function for type-safe queries\n * @throws Will throw an error if the options fail validation against ClientOptionsSchema\n * @example\n * import { createHasuraClient } from '@settlemint/sdk-hasura';\n * import type { introspection } from \"@schemas/hasura-env\";\n * import { createLogger, requestLogger } from \"@settlemint/sdk-utils/logging\";\n *\n * const logger = createLogger();\n *\n * const { client, graphql } = createHasuraClient<{\n * introspection: introspection;\n * disableMasking: true;\n * scalars: {\n * timestamp: string;\n * timestampz: string;\n * uuid: string;\n * date: string;\n * time: string;\n * jsonb: string;\n * numeric: string;\n * interval: string;\n * geometry: string;\n * geography: string;\n * };\n * }>({\n * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,\n * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,\n * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,\n * }, {\n * fetch: requestLogger(logger, \"hasura\", fetch) as typeof fetch,\n * });\n *\n * // Making GraphQL queries\n * const query = graphql(`\n * query GetUsers {\n * users {\n * id\n * name\n * email\n * }\n * }\n * `);\n *\n * const result = await client.request(query);\n */\nexport function createHasuraClient<const Setup extends AbstractSetupSchema>(\n options: ClientOptions,\n clientOptions?: RequestConfig,\n logger?: Logger,\n): {\n client: GraphQLClient;\n graphql: initGraphQLTada<Setup>;\n} {\n ensureServer();\n const validatedOptions = validate(ClientOptionsSchema, options);\n const graphql = initGraphQLTada<Setup>();\n const fullUrl = new URL(validatedOptions.instance).toString();\n\n return {\n client: new GraphQLClient(fullUrl, {\n ...clientOptions,\n headers: appendHeaders(clientOptions?.headers, {\n \"x-auth-token\": validatedOptions.accessToken,\n \"x-hasura-admin-secret\": validatedOptions.adminSecret,\n }),\n fetch: (logger ? requestLogger(logger, \"hasura\", fetch) : fetch) as typeof fetch,\n }),\n graphql,\n };\n}\n\nexport { readFragment } from \"gql.tada\";\nexport type { FragmentOf, ResultOf, VariablesOf } from \"gql.tada\";\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAa,sBAAsB,EAAE,OAAO;CAC1C,UAAU;CACV,aAAa,6BAA6B,UAAU;CACpD,aAAa,EAAE,QAAQ;CACvB,OAAO,EAAE,KAAK;EAAC;EAAW;EAAe;EAAY;EAAY;EAAkB;CAAS,EAAC,CAAC,UAAU;AACzG,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DF,SAAgB,mBACdA,SACAC,eACAC,QAIA;AACA,eAAc;CACd,MAAM,mBAAmB,SAAS,qBAAqB,QAAQ;CAC/D,MAAM,UAAU,iBAAwB;CACxC,MAAM,UAAU,IAAI,IAAI,iBAAiB,UAAU,UAAU;AAE7D,QAAO;EACL,QAAQ,IAAI,cAAc,SAAS;GACjC,GAAG;GACH,SAAS,cAAc,eAAe,SAAS;IAC7C,gBAAgB,iBAAiB;IACjC,yBAAyB,iBAAiB;GAC3C,EAAC;GACF,OAAQ,SAAS,cAAc,QAAQ,UAAU,MAAM,GAAG;EAC3D;EACD;CACD;AACF"}
1
+ {"version":3,"file":"hasura.js","names":["databaseName: string","client: ReturnType<typeof createHasuraMetadataClient>","tableOptions: {\n includeSchemas?: string[];\n excludeSchemas?: string[];\n }","messages: string[]","options: ClientOptions","clientOptions?: RequestConfig","logger?: Logger","query: object"],"sources":["../src/utils/track-all-tables.ts","../src/hasura.ts"],"sourcesContent":["import type { createHasuraMetadataClient } from \"../hasura.js\";\n\n/**\n * Track all tables in a database\n *\n * @param databaseName - The name of the database to track tables for\n * @param client - The client options to use for the Hasura client\n * @param tableOptions - The options to use for the table tracking\n * @param tableOptions.includeSchemas - The schemas to include in the tracking\n * @param tableOptions.excludeSchemas - The schemas to exclude from the tracking\n * @returns A promise that resolves to an object with a result property indicating success or failure\n * @example\n * import { trackAllTables } from \"@settlemint/sdk-hasura/utils/track-all-tables\";\n *\n * const client = createHasuraMetadataClient({\n * instance: \"http://localhost:8080\",\n * accessToken: \"test\",\n * adminSecret: \"test\",\n * });\n *\n * const result = await trackAllTables(\"default\", client, {\n * excludeSchemas: [\"drizzle\"],\n * });\n * if (result.result === \"success\") {\n * console.log(\"Tables tracked successfully\");\n * } else {\n * console.error(\"Failed to track tables\");\n * }\n */\nexport async function trackAllTables(\n databaseName: string,\n client: ReturnType<typeof createHasuraMetadataClient>,\n tableOptions: {\n includeSchemas?: string[];\n excludeSchemas?: string[];\n } = {\n includeSchemas: undefined,\n excludeSchemas: undefined,\n },\n): Promise<{ result: \"success\" | \"no-tables\"; messages: string[] }> {\n const messages: string[] = [];\n\n const { includeSchemas, excludeSchemas } = tableOptions;\n\n // Get all tables using pg_get_source_tables\n const getTablesResult = await client<\n Array<{\n name: string;\n schema: string;\n }>\n >({\n type: \"pg_get_source_tables\",\n args: {\n source: databaseName,\n },\n });\n\n if (!getTablesResult.ok) {\n throw new Error(`Failed to get tables: ${JSON.stringify(getTablesResult.data)}`);\n }\n\n const tables = getTablesResult.data;\n\n if (tables.length === 0) {\n return { result: \"no-tables\" as const, messages };\n }\n\n messages.push(`Found ${tables.length} tables in database \"${databaseName}\"`);\n\n // Incase a table is already tracked, untrack it first\n await client<{ code?: string }>({\n type: \"pg_untrack_tables\",\n args: {\n tables: tables.map((table) => ({\n table: table,\n })),\n allow_warnings: true,\n },\n });\n\n const tablesToTrack = tables.filter((table) => {\n if (Array.isArray(includeSchemas)) {\n return includeSchemas.includes(table.schema);\n }\n if (Array.isArray(excludeSchemas)) {\n return !excludeSchemas.includes(table.schema);\n }\n return true;\n });\n\n // Track all tables\n const trackResult = await client<{ code?: string }>({\n type: \"pg_track_tables\",\n args: {\n tables: tablesToTrack.map((table) => ({\n table: table,\n })),\n allow_warnings: true,\n },\n });\n\n if (!trackResult.ok) {\n throw new Error(`Failed to track tables: ${JSON.stringify(trackResult.data)}`);\n }\n\n messages.push(`Successfully tracked ${tablesToTrack.length} tables`);\n\n return { result: \"success\" as const, messages };\n}\n","import { extractBaseUrlBeforeSegment } from \"@settlemint/sdk-utils\";\nimport { appendHeaders } from \"@settlemint/sdk-utils/http\";\nimport { type Logger, requestLogger } from \"@settlemint/sdk-utils/logging\";\nimport { ensureServer } from \"@settlemint/sdk-utils/runtime\";\nimport { ApplicationAccessTokenSchema, UrlOrPathSchema, validate } from \"@settlemint/sdk-utils/validation\";\nimport { type AbstractSetupSchema, initGraphQLTada } from \"gql.tada\";\nimport { GraphQLClient } from \"graphql-request\";\nimport { z } from \"zod/v4\";\n\n/**\n * Type definition for GraphQL client configuration options\n */\nexport type RequestConfig = ConstructorParameters<typeof GraphQLClient>[1];\n\n/**\n * Schema for validating client options for the Hasura client.\n */\nexport const ClientOptionsSchema = z.object({\n instance: UrlOrPathSchema,\n accessToken: ApplicationAccessTokenSchema.optional(),\n adminSecret: z.string(),\n cache: z.enum([\"default\", \"force-cache\", \"no-cache\", \"no-store\", \"only-if-cached\", \"reload\"]).optional(),\n});\n\n/**\n * Type definition for client options derived from the ClientOptionsSchema.\n */\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n\n/**\n * Creates a Hasura GraphQL client with proper type safety using gql.tada\n *\n * @param options - Configuration options for the client\n * @param clientOptions - Optional GraphQL client configuration options\n * @param logger - Optional logger to use for logging the requests\n * @returns An object containing:\n * - client: The configured GraphQL client instance\n * - graphql: The initialized gql.tada function for type-safe queries\n * @throws Will throw an error if the options fail validation against ClientOptionsSchema\n * @example\n * import { createHasuraClient } from '@settlemint/sdk-hasura';\n * import type { introspection } from \"@schemas/hasura-env\";\n * import { createLogger, requestLogger } from \"@settlemint/sdk-utils/logging\";\n *\n * const logger = createLogger();\n *\n * const { client, graphql } = createHasuraClient<{\n * introspection: introspection;\n * disableMasking: true;\n * scalars: {\n * timestamp: string;\n * timestampz: string;\n * uuid: string;\n * date: string;\n * time: string;\n * jsonb: string;\n * numeric: string;\n * interval: string;\n * geometry: string;\n * geography: string;\n * };\n * }>({\n * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,\n * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,\n * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,\n * }, {\n * fetch: requestLogger(logger, \"hasura\", fetch) as typeof fetch,\n * });\n *\n * // Making GraphQL queries\n * const query = graphql(`\n * query GetUsers {\n * users {\n * id\n * name\n * email\n * }\n * }\n * `);\n *\n * const result = await client.request(query);\n */\nexport function createHasuraClient<const Setup extends AbstractSetupSchema>(\n options: ClientOptions,\n clientOptions?: RequestConfig,\n logger?: Logger,\n): {\n client: GraphQLClient;\n graphql: initGraphQLTada<Setup>;\n} {\n ensureServer();\n const validatedOptions = validate(ClientOptionsSchema, options);\n const graphql = initGraphQLTada<Setup>();\n const fullUrl = new URL(validatedOptions.instance).toString();\n\n return {\n client: new GraphQLClient(fullUrl, {\n ...clientOptions,\n headers: appendHeaders(clientOptions?.headers, {\n \"x-auth-token\": validatedOptions.accessToken,\n \"x-hasura-admin-secret\": validatedOptions.adminSecret,\n }),\n fetch: (logger ? requestLogger(logger, \"hasura\", fetch) : fetch) as typeof fetch,\n }),\n graphql,\n };\n}\n\n/**\n * Creates a Hasura Metadata client\n *\n * @param options - Configuration options for the client\n * @param logger - Optional logger to use for logging the requests\n * @returns A function that can be used to make requests to the Hasura Metadata API\n * @throws Will throw an error if the options fail validation against ClientOptionsSchema\n * @example\n * import { createHasuraMetadataClient } from '@settlemint/sdk-hasura';\n *\n * const client = createHasuraMetadataClient({\n * instance: process.env.SETTLEMINT_HASURA_ENDPOINT,\n * accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,\n * adminSecret: process.env.SETTLEMINT_HASURA_ADMIN_SECRET,\n * });\n *\n * const result = await client({\n * type: \"pg_get_source_tables\",\n * args: {\n * source: \"default\",\n * },\n * });\n */\nexport function createHasuraMetadataClient(options: ClientOptions, logger?: Logger) {\n ensureServer();\n const validatedOptions = validate(ClientOptionsSchema, options);\n const baseUrl = extractBaseUrlBeforeSegment(options.instance, \"/v1/graphql\");\n const queryEndpoint = new URL(`${baseUrl}/v1/metadata`).toString();\n const fetchInstance = logger ? requestLogger(logger, \"hasura\", fetch) : fetch;\n\n return async <T>(query: object): Promise<{ ok: boolean; data: T }> => {\n const response = await fetchInstance(queryEndpoint, {\n method: \"POST\",\n headers: appendHeaders(\n { \"Content-Type\": \"application/json\" },\n {\n \"x-auth-token\": validatedOptions.accessToken,\n \"x-hasura-admin-secret\": validatedOptions.adminSecret,\n },\n ),\n body: JSON.stringify(query),\n });\n\n if (!response.ok) {\n return { ok: false, data: (await response.json()) as T };\n }\n\n return { ok: true, data: (await response.json()) as T };\n };\n}\n\nexport type { FragmentOf, ResultOf, VariablesOf } from \"gql.tada\";\nexport { readFragment } from \"gql.tada\";\nexport { trackAllTables } from \"./utils/track-all-tables.js\";\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@settlemint/sdk-hasura",
3
3
  "description": "Hasura and PostgreSQL integration module for SettleMint SDK, enabling database operations and GraphQL queries",
4
- "version": "2.4.1",
4
+ "version": "2.5.1-maine2c05e47",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "license": "FSL-1.1-MIT",
@@ -66,7 +66,7 @@
66
66
  },
67
67
  "dependencies": {
68
68
  "gql.tada": "^1",
69
- "@settlemint/sdk-utils": "2.4.1",
69
+ "@settlemint/sdk-utils": "2.5.1-maine2c05e47",
70
70
  "graphql-request": "^7",
71
71
  "zod": "^3.25.0",
72
72
  "drizzle-orm": "^0.44.0",