@settlemint/sdk-hasura 2.4.0 → 2.4.1-main722d543c

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
@@ -51,7 +51,7 @@ The SettleMint Hasura SDK provides a seamless way to interact with Hasura GraphQ
51
51
 
52
52
  > **createHasuraClient**\<`Setup`\>(`options`, `clientOptions?`, `logger?`): `object`
53
53
 
54
- Defined in: [sdk/hasura/src/hasura.ts:82](https://github.com/settlemint/sdk/blob/v2.4.0/sdk/hasura/src/hasura.ts#L82)
54
+ Defined in: [sdk/hasura/src/hasura.ts:82](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L82)
55
55
 
56
56
  Creates a Hasura GraphQL client with proper type safety using gql.tada
57
57
 
@@ -83,8 +83,8 @@ An object containing:
83
83
 
84
84
  | Name | Type | Defined in |
85
85
  | ------ | ------ | ------ |
86
- | `client` | `GraphQLClient` | [sdk/hasura/src/hasura.ts:87](https://github.com/settlemint/sdk/blob/v2.4.0/sdk/hasura/src/hasura.ts#L87) |
87
- | `graphql` | `initGraphQLTada`\<`Setup`\> | [sdk/hasura/src/hasura.ts:88](https://github.com/settlemint/sdk/blob/v2.4.0/sdk/hasura/src/hasura.ts#L88) |
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
88
 
89
89
  ##### Throws
90
90
 
@@ -142,7 +142,7 @@ const result = await client.request(query);
142
142
 
143
143
  > **createPostgresPool**(`databaseUrl`): `Pool`
144
144
 
145
- Defined in: [sdk/hasura/src/postgres.ts:107](https://github.com/settlemint/sdk/blob/v2.4.0/sdk/hasura/src/postgres.ts#L107)
145
+ Defined in: [sdk/hasura/src/postgres.ts:107](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/postgres.ts#L107)
146
146
 
147
147
  Creates a PostgreSQL connection pool with error handling and retry mechanisms
148
148
 
@@ -183,19 +183,28 @@ try {
183
183
 
184
184
  #### ClientOptions
185
185
 
186
- > **ClientOptions** = `z.infer`\<*typeof* [`ClientOptionsSchema`](#clientoptionsschema)\>
186
+ > **ClientOptions** = `object`
187
187
 
188
- Defined in: [sdk/hasura/src/hasura.ts:27](https://github.com/settlemint/sdk/blob/v2.4.0/sdk/hasura/src/hasura.ts#L27)
188
+ Defined in: [sdk/hasura/src/hasura.ts:27](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L27)
189
189
 
190
190
  Type definition for client options derived from the ClientOptionsSchema.
191
191
 
192
+ ##### Type declaration
193
+
194
+ | Name | Type | Default value | Defined in |
195
+ | ------ | ------ | ------ | ------ |
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) |
200
+
192
201
  ***
193
202
 
194
203
  #### RequestConfig
195
204
 
196
205
  > **RequestConfig** = `ConstructorParameters`\<*typeof* `GraphQLClient`\>\[`1`\]
197
206
 
198
- Defined in: [sdk/hasura/src/hasura.ts:12](https://github.com/settlemint/sdk/blob/v2.4.0/sdk/hasura/src/hasura.ts#L12)
207
+ Defined in: [sdk/hasura/src/hasura.ts:12](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L12)
199
208
 
200
209
  Type definition for GraphQL client configuration options
201
210
 
@@ -203,9 +212,9 @@ Type definition for GraphQL client configuration options
203
212
 
204
213
  #### ClientOptionsSchema
205
214
 
206
- > `const` **ClientOptionsSchema**: `ZodObject`\<\{ `accessToken`: `ZodOptional`\<`ZodString`\>; `adminSecret`: `ZodString`; `cache`: `ZodOptional`\<`ZodEnum`\<\{ `default`: `"default"`; `force-cache`: `"force-cache"`; `no-cache`: `"no-cache"`; `no-store`: `"no-store"`; `only-if-cached`: `"only-if-cached"`; `reload`: `"reload"`; \}\>\>; `instance`: `ZodUnion`\<readonly \[`ZodString`, `ZodString`\]\>; \}, `$strip`\>
215
+ > `const` **ClientOptionsSchema**: `ZodObject`\<[`ClientOptions`](#clientoptions)\>
207
216
 
208
- Defined in: [sdk/hasura/src/hasura.ts:17](https://github.com/settlemint/sdk/blob/v2.4.0/sdk/hasura/src/hasura.ts#L17)
217
+ Defined in: [sdk/hasura/src/hasura.ts:17](https://github.com/settlemint/sdk/blob/v2.4.1/sdk/hasura/src/hasura.ts#L17)
209
218
 
210
219
  Schema for validating client options for the Hasura client.
211
220
 
package/dist/hasura.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ /* SettleMint Hasura SDK - GraphQL API */
1
2
  //#region rolldown:runtime
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
@@ -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":["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"}
package/dist/hasura.d.cts CHANGED
@@ -1,10 +1,10 @@
1
+ /* SettleMint Hasura SDK - GraphQL API */
1
2
  import { Logger } from "@settlemint/sdk-utils/logging";
2
3
  import { AbstractSetupSchema, FragmentOf, ResultOf, VariablesOf, initGraphQLTada, readFragment } from "gql.tada";
3
4
  import { GraphQLClient } from "graphql-request";
4
5
  import { z } from "zod/v4";
5
6
 
6
7
  //#region src/hasura.d.ts
7
-
8
8
  /**
9
9
  * Type definition for GraphQL client configuration options
10
10
  */
package/dist/hasura.d.ts CHANGED
@@ -1,10 +1,10 @@
1
+ /* SettleMint Hasura SDK - GraphQL API */
1
2
  import { Logger } from "@settlemint/sdk-utils/logging";
2
3
  import { AbstractSetupSchema, FragmentOf, ResultOf, VariablesOf, initGraphQLTada, readFragment } from "gql.tada";
3
4
  import { GraphQLClient } from "graphql-request";
4
5
  import { z } from "zod/v4";
5
6
 
6
7
  //#region src/hasura.d.ts
7
-
8
8
  /**
9
9
  * Type definition for GraphQL client configuration options
10
10
  */
package/dist/hasura.js CHANGED
@@ -1,3 +1,4 @@
1
+ /* SettleMint Hasura SDK - GraphQL API */
1
2
  import { appendHeaders } from "@settlemint/sdk-utils/http";
2
3
  import { requestLogger } from "@settlemint/sdk-utils/logging";
3
4
  import { ensureServer } from "@settlemint/sdk-utils/runtime";
@@ -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":["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"}
package/dist/postgres.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ /* SettleMint Postgres SDK - Database Utils */
1
2
  //#region rolldown:runtime
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.cjs","names":["ms: number","pool: pg.Pool","err: Error","client: pg.PoolClient","databaseUrl: string","runsOnServer"],"sources":["../src/postgres.ts"],"sourcesContent":["import { runsOnServer } from \"@settlemint/sdk-utils/runtime\";\nimport pg from \"pg\";\n\n/**\n * Type definition extending the pg.Pool interface to include custom permanent-failure event\n */\ndeclare module \"pg\" {\n interface Pool {\n on(event: \"permanent-failure\", listener: (err: Error) => void): this;\n emit(event: \"permanent-failure\", err: Error): boolean;\n }\n}\n\n/**\n * Utility function to pause execution for a specified duration\n *\n * @param ms - The number of milliseconds to sleep\n * @returns A promise that resolves after the specified duration\n */\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Configures error handling and recovery mechanisms for a PostgreSQL connection pool\n *\n * @param pool - The PostgreSQL connection pool to configure\n */\nfunction setupErrorHandling(pool: pg.Pool) {\n let retryCount = 0;\n let isRetrying = false;\n const clientErrorHandlers = new WeakSet<pg.PoolClient>();\n\n const handlePoolError = async (err: Error) => {\n console.error(\"[Drizzle] Pool error occurred:\", err);\n\n // Prevent concurrent retry attempts\n if (isRetrying) {\n console.log(\"[Drizzle] Recovery already in progress, skipping\");\n return;\n }\n\n if (retryCount < 3) {\n isRetrying = true;\n retryCount++;\n console.log(`[Drizzle] Attempting to recover - retry ${retryCount}/3`);\n\n try {\n const client = await pool.connect();\n try {\n // Test the connection with timeout\n await Promise.race([\n client.query(\"SELECT 1\"),\n new Promise((_, reject) => setTimeout(() => reject(new Error(\"Query timeout\")), 5000)),\n ]);\n console.log(\"[Drizzle] Successfully recovered connection\");\n retryCount = 0;\n } finally {\n client.release();\n }\n } catch (retryError) {\n console.error(`[Drizzle] Recovery attempt ${retryCount} failed:`, retryError);\n await sleep(5000 * 2 ** (retryCount - 1));\n } finally {\n isRetrying = false;\n }\n } else {\n console.error(\"[Drizzle] Max retries exceeded - pool is in an error state\");\n pool.emit(\"permanent-failure\", err);\n }\n };\n\n const handleConnect = (client: pg.PoolClient) => {\n // Only add error handler if not already added (prevent memory leaks)\n if (!clientErrorHandlers.has(client)) {\n clientErrorHandlers.add(client);\n client.on(\"error\", (err: Error) => {\n console.error(\"[Drizzle] Database client error:\", err);\n });\n }\n retryCount = 0;\n isRetrying = false;\n };\n\n pool.on(\"error\", handlePoolError);\n pool.on(\"connect\", handleConnect);\n}\n\n/**\n * Creates a PostgreSQL connection pool with error handling and retry mechanisms\n *\n * @param databaseUrl - The PostgreSQL connection URL\n * @returns A configured PostgreSQL connection pool\n * @throws Will throw an error if called from browser runtime\n * @example\n * import { createPostgresPool } from '@settlemint/sdk-hasura';\n *\n * const pool = createPostgresPool(process.env.SETTLEMINT_HASURA_DATABASE_URL);\n *\n * // The pool will automatically handle connection errors and retries\n * const client = await pool.connect();\n * try {\n * const result = await client.query('SELECT NOW()');\n * console.log(result.rows[0]);\n * } finally {\n * client.release();\n * }\n */\nexport function createPostgresPool(databaseUrl: string) {\n if (!databaseUrl?.trim()) {\n throw new Error(\"Database URL is required\");\n }\n\n if (!runsOnServer) {\n throw new Error(\"Drizzle client can only be created on the server side\");\n }\n\n const pool = new pg.Pool({\n connectionString: databaseUrl,\n max: 20,\n idleTimeoutMillis: 30000,\n connectionTimeoutMillis: 5000,\n });\n\n setupErrorHandling(pool);\n\n return pool;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,QAAQ,CAACA,OAAe,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG;;;;;;AAO9E,SAAS,mBAAmBC,MAAe;CACzC,IAAI,aAAa;CACjB,IAAI,aAAa;CACjB,MAAM,sBAAsB,IAAI;CAEhC,MAAM,kBAAkB,OAAOC,QAAe;AAC5C,UAAQ,MAAM,kCAAkC,IAAI;AAGpD,MAAI,YAAY;AACd,WAAQ,IAAI,mDAAmD;AAC/D;EACD;AAED,MAAI,aAAa,GAAG;AAClB,gBAAa;AACb;AACA,WAAQ,KAAK,0CAA0C,WAAW,IAAI;AAEtE,OAAI;IACF,MAAM,SAAS,MAAM,KAAK,SAAS;AACnC,QAAI;AAEF,WAAM,QAAQ,KAAK,CACjB,OAAO,MAAM,WAAW,EACxB,IAAI,QAAQ,CAAC,GAAG,WAAW,WAAW,MAAM,OAAO,IAAI,MAAM,iBAAiB,EAAE,IAAK,CACtF,EAAC;AACF,aAAQ,IAAI,8CAA8C;AAC1D,kBAAa;IACd,UAAS;AACR,YAAO,SAAS;IACjB;GACF,SAAQ,YAAY;AACnB,YAAQ,OAAO,6BAA6B,WAAW,WAAW,WAAW;AAC7E,UAAM,MAAM,MAAO,MAAM,aAAa,GAAG;GAC1C,UAAS;AACR,iBAAa;GACd;EACF,OAAM;AACL,WAAQ,MAAM,6DAA6D;AAC3E,QAAK,KAAK,qBAAqB,IAAI;EACpC;CACF;CAED,MAAM,gBAAgB,CAACC,WAA0B;AAE/C,OAAK,oBAAoB,IAAI,OAAO,EAAE;AACpC,uBAAoB,IAAI,OAAO;AAC/B,UAAO,GAAG,SAAS,CAACD,QAAe;AACjC,YAAQ,MAAM,oCAAoC,IAAI;GACvD,EAAC;EACH;AACD,eAAa;AACb,eAAa;CACd;AAED,MAAK,GAAG,SAAS,gBAAgB;AACjC,MAAK,GAAG,WAAW,cAAc;AAClC;;;;;;;;;;;;;;;;;;;;;AAsBD,SAAgB,mBAAmBE,aAAqB;AACtD,MAAK,aAAa,MAAM,EAAE;AACxB,QAAM,IAAI,MAAM;CACjB;AAED,MAAKC,6CAAc;AACjB,QAAM,IAAI,MAAM;CACjB;CAED,MAAM,OAAO,IAAI,WAAG,KAAK;EACvB,kBAAkB;EAClB,KAAK;EACL,mBAAmB;EACnB,yBAAyB;CAC1B;AAED,oBAAmB,KAAK;AAExB,QAAO;AACR"}
1
+ {"version":3,"file":"postgres.cjs","names":["ms: number","pool: pg.Pool","err: Error","client: pg.PoolClient","databaseUrl: string","runsOnServer"],"sources":["../src/postgres.ts"],"sourcesContent":["import { runsOnServer } from \"@settlemint/sdk-utils/runtime\";\nimport pg from \"pg\";\n\n/**\n * Type definition extending the pg.Pool interface to include custom permanent-failure event\n */\ndeclare module \"pg\" {\n interface Pool {\n on(event: \"permanent-failure\", listener: (err: Error) => void): this;\n emit(event: \"permanent-failure\", err: Error): boolean;\n }\n}\n\n/**\n * Utility function to pause execution for a specified duration\n *\n * @param ms - The number of milliseconds to sleep\n * @returns A promise that resolves after the specified duration\n */\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Configures error handling and recovery mechanisms for a PostgreSQL connection pool\n *\n * @param pool - The PostgreSQL connection pool to configure\n */\nfunction setupErrorHandling(pool: pg.Pool) {\n let retryCount = 0;\n let isRetrying = false;\n const clientErrorHandlers = new WeakSet<pg.PoolClient>();\n\n const handlePoolError = async (err: Error) => {\n console.error(\"[Drizzle] Pool error occurred:\", err);\n\n // Prevent concurrent retry attempts\n if (isRetrying) {\n console.log(\"[Drizzle] Recovery already in progress, skipping\");\n return;\n }\n\n if (retryCount < 3) {\n isRetrying = true;\n retryCount++;\n console.log(`[Drizzle] Attempting to recover - retry ${retryCount}/3`);\n\n try {\n const client = await pool.connect();\n try {\n // Test the connection with timeout\n await Promise.race([\n client.query(\"SELECT 1\"),\n new Promise((_, reject) => setTimeout(() => reject(new Error(\"Query timeout\")), 5000)),\n ]);\n console.log(\"[Drizzle] Successfully recovered connection\");\n retryCount = 0;\n } finally {\n client.release();\n }\n } catch (retryError) {\n console.error(`[Drizzle] Recovery attempt ${retryCount} failed:`, retryError);\n await sleep(5000 * 2 ** (retryCount - 1));\n } finally {\n isRetrying = false;\n }\n } else {\n console.error(\"[Drizzle] Max retries exceeded - pool is in an error state\");\n pool.emit(\"permanent-failure\", err);\n }\n };\n\n const handleConnect = (client: pg.PoolClient) => {\n // Only add error handler if not already added (prevent memory leaks)\n if (!clientErrorHandlers.has(client)) {\n clientErrorHandlers.add(client);\n client.on(\"error\", (err: Error) => {\n console.error(\"[Drizzle] Database client error:\", err);\n });\n }\n retryCount = 0;\n isRetrying = false;\n };\n\n pool.on(\"error\", handlePoolError);\n pool.on(\"connect\", handleConnect);\n}\n\n/**\n * Creates a PostgreSQL connection pool with error handling and retry mechanisms\n *\n * @param databaseUrl - The PostgreSQL connection URL\n * @returns A configured PostgreSQL connection pool\n * @throws Will throw an error if called from browser runtime\n * @example\n * import { createPostgresPool } from '@settlemint/sdk-hasura';\n *\n * const pool = createPostgresPool(process.env.SETTLEMINT_HASURA_DATABASE_URL);\n *\n * // The pool will automatically handle connection errors and retries\n * const client = await pool.connect();\n * try {\n * const result = await client.query('SELECT NOW()');\n * console.log(result.rows[0]);\n * } finally {\n * client.release();\n * }\n */\nexport function createPostgresPool(databaseUrl: string) {\n if (!databaseUrl?.trim()) {\n throw new Error(\"Database URL is required\");\n }\n\n if (!runsOnServer) {\n throw new Error(\"Drizzle client can only be created on the server side\");\n }\n\n const pool = new pg.Pool({\n connectionString: databaseUrl,\n max: 20,\n idleTimeoutMillis: 30000,\n connectionTimeoutMillis: 5000,\n });\n\n setupErrorHandling(pool);\n\n return pool;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,QAAQ,CAACA,OAAe,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG;;;;;;AAO9E,SAAS,mBAAmBC,MAAe;CACzC,IAAI,aAAa;CACjB,IAAI,aAAa;CACjB,MAAM,sBAAsB,IAAI;CAEhC,MAAM,kBAAkB,OAAOC,QAAe;AAC5C,UAAQ,MAAM,kCAAkC,IAAI;AAGpD,MAAI,YAAY;AACd,WAAQ,IAAI,mDAAmD;AAC/D;EACD;AAED,MAAI,aAAa,GAAG;AAClB,gBAAa;AACb;AACA,WAAQ,KAAK,0CAA0C,WAAW,IAAI;AAEtE,OAAI;IACF,MAAM,SAAS,MAAM,KAAK,SAAS;AACnC,QAAI;AAEF,WAAM,QAAQ,KAAK,CACjB,OAAO,MAAM,WAAW,EACxB,IAAI,QAAQ,CAAC,GAAG,WAAW,WAAW,MAAM,OAAO,IAAI,MAAM,iBAAiB,EAAE,IAAK,CACtF,EAAC;AACF,aAAQ,IAAI,8CAA8C;AAC1D,kBAAa;IACd,UAAS;AACR,YAAO,SAAS;IACjB;GACF,SAAQ,YAAY;AACnB,YAAQ,OAAO,6BAA6B,WAAW,WAAW,WAAW;AAC7E,UAAM,MAAM,MAAO,MAAM,aAAa,GAAG;GAC1C,UAAS;AACR,iBAAa;GACd;EACF,OAAM;AACL,WAAQ,MAAM,6DAA6D;AAC3E,QAAK,KAAK,qBAAqB,IAAI;EACpC;CACF;CAED,MAAM,gBAAgB,CAACC,WAA0B;AAE/C,OAAK,oBAAoB,IAAI,OAAO,EAAE;AACpC,uBAAoB,IAAI,OAAO;AAC/B,UAAO,GAAG,SAAS,CAACD,QAAe;AACjC,YAAQ,MAAM,oCAAoC,IAAI;GACvD,EAAC;EACH;AACD,eAAa;AACb,eAAa;CACd;AAED,MAAK,GAAG,SAAS,gBAAgB;AACjC,MAAK,GAAG,WAAW,cAAc;AAClC;;;;;;;;;;;;;;;;;;;;;AAsBD,SAAgB,mBAAmBE,aAAqB;AACtD,MAAK,aAAa,MAAM,EAAE;AACxB,QAAM,IAAI,MAAM;CACjB;AAED,MAAKC,6CAAc;AACjB,QAAM,IAAI,MAAM;CACjB;CAED,MAAM,OAAO,IAAI,WAAG,KAAK;EACvB,kBAAkB;EAClB,KAAK;EACL,mBAAmB;EACnB,yBAAyB;CAC1B;AAED,oBAAmB,KAAK;AAExB,QAAO;AACR"}
@@ -1,3 +1,4 @@
1
+ /* SettleMint Postgres SDK - Database Utils */
1
2
  import * as pg1 from "pg";
2
3
 
3
4
  //#region src/postgres.d.ts
@@ -1,3 +1,4 @@
1
+ /* SettleMint Postgres SDK - Database Utils */
1
2
  import * as pg1 from "pg";
2
3
 
3
4
  //#region src/postgres.d.ts
package/dist/postgres.js CHANGED
@@ -1,3 +1,4 @@
1
+ /* SettleMint Postgres SDK - Database Utils */
1
2
  import { runsOnServer } from "@settlemint/sdk-utils/runtime";
2
3
  import pg from "pg";
3
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","names":["ms: number","pool: pg.Pool","err: Error","client: pg.PoolClient","databaseUrl: string"],"sources":["../src/postgres.ts"],"sourcesContent":["import { runsOnServer } from \"@settlemint/sdk-utils/runtime\";\nimport pg from \"pg\";\n\n/**\n * Type definition extending the pg.Pool interface to include custom permanent-failure event\n */\ndeclare module \"pg\" {\n interface Pool {\n on(event: \"permanent-failure\", listener: (err: Error) => void): this;\n emit(event: \"permanent-failure\", err: Error): boolean;\n }\n}\n\n/**\n * Utility function to pause execution for a specified duration\n *\n * @param ms - The number of milliseconds to sleep\n * @returns A promise that resolves after the specified duration\n */\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Configures error handling and recovery mechanisms for a PostgreSQL connection pool\n *\n * @param pool - The PostgreSQL connection pool to configure\n */\nfunction setupErrorHandling(pool: pg.Pool) {\n let retryCount = 0;\n let isRetrying = false;\n const clientErrorHandlers = new WeakSet<pg.PoolClient>();\n\n const handlePoolError = async (err: Error) => {\n console.error(\"[Drizzle] Pool error occurred:\", err);\n\n // Prevent concurrent retry attempts\n if (isRetrying) {\n console.log(\"[Drizzle] Recovery already in progress, skipping\");\n return;\n }\n\n if (retryCount < 3) {\n isRetrying = true;\n retryCount++;\n console.log(`[Drizzle] Attempting to recover - retry ${retryCount}/3`);\n\n try {\n const client = await pool.connect();\n try {\n // Test the connection with timeout\n await Promise.race([\n client.query(\"SELECT 1\"),\n new Promise((_, reject) => setTimeout(() => reject(new Error(\"Query timeout\")), 5000)),\n ]);\n console.log(\"[Drizzle] Successfully recovered connection\");\n retryCount = 0;\n } finally {\n client.release();\n }\n } catch (retryError) {\n console.error(`[Drizzle] Recovery attempt ${retryCount} failed:`, retryError);\n await sleep(5000 * 2 ** (retryCount - 1));\n } finally {\n isRetrying = false;\n }\n } else {\n console.error(\"[Drizzle] Max retries exceeded - pool is in an error state\");\n pool.emit(\"permanent-failure\", err);\n }\n };\n\n const handleConnect = (client: pg.PoolClient) => {\n // Only add error handler if not already added (prevent memory leaks)\n if (!clientErrorHandlers.has(client)) {\n clientErrorHandlers.add(client);\n client.on(\"error\", (err: Error) => {\n console.error(\"[Drizzle] Database client error:\", err);\n });\n }\n retryCount = 0;\n isRetrying = false;\n };\n\n pool.on(\"error\", handlePoolError);\n pool.on(\"connect\", handleConnect);\n}\n\n/**\n * Creates a PostgreSQL connection pool with error handling and retry mechanisms\n *\n * @param databaseUrl - The PostgreSQL connection URL\n * @returns A configured PostgreSQL connection pool\n * @throws Will throw an error if called from browser runtime\n * @example\n * import { createPostgresPool } from '@settlemint/sdk-hasura';\n *\n * const pool = createPostgresPool(process.env.SETTLEMINT_HASURA_DATABASE_URL);\n *\n * // The pool will automatically handle connection errors and retries\n * const client = await pool.connect();\n * try {\n * const result = await client.query('SELECT NOW()');\n * console.log(result.rows[0]);\n * } finally {\n * client.release();\n * }\n */\nexport function createPostgresPool(databaseUrl: string) {\n if (!databaseUrl?.trim()) {\n throw new Error(\"Database URL is required\");\n }\n\n if (!runsOnServer) {\n throw new Error(\"Drizzle client can only be created on the server side\");\n }\n\n const pool = new pg.Pool({\n connectionString: databaseUrl,\n max: 20,\n idleTimeoutMillis: 30000,\n connectionTimeoutMillis: 5000,\n });\n\n setupErrorHandling(pool);\n\n return pool;\n}\n"],"mappings":";;;;;;;;;;AAmBA,MAAM,QAAQ,CAACA,OAAe,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG;;;;;;AAO9E,SAAS,mBAAmBC,MAAe;CACzC,IAAI,aAAa;CACjB,IAAI,aAAa;CACjB,MAAM,sBAAsB,IAAI;CAEhC,MAAM,kBAAkB,OAAOC,QAAe;AAC5C,UAAQ,MAAM,kCAAkC,IAAI;AAGpD,MAAI,YAAY;AACd,WAAQ,IAAI,mDAAmD;AAC/D;EACD;AAED,MAAI,aAAa,GAAG;AAClB,gBAAa;AACb;AACA,WAAQ,KAAK,0CAA0C,WAAW,IAAI;AAEtE,OAAI;IACF,MAAM,SAAS,MAAM,KAAK,SAAS;AACnC,QAAI;AAEF,WAAM,QAAQ,KAAK,CACjB,OAAO,MAAM,WAAW,EACxB,IAAI,QAAQ,CAAC,GAAG,WAAW,WAAW,MAAM,OAAO,IAAI,MAAM,iBAAiB,EAAE,IAAK,CACtF,EAAC;AACF,aAAQ,IAAI,8CAA8C;AAC1D,kBAAa;IACd,UAAS;AACR,YAAO,SAAS;IACjB;GACF,SAAQ,YAAY;AACnB,YAAQ,OAAO,6BAA6B,WAAW,WAAW,WAAW;AAC7E,UAAM,MAAM,MAAO,MAAM,aAAa,GAAG;GAC1C,UAAS;AACR,iBAAa;GACd;EACF,OAAM;AACL,WAAQ,MAAM,6DAA6D;AAC3E,QAAK,KAAK,qBAAqB,IAAI;EACpC;CACF;CAED,MAAM,gBAAgB,CAACC,WAA0B;AAE/C,OAAK,oBAAoB,IAAI,OAAO,EAAE;AACpC,uBAAoB,IAAI,OAAO;AAC/B,UAAO,GAAG,SAAS,CAACD,QAAe;AACjC,YAAQ,MAAM,oCAAoC,IAAI;GACvD,EAAC;EACH;AACD,eAAa;AACb,eAAa;CACd;AAED,MAAK,GAAG,SAAS,gBAAgB;AACjC,MAAK,GAAG,WAAW,cAAc;AAClC;;;;;;;;;;;;;;;;;;;;;AAsBD,SAAgB,mBAAmBE,aAAqB;AACtD,MAAK,aAAa,MAAM,EAAE;AACxB,QAAM,IAAI,MAAM;CACjB;AAED,MAAK,cAAc;AACjB,QAAM,IAAI,MAAM;CACjB;CAED,MAAM,OAAO,IAAI,GAAG,KAAK;EACvB,kBAAkB;EAClB,KAAK;EACL,mBAAmB;EACnB,yBAAyB;CAC1B;AAED,oBAAmB,KAAK;AAExB,QAAO;AACR"}
1
+ {"version":3,"file":"postgres.js","names":["ms: number","pool: pg.Pool","err: Error","client: pg.PoolClient","databaseUrl: string"],"sources":["../src/postgres.ts"],"sourcesContent":["import { runsOnServer } from \"@settlemint/sdk-utils/runtime\";\nimport pg from \"pg\";\n\n/**\n * Type definition extending the pg.Pool interface to include custom permanent-failure event\n */\ndeclare module \"pg\" {\n interface Pool {\n on(event: \"permanent-failure\", listener: (err: Error) => void): this;\n emit(event: \"permanent-failure\", err: Error): boolean;\n }\n}\n\n/**\n * Utility function to pause execution for a specified duration\n *\n * @param ms - The number of milliseconds to sleep\n * @returns A promise that resolves after the specified duration\n */\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Configures error handling and recovery mechanisms for a PostgreSQL connection pool\n *\n * @param pool - The PostgreSQL connection pool to configure\n */\nfunction setupErrorHandling(pool: pg.Pool) {\n let retryCount = 0;\n let isRetrying = false;\n const clientErrorHandlers = new WeakSet<pg.PoolClient>();\n\n const handlePoolError = async (err: Error) => {\n console.error(\"[Drizzle] Pool error occurred:\", err);\n\n // Prevent concurrent retry attempts\n if (isRetrying) {\n console.log(\"[Drizzle] Recovery already in progress, skipping\");\n return;\n }\n\n if (retryCount < 3) {\n isRetrying = true;\n retryCount++;\n console.log(`[Drizzle] Attempting to recover - retry ${retryCount}/3`);\n\n try {\n const client = await pool.connect();\n try {\n // Test the connection with timeout\n await Promise.race([\n client.query(\"SELECT 1\"),\n new Promise((_, reject) => setTimeout(() => reject(new Error(\"Query timeout\")), 5000)),\n ]);\n console.log(\"[Drizzle] Successfully recovered connection\");\n retryCount = 0;\n } finally {\n client.release();\n }\n } catch (retryError) {\n console.error(`[Drizzle] Recovery attempt ${retryCount} failed:`, retryError);\n await sleep(5000 * 2 ** (retryCount - 1));\n } finally {\n isRetrying = false;\n }\n } else {\n console.error(\"[Drizzle] Max retries exceeded - pool is in an error state\");\n pool.emit(\"permanent-failure\", err);\n }\n };\n\n const handleConnect = (client: pg.PoolClient) => {\n // Only add error handler if not already added (prevent memory leaks)\n if (!clientErrorHandlers.has(client)) {\n clientErrorHandlers.add(client);\n client.on(\"error\", (err: Error) => {\n console.error(\"[Drizzle] Database client error:\", err);\n });\n }\n retryCount = 0;\n isRetrying = false;\n };\n\n pool.on(\"error\", handlePoolError);\n pool.on(\"connect\", handleConnect);\n}\n\n/**\n * Creates a PostgreSQL connection pool with error handling and retry mechanisms\n *\n * @param databaseUrl - The PostgreSQL connection URL\n * @returns A configured PostgreSQL connection pool\n * @throws Will throw an error if called from browser runtime\n * @example\n * import { createPostgresPool } from '@settlemint/sdk-hasura';\n *\n * const pool = createPostgresPool(process.env.SETTLEMINT_HASURA_DATABASE_URL);\n *\n * // The pool will automatically handle connection errors and retries\n * const client = await pool.connect();\n * try {\n * const result = await client.query('SELECT NOW()');\n * console.log(result.rows[0]);\n * } finally {\n * client.release();\n * }\n */\nexport function createPostgresPool(databaseUrl: string) {\n if (!databaseUrl?.trim()) {\n throw new Error(\"Database URL is required\");\n }\n\n if (!runsOnServer) {\n throw new Error(\"Drizzle client can only be created on the server side\");\n }\n\n const pool = new pg.Pool({\n connectionString: databaseUrl,\n max: 20,\n idleTimeoutMillis: 30000,\n connectionTimeoutMillis: 5000,\n });\n\n setupErrorHandling(pool);\n\n return pool;\n}\n"],"mappings":";;;;;;;;;;;AAmBA,MAAM,QAAQ,CAACA,OAAe,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG;;;;;;AAO9E,SAAS,mBAAmBC,MAAe;CACzC,IAAI,aAAa;CACjB,IAAI,aAAa;CACjB,MAAM,sBAAsB,IAAI;CAEhC,MAAM,kBAAkB,OAAOC,QAAe;AAC5C,UAAQ,MAAM,kCAAkC,IAAI;AAGpD,MAAI,YAAY;AACd,WAAQ,IAAI,mDAAmD;AAC/D;EACD;AAED,MAAI,aAAa,GAAG;AAClB,gBAAa;AACb;AACA,WAAQ,KAAK,0CAA0C,WAAW,IAAI;AAEtE,OAAI;IACF,MAAM,SAAS,MAAM,KAAK,SAAS;AACnC,QAAI;AAEF,WAAM,QAAQ,KAAK,CACjB,OAAO,MAAM,WAAW,EACxB,IAAI,QAAQ,CAAC,GAAG,WAAW,WAAW,MAAM,OAAO,IAAI,MAAM,iBAAiB,EAAE,IAAK,CACtF,EAAC;AACF,aAAQ,IAAI,8CAA8C;AAC1D,kBAAa;IACd,UAAS;AACR,YAAO,SAAS;IACjB;GACF,SAAQ,YAAY;AACnB,YAAQ,OAAO,6BAA6B,WAAW,WAAW,WAAW;AAC7E,UAAM,MAAM,MAAO,MAAM,aAAa,GAAG;GAC1C,UAAS;AACR,iBAAa;GACd;EACF,OAAM;AACL,WAAQ,MAAM,6DAA6D;AAC3E,QAAK,KAAK,qBAAqB,IAAI;EACpC;CACF;CAED,MAAM,gBAAgB,CAACC,WAA0B;AAE/C,OAAK,oBAAoB,IAAI,OAAO,EAAE;AACpC,uBAAoB,IAAI,OAAO;AAC/B,UAAO,GAAG,SAAS,CAACD,QAAe;AACjC,YAAQ,MAAM,oCAAoC,IAAI;GACvD,EAAC;EACH;AACD,eAAa;AACb,eAAa;CACd;AAED,MAAK,GAAG,SAAS,gBAAgB;AACjC,MAAK,GAAG,WAAW,cAAc;AAClC;;;;;;;;;;;;;;;;;;;;;AAsBD,SAAgB,mBAAmBE,aAAqB;AACtD,MAAK,aAAa,MAAM,EAAE;AACxB,QAAM,IAAI,MAAM;CACjB;AAED,MAAK,cAAc;AACjB,QAAM,IAAI,MAAM;CACjB;CAED,MAAM,OAAO,IAAI,GAAG,KAAK;EACvB,kBAAkB;EAClB,KAAK;EACL,mBAAmB;EACnB,yBAAyB;CAC1B;AAED,oBAAmB,KAAK;AAExB,QAAO;AACR"}
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.0",
4
+ "version": "2.4.1-main722d543c",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "license": "FSL-1.1-MIT",
@@ -20,7 +20,9 @@
20
20
  "url": "https://github.com/settlemint/sdk/issues",
21
21
  "email": "support@settlemint.com"
22
22
  },
23
- "files": ["dist"],
23
+ "files": [
24
+ "dist"
25
+ ],
24
26
  "main": "./dist/hasura.cjs",
25
27
  "module": "./dist/hasura.js",
26
28
  "types": "./dist/hasura.d.ts",
@@ -64,7 +66,7 @@
64
66
  },
65
67
  "dependencies": {
66
68
  "gql.tada": "^1",
67
- "@settlemint/sdk-utils": "2.4.0",
69
+ "@settlemint/sdk-utils": "2.4.1-main722d543c",
68
70
  "graphql-request": "^7",
69
71
  "zod": "^3.25.0",
70
72
  "drizzle-orm": "^0.44.0",