@squidcloud/client 1.0.46 → 1.0.48

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.
@@ -1,6 +1,7 @@
1
1
  import { ClientId, ClientRequestId, IntegrationId } from './communication.types';
2
2
  import { ApiEndpointId, HttpMethod } from './integration.types';
3
3
  export type ApiHeaders = Record<string, string | number | boolean>;
4
+ export type ApiQueryParams = Record<string, string | number | boolean>;
4
5
  export interface CallApiRequest {
5
6
  integrationId: IntegrationId;
6
7
  clientId: ClientId;
@@ -11,7 +12,7 @@ export interface CallApiRequest {
11
12
  }
12
13
  export interface ExtractedApiParams {
13
14
  headers: ApiHeaders;
14
- queryParams: Record<string, string | number | boolean>;
15
+ queryParams: ApiQueryParams;
15
16
  body: Record<string, any>;
16
17
  pathParams: Record<string, string>;
17
18
  }
@@ -22,7 +22,7 @@ export interface LoadJsPayload {
22
22
  codeUrl: string;
23
23
  }
24
24
  export declare const executeFunctionSecureAnnotationType: Array<ExecuteFunctionAnnotationType>;
25
- export type ExecuteFunctionSecureAnnotationType = 'secureQuery' | 'secureMutation' | 'secureNamedQuery' | 'secureGraphQL' | 'secureApi';
25
+ export type ExecuteFunctionSecureAnnotationType = 'secureDistributedLock' | 'secureQuery' | 'secureMutation' | 'secureNamedQuery' | 'secureGraphQL' | 'secureApi';
26
26
  export type ExecuteFunctionAnnotationType = 'executable' | 'webhook' | 'scheduler' | 'trigger' | 'transformRead' | 'transformWrite' | 'metadata' | ExecuteFunctionSecureAnnotationType;
27
27
  export interface ExecuteFunctionPayload {
28
28
  functionName: string;
@@ -9,6 +9,7 @@ import { SecretKey } from './secret.types';
9
9
  import { ApiCallContext } from './api-call.context';
10
10
  import { NamedQueryContext } from './named-query.context';
11
11
  import { GraphqlContext } from './graphql.context';
12
+ import { DistributedLockContext } from './distributed-lock.context';
12
13
  export type DocHash = string;
13
14
  export type SecurityResponse = {
14
15
  docsToHash: Record<SquidDocId, DocHash | undefined>;
@@ -27,6 +28,7 @@ export interface ServiceConfig {
27
28
  export type SecureDatabaseAction<T extends ActionType> = T extends 'all' ? () => boolean | Promise<boolean> : T extends 'read' ? (context?: QueryContext) => boolean | Promise<boolean> : (context?: MutationContext) => boolean | Promise<boolean>;
28
29
  export type SecureApiAction = (context?: ApiCallContext) => boolean | Promise<boolean>;
29
30
  export type SecureNamedQueryAction = (context?: NamedQueryContext) => boolean | Promise<boolean>;
31
+ export type SecureDistributedLockAction = (context?: DistributedLockContext) => boolean | Promise<boolean>;
30
32
  export type SecureGraphQLAction = (context?: GraphqlContext) => boolean | Promise<boolean>;
31
33
  export type TransformDatabaseAction<T extends ActionType> = T extends 'read' ? (request?: TransformDatabaseReadRequest) => TransformDatabaseReadResponse | Promise<TransformDatabaseReadResponse> : (request?: TransformDatabaseWriteRequest) => TransformDatabaseWriteResponse | Promise<TransformDatabaseWriteResponse>;
32
34
  export interface TransformDatabaseReadRequest {
@@ -17,6 +17,12 @@ export interface ApplicationBundleData {
17
17
  schedulers: Record<SchedulerId, SchedulerConfig>;
18
18
  webhooks: Record<WebhookId, WebhookConfig>;
19
19
  namedQueries: Record<IntegrationId, Record<QueryName, NamedQueryMetadata>>;
20
+ distributedLocks: {
21
+ security?: Array<ServiceFunctionName>;
22
+ mutexes?: Record<string, {
23
+ security?: Array<ServiceFunctionName>;
24
+ }>;
25
+ };
20
26
  }
21
27
  export interface DatabaseMetadata {
22
28
  collections: Record<CollectionName, CollectionMetadata>;
@@ -0,0 +1,5 @@
1
+ export declare class DistributedLockContext {
2
+ readonly mutex: string;
3
+ readonly exclusive: boolean;
4
+ constructor(mutex: string, exclusive: boolean);
5
+ }
@@ -1,6 +1,6 @@
1
1
  import { IntegrationId } from './communication.types';
2
2
  export type FieldName<T = any> = string & keyof T;
3
- export type PrimitiveFieldType = string | number | boolean | null;
3
+ export type PrimitiveFieldType = string | number | boolean | null | Date;
4
4
  export type FieldType = PrimitiveFieldType | Array<FieldType> | {
5
5
  [key: string]: FieldType;
6
6
  };
@@ -1,9 +1,5 @@
1
1
  import { IntrospectionQuery } from 'graphql';
2
- import { ApiHeaders } from './api.types';
3
2
  export { ExecutionResult, IntrospectionQuery } from 'graphql';
4
- export interface ExtractedGraphQLParams {
5
- headers: ApiHeaders;
6
- }
7
3
  export interface GraphQLRequest {
8
4
  operationName?: string;
9
5
  query?: string;
@@ -11,6 +7,5 @@ export interface GraphQLRequest {
11
7
  }
12
8
  export interface SecureGraphQLRequest extends GraphQLRequest {
13
9
  isGraphiQL: boolean;
14
- headers: ApiHeaders;
15
10
  }
16
11
  export declare const EmptyIntrospection: IntrospectionQuery;
@@ -9,6 +9,7 @@ export * from './bundle-api.types';
9
9
  export * from './bundle-data.types';
10
10
  export * from './communication.types';
11
11
  export * from './context.types';
12
+ export * from './distributed-lock.context';
12
13
  export * from './document.types';
13
14
  export * from './graphql.context';
14
15
  export * from './graphql.types';
@@ -38,12 +39,13 @@ export * from './types';
38
39
  export * from './utils/array';
39
40
  export * from './utils/assert';
40
41
  export * from './utils/error';
42
+ export * from './utils/http';
41
43
  export * from './utils/id';
42
44
  export * from './utils/lock.manager';
43
45
  export * from './utils/nullish';
44
46
  export * from './utils/object';
45
47
  export * from './utils/serialization';
46
48
  export * from './utils/transforms';
47
- export * from './utils/http';
49
+ export * from './utils/url';
48
50
  export * from './utils/validation';
49
51
  export * from './webhook-response';
@@ -58,7 +58,9 @@ export interface PostgresConnectionOptions {
58
58
  }
59
59
  export interface GraphQLConnectionOptions {
60
60
  baseUrl: string;
61
+ injectionSchema?: ApiInjectionSchema;
61
62
  }
63
+ export type ApiInjectionSchema = Record<FieldName, ApiInjectionField>;
62
64
  export interface OpenApiDiscoveryOptions {
63
65
  openApiSpecUrl: string;
64
66
  }
@@ -74,6 +76,11 @@ export interface SnowflakeConnectionOptions {
74
76
  warehouse: string;
75
77
  role: string;
76
78
  }
79
+ export declare enum IntegrationCategory {
80
+ 'database' = "database",
81
+ 'api' = "api",
82
+ 'observability' = "observability"
83
+ }
77
84
  export declare enum IntegrationType {
78
85
  'built_in_db' = "built_in_db",
79
86
  'mongo' = "mongo",
@@ -96,12 +103,11 @@ export interface IntegrationDataSchema {
96
103
  }
97
104
  export interface IntegrationGraphQLSchema {
98
105
  introspection: IntrospectionQuery;
99
- injectionSchema?: Record<FieldName, ApiInjectionField>;
100
106
  }
101
107
  export interface IntegrationApiSchema {
102
108
  baseUrl: string;
103
109
  endpoints: IntegrationApiEndpoints;
104
- injectionSchema?: Record<FieldName, ApiInjectionField>;
110
+ injectionSchema?: ApiInjectionSchema;
105
111
  }
106
112
  export type IntegrationApiEndpoints = Record<ApiEndpointId, ApiEndpoint>;
107
113
  export type IntegrationSchema = IntegrationDataSchema | IntegrationGraphQLSchema;
@@ -143,7 +149,7 @@ export type HttpMethod = 'post' | 'get' | 'delete' | 'patch' | 'put';
143
149
  export type ApiEndpointId = string;
144
150
  export type ApiParameterLocation = 'query' | 'body' | 'header' | 'path';
145
151
  export type ApiResponseParameterLocation = 'header' | 'body';
146
- export type ApiInjectionParameterLocation = 'header';
152
+ export type ApiInjectionParameterLocation = 'header' | 'query';
147
153
  export type FieldPath = string;
148
154
  export interface ApiRequestField {
149
155
  location: ApiParameterLocation;
@@ -163,7 +169,7 @@ export interface ApiEndpoint {
163
169
  method: HttpMethod;
164
170
  requestSchema?: Record<FieldName, ApiRequestField>;
165
171
  responseSchema?: Record<FieldPath, ApiResponseField>;
166
- injectionSchema?: Record<FieldName, ApiInjectionField>;
172
+ injectionSchema?: ApiInjectionSchema;
167
173
  }
168
174
  export interface ApiIntegrationConfig extends BaseIntegrationConfig {
169
175
  type: IntegrationType.api;
@@ -269,7 +275,14 @@ interface TestCockroachDataConnectionRequest {
269
275
  connectionOptions: PostgresConnectionOptions;
270
276
  };
271
277
  }
278
+ export interface TestGraphQLDataConnectionRequest {
279
+ type: IntegrationType.graphql;
280
+ configuration: {
281
+ connectionOptions: GraphQLConnectionOptions;
282
+ };
283
+ }
272
284
  export type TestDataConnectionRequest = TestMongoDataConnectionRequest | TestMysqlDataConnectionRequest | TestMssqlDataConnectionRequest | TestCockroachDataConnectionRequest | TestPostgresDataConnectionRequest | TestSnowflakeDataConnectionRequest;
285
+ export type TestConnectionRequest = TestDataConnectionRequest | TestGraphQLDataConnectionRequest;
273
286
  export interface DiscoverDataConnectionSchemaResponse {
274
287
  schema: IntegrationDataSchema;
275
288
  }
@@ -2,7 +2,7 @@ import { ClientId, ClientRequestId, IntegrationId } from './communication.types'
2
2
  import { CollectionName, DocTimestamp, SquidDocId, SquidDocument } from './document.types';
3
3
  import { MutationType } from './mutation.types';
4
4
  export type MessageId = string;
5
- export type MessageFromClientType = 'acknowledge' | 'catchup' | 'kill';
5
+ export type MessageFromClientType = 'acknowledge' | 'catchup' | 'kill' | 'acquireLock' | 'releaseLock';
6
6
  interface BaseMessageFromClient {
7
7
  type: MessageFromClientType;
8
8
  payload?: unknown;
@@ -17,8 +17,23 @@ export interface CatchupMessage extends BaseMessageFromClient {
17
17
  export interface KillMessage extends BaseMessageFromClient {
18
18
  type: 'kill';
19
19
  }
20
- export type MessageFromClient = AcknowledgeMessage | CatchupMessage | KillMessage;
21
- export type MessageToClientType = 'mutations' | 'query' | 'backendFunction' | 'api' | 'namedQuery';
20
+ export interface AcquireLockMessage extends BaseMessageFromClient {
21
+ type: 'acquireLock';
22
+ payload: {
23
+ mutex: string;
24
+ exclusive: boolean;
25
+ clientRequestId: ClientRequestId;
26
+ };
27
+ }
28
+ export interface ReleaseLockMessage extends BaseMessageFromClient {
29
+ type: 'releaseLock';
30
+ payload: {
31
+ lockId: string;
32
+ clientRequestId: ClientRequestId;
33
+ };
34
+ }
35
+ export type MessageFromClient = AcknowledgeMessage | CatchupMessage | KillMessage | AcquireLockMessage | ReleaseLockMessage;
36
+ export type MessageToClientType = 'mutations' | 'query' | 'backendFunction' | 'api' | 'namedQuery' | 'lockAcquired' | 'lockReleased';
22
37
  interface BaseMessageToClient {
23
38
  type: MessageToClientType;
24
39
  messageId: MessageId;
@@ -41,7 +56,22 @@ export interface ApiResponseMessageToClient extends BaseMessageToClient {
41
56
  httpStatus: number;
42
57
  payload: string;
43
58
  }
44
- export type MessageToClient = MutationsMessageToClient | QueryResultMessageToClient | BackendFunctionMessageToClient | NamedQueryMessageToClient | ApiResponseMessageToClient;
59
+ export interface LockAcquiredResponseMessageToClient extends BaseMessageToClient {
60
+ type: 'lockAcquired';
61
+ payload: {
62
+ clientRequestId: ClientRequestId;
63
+ lockId: string | undefined;
64
+ error?: string;
65
+ };
66
+ }
67
+ export interface LockReleasedResponseMessageToClient extends BaseMessageToClient {
68
+ type: 'lockReleased';
69
+ payload: {
70
+ clientRequestId: ClientRequestId;
71
+ lockId: string;
72
+ };
73
+ }
74
+ export type MessageToClient = MutationsMessageToClient | QueryResultMessageToClient | BackendFunctionMessageToClient | NamedQueryMessageToClient | ApiResponseMessageToClient | LockAcquiredResponseMessageToClient | LockReleasedResponseMessageToClient;
45
75
  export interface MutationsMessageToClient extends BaseMessageToClient {
46
76
  type: 'mutations';
47
77
  payload: Array<MutationResultData>;
@@ -0,0 +1 @@
1
+ export declare function appendQueryParams(url: string, queryParams: Record<string, any>): string;