@stackone/connect-sdk 1.64.0 → 2.1.0

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/dist/index.d.mts CHANGED
@@ -291,7 +291,7 @@ type ActionResult = {
291
291
  actionId: string;
292
292
  connectorKey: string;
293
293
  connectorVersion: string;
294
- operationType: string;
294
+ actionType: string;
295
295
  mode?: string;
296
296
  category?: string;
297
297
  organizationId: string;
@@ -366,7 +366,7 @@ type Block = {
366
366
  olapClient?: IOlapClient;
367
367
  settings?: Settings;
368
368
  logger?: ILogger;
369
- operation?: Operation;
369
+ action?: Action;
370
370
  credentials?: Credentials;
371
371
  outputs?: unknown;
372
372
  nextCursor?: Cursor | null;
@@ -387,7 +387,7 @@ type BlockContext = {
387
387
  connectorVersion: string;
388
388
  category: Category;
389
389
  schema?: string;
390
- operationType: OperationType;
390
+ actionType: ActionType;
391
391
  authenticationType: string;
392
392
  environment: string;
393
393
  actionRunId?: string;
@@ -510,8 +510,8 @@ type Connector = {
510
510
  description: string;
511
511
  categories?: Category[];
512
512
  authentication?: Authentication;
513
- operations?: {
514
- [operationId: string]: Operation;
513
+ actions?: {
514
+ [actionId: string]: Action;
515
515
  };
516
516
  rateLimit?: RateLimitConfig;
517
517
  concurrency?: ConcurrencyConfig;
@@ -520,7 +520,7 @@ type Connector = {
520
520
  type Assets = {
521
521
  icon: string;
522
522
  };
523
- type OperationType = 'list' | 'get' | 'create' | 'update' | 'delete' | 'custom' | 'refresh_token' | 'test' | 'unknown';
523
+ type ActionType = 'list' | 'get' | 'create' | 'update' | 'delete' | 'custom' | 'refresh_token' | 'test' | 'unknown';
524
524
  type InputLocation = 'body' | 'query' | 'path' | 'headers';
525
525
  type Input = {
526
526
  name: string;
@@ -531,7 +531,7 @@ type Input = {
531
531
  array?: boolean;
532
532
  properties?: Omit<Input, 'in'>[];
533
533
  };
534
- type Operation = {
534
+ type Action = {
535
535
  id: string;
536
536
  categories: Category[];
537
537
  label: string;
@@ -540,7 +540,7 @@ type Operation = {
540
540
  schemaType: 'native' | 'unified';
541
541
  endpoint?: string;
542
542
  context?: string;
543
- operationType: OperationType;
543
+ actionType: ActionType;
544
544
  tags?: string[];
545
545
  releaseStage?: ReleaseStage;
546
546
  entrypointUrl?: string;
@@ -551,8 +551,8 @@ type Operation = {
551
551
  };
552
552
  result?: string | Record<string, unknown>;
553
553
  responses: {
554
- success: OperationResponse;
555
- errors: Record<number, OperationResponse>;
554
+ success: ActionResponse;
555
+ errors: Record<number, ActionResponse>;
556
556
  };
557
557
  cursor: {
558
558
  enabled: boolean;
@@ -581,7 +581,7 @@ type SyncFilterConfig = {
581
581
  initialLoopbackPeriod: string;
582
582
  incrementalLoopbackPeriod: string;
583
583
  };
584
- type OperationResponse = {
584
+ type ActionResponse = {
585
585
  statusCode: number;
586
586
  description?: string;
587
587
  };
@@ -604,8 +604,8 @@ type SupportConfig = {
604
604
  link: string;
605
605
  description?: string;
606
606
  };
607
- type TestOperationConfig = {
608
- operation: Operation;
607
+ type TestActionConfig = {
608
+ action: Action;
609
609
  condition?: string;
610
610
  required: boolean;
611
611
  };
@@ -613,6 +613,7 @@ type AuthenticationConfig = {
613
613
  envKey: string;
614
614
  envName: string;
615
615
  type: 'custom' | 'oauth2';
616
+ grantType?: 'authorization_code' | 'client_credentials';
616
617
  label: string;
617
618
  authorization: {
618
619
  type: 'basic' | 'bearer' | 'oauth2';
@@ -623,9 +624,9 @@ type AuthenticationConfig = {
623
624
  setupFields?: AuthenticationField[];
624
625
  refreshAuthentication?: {
625
626
  schedule?: string;
626
- operation: Operation;
627
+ action: Action;
627
628
  };
628
- testOperations?: TestOperationConfig[];
629
+ testActions?: TestActionConfig[];
629
630
  };
630
631
  type Authentication = {
631
632
  [authType: string]: {
@@ -666,7 +667,7 @@ declare const createBlock: ({
666
667
  connector,
667
668
  inputs,
668
669
  context,
669
- operation,
670
+ action,
670
671
  credentials,
671
672
  nextCursor,
672
673
  settings,
@@ -677,7 +678,7 @@ declare const createBlock: ({
677
678
  connector: Connector;
678
679
  inputs?: Record<string, unknown>;
679
680
  context: BlockContext;
680
- operation?: Operation;
681
+ action?: Action;
681
682
  credentials?: Record<string, unknown>;
682
683
  nextCursor?: Cursor;
683
684
  settings?: Settings;
@@ -686,22 +687,22 @@ declare const createBlock: ({
686
687
  getOlapClient?: () => Promise<IOlapClient>;
687
688
  }) => Promise<Block>;
688
689
  //#endregion
689
- //#region src/connectors/fileReader.d.ts
690
- declare const loadConnector: (filePath: string) => string;
691
- //#endregion
692
- //#region src/connectors/operations.d.ts
693
- declare const getOperationFromUrl: (connector: Connector, url: string, method: HttpMethod) => {
694
- operation: Operation;
690
+ //#region src/connectors/actions.d.ts
691
+ declare const getActionFromUrl: (connector: Connector, url: string, method: HttpMethod) => {
692
+ action: Action;
695
693
  params: Partial<Record<string, string | string[]>>;
696
694
  } | undefined;
697
695
  //#endregion
696
+ //#region src/connectors/fileReader.d.ts
697
+ declare const loadConnector: (filePath: string) => string;
698
+ //#endregion
698
699
  //#region src/connectors/parsers.d.ts
699
700
  declare function parseYamlConnector(yamlFileContents: string): Connector;
700
- declare const parseOperationInputs: (operation: Operation, inputs: unknown) => Record<string, unknown>;
701
+ declare const parseActionInputs: (action: Action, inputs: unknown) => Record<string, unknown>;
701
702
  //#endregion
702
703
  //#region src/connectors/refreshAuthentication.d.ts
703
- declare const getOperationForRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => {
704
- operation: Operation;
704
+ declare const getActionForRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => {
705
+ action: Action;
705
706
  params: Partial<Record<string, string | string[]>>;
706
707
  } | undefined;
707
708
  declare const supportsRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => boolean;
@@ -725,7 +726,7 @@ declare const validateYamlConnector: (yamlFileContents: string) => {
725
726
  };
726
727
  //#endregion
727
728
  //#region src/errors/types.d.ts
728
- type ErrorType = 'CONNECTOR_PARSE_ERROR' | 'MISSING_OPERATION_ERROR' | 'INVALID_OPERATION_INPUTS_ERROR' | 'INVALID_CURSOR_ERROR';
729
+ type ErrorType = 'CONNECTOR_PARSE_ERROR' | 'MISSING_ACTION_ERROR' | 'INVALID_ACTION_INPUTS_ERROR' | 'INVALID_CURSOR_ERROR';
729
730
  //#endregion
730
731
  //#region src/errors/connectSDKErrors.d.ts
731
732
  declare class ConnectSDKError extends Error {
@@ -736,7 +737,7 @@ declare class ConnectSDKError extends Error {
736
737
  }
737
738
  //#endregion
738
739
  //#region src/meta/types.d.ts
739
- interface MetaOperation {
740
+ interface MetaAction {
740
741
  id: string;
741
742
  label: string;
742
743
  description: string;
@@ -763,7 +764,7 @@ type ConnectorMeta = {
763
764
  description: string;
764
765
  schema_type: string;
765
766
  tags?: string[];
766
- operation_details?: MetaOperation;
767
+ action_details?: MetaAction;
767
768
  authentication: MetaAuthenticationConfig[];
768
769
  }[];
769
770
  };
@@ -772,9 +773,6 @@ type ConnectorMeta = {
772
773
  declare const getActionsMeta: (connector: Connector, include?: string[]) => ConnectorMeta;
773
774
  declare const getActionsMetaFromConnectors: (connectors: Connector[], include?: string[]) => ConnectorMeta[];
774
775
  //#endregion
775
- //#region src/runners/constants.d.ts
776
- declare const REFRESH_TOKEN_OPERATION_PATH = "stackone://internal//refresh_token";
777
- //#endregion
778
776
  //#region src/runners/executeStepFunctions.d.ts
779
777
  declare const executeStepFunction: ({
780
778
  block,
@@ -795,7 +793,7 @@ declare const createBlockContext: ({
795
793
  connectorVersion,
796
794
  authConfigKey,
797
795
  environment,
798
- operation,
796
+ action,
799
797
  accountSecureId,
800
798
  projectSecureId,
801
799
  organizationId
@@ -805,14 +803,14 @@ declare const createBlockContext: ({
805
803
  connectorVersion: string;
806
804
  authConfigKey: string;
807
805
  environment?: string;
808
- operation?: Operation;
806
+ action?: Action;
809
807
  accountSecureId: string;
810
808
  projectSecureId: string;
811
809
  organizationId: string;
812
810
  }) => BlockContext;
813
811
  //#endregion
814
- //#region src/connectors/testOperations.d.ts
815
- declare const getTestOperations: (connector: Connector, authConfigKey: string, environment: string) => TestOperationConfig[] | undefined;
812
+ //#region src/connectors/testActions.d.ts
813
+ declare const getTestActions: (connector: Connector, authConfigKey: string, environment: string) => TestActionConfig[] | undefined;
816
814
  //#endregion
817
815
  //#region src/compositeIds/inputs.d.ts
818
816
  declare const decodeInputCompositeIdentifiers: (block: Block) => Block;
@@ -828,8 +826,8 @@ declare const virtualPaginateResult: (result: unknown, pageSize: number, steps:
828
826
  next: string | null;
829
827
  };
830
828
  //#endregion
831
- //#region src/runners/runStepOperation.d.ts
832
- declare const runStepOperation: ({
829
+ //#region src/runners/runStepAction.d.ts
830
+ declare const runStepAction: ({
833
831
  block,
834
832
  buildStepFunction,
835
833
  virtualPaginateResultFn,
@@ -854,50 +852,50 @@ type BaseRunActionParams = {
854
852
  settings?: Settings;
855
853
  logger?: ILogger;
856
854
  parseConnector?: typeof parseYamlConnector;
857
- parseOperationInputsFn?: typeof parseOperationInputs;
855
+ parseActionInputsFn?: typeof parseActionInputs;
858
856
  createBlockContextFn?: typeof createBlockContext;
859
857
  createBlockFn?: typeof createBlock;
860
- runStepOperationFn?: typeof runStepOperation;
861
- getOperationFromUrlFn?: typeof getOperationFromUrl;
862
- getOperationForRefreshAuthenticationFn?: typeof getOperationForRefreshAuthentication;
863
- getTestOperationsFn?: typeof getTestOperations;
858
+ runStepActionFn?: typeof runStepAction;
859
+ getActionFromUrlFn?: typeof getActionFromUrl;
860
+ getActionForRefreshAuthenticationFn?: typeof getActionForRefreshAuthentication;
861
+ getTestActionsFn?: typeof getTestActions;
864
862
  getHttpClient: () => Promise<IHttpClient>;
865
863
  getOlapClient?: () => Promise<IOlapClient>;
866
864
  };
867
- type OperationIdMode = BaseRunActionParams & {
868
- mode: 'operation_id';
869
- operationId: string;
865
+ type ActionIdMode = BaseRunActionParams & {
866
+ mode: 'action_id';
867
+ actionId: string;
870
868
  category?: never;
871
869
  path?: never;
872
870
  method?: never;
873
871
  };
874
872
  type PathMode = BaseRunActionParams & {
875
873
  mode: 'path';
876
- operationId?: never;
874
+ actionId?: never;
877
875
  category: Category;
878
876
  path: string;
879
877
  method: HttpMethod;
880
878
  };
881
- type TestOperationsMode = BaseRunActionParams & {
882
- mode: 'test_operations';
883
- operationId?: never;
879
+ type TestActionsMode = BaseRunActionParams & {
880
+ mode: 'test_actions';
881
+ actionId?: never;
884
882
  category?: never;
885
883
  path?: never;
886
884
  method?: never;
887
885
  };
888
886
  type RefreshAuthenticationMode = BaseRunActionParams & {
889
887
  mode: 'refresh_authentication';
890
- operationId?: never;
888
+ actionId?: never;
891
889
  category?: never;
892
890
  path?: never;
893
891
  method?: never;
894
892
  };
895
- type RunActionParams = OperationIdMode | PathMode | TestOperationsMode | RefreshAuthenticationMode;
893
+ type RunActionParams = ActionIdMode | PathMode | TestActionsMode | RefreshAuthenticationMode;
896
894
  declare const runAction: (params: RunActionParams) => Promise<Block>;
897
895
  //#endregion
898
- //#region src/runners/runConnectorAction.d.ts
899
- declare const runConnectorAction: ({
900
- operationId,
896
+ //#region src/runners/runConnectorActionById.d.ts
897
+ declare const runConnectorActionById: ({
898
+ actionId,
901
899
  account,
902
900
  connector,
903
901
  pathParams,
@@ -908,12 +906,12 @@ declare const runConnectorAction: ({
908
906
  getHttpClient,
909
907
  getOlapClient,
910
908
  parseConnector,
911
- parseOperationInputsFn,
909
+ parseActionInputsFn,
912
910
  createBlockContextFn,
913
911
  createBlockFn,
914
- runStepOperationFn
912
+ runStepActionFn
915
913
  }: {
916
- operationId: string;
914
+ actionId: string;
917
915
  account: Account;
918
916
  connector: Connector;
919
917
  pathParams?: unknown;
@@ -924,14 +922,14 @@ declare const runConnectorAction: ({
924
922
  getHttpClient: () => Promise<IHttpClient>;
925
923
  getOlapClient?: () => Promise<IOlapClient>;
926
924
  parseConnector?: typeof parseYamlConnector;
927
- parseOperationInputsFn?: typeof parseOperationInputs;
925
+ parseActionInputsFn?: typeof parseActionInputs;
928
926
  createBlockContextFn?: typeof createBlockContext;
929
927
  createBlockFn?: typeof createBlock;
930
- runStepOperationFn?: typeof runStepOperation;
928
+ runStepActionFn?: typeof runStepAction;
931
929
  }) => Promise<Block>;
932
930
  //#endregion
933
- //#region src/runners/runConnectorOperation.d.ts
934
- declare const runConnectorOperation: ({
931
+ //#region src/runners/runConnectorActionByPath.d.ts
932
+ declare const runConnectorActionByPath: ({
935
933
  account,
936
934
  connector,
937
935
  category,
@@ -943,12 +941,12 @@ declare const runConnectorOperation: ({
943
941
  logger,
944
942
  getHttpClient,
945
943
  parseConnector,
946
- getOperationFromUrlFn,
947
- getOperationForRefreshAuthenticationFn,
948
- parseOperationInputsFn,
944
+ getActionFromUrlFn,
945
+ getActionForRefreshAuthenticationFn,
946
+ parseActionInputsFn,
949
947
  createBlockContextFn,
950
948
  createBlockFn,
951
- runStepOperationFn
949
+ runStepActionFn
952
950
  }: {
953
951
  account: Account;
954
952
  connector: Connector | string;
@@ -961,35 +959,35 @@ declare const runConnectorOperation: ({
961
959
  logger?: ILogger;
962
960
  getHttpClient: () => Promise<IHttpClient>;
963
961
  parseConnector?: typeof parseYamlConnector;
964
- getOperationFromUrlFn?: typeof getOperationFromUrl;
965
- getOperationForRefreshAuthenticationFn?: typeof getOperationForRefreshAuthentication;
966
- parseOperationInputsFn?: typeof parseOperationInputs;
962
+ getActionFromUrlFn?: typeof getActionFromUrl;
963
+ getActionForRefreshAuthenticationFn?: typeof getActionForRefreshAuthentication;
964
+ parseActionInputsFn?: typeof parseActionInputs;
967
965
  createBlockContextFn?: typeof createBlockContext;
968
966
  createBlockFn?: typeof createBlock;
969
- runStepOperationFn?: typeof runStepOperation;
967
+ runStepActionFn?: typeof runStepAction;
970
968
  }) => Promise<Block>;
971
969
  //#endregion
972
- //#region src/runners/runTestOperations.d.ts
973
- declare const runTestOperations: ({
970
+ //#region src/runners/runTestActions.d.ts
971
+ declare const runTestActions: ({
974
972
  account,
975
973
  connector,
976
974
  logger,
977
975
  getHttpClient,
978
976
  parseConnector,
979
- getTestOperationsFn,
977
+ getTestActionsFn,
980
978
  createBlockContextFn,
981
979
  createBlockFn,
982
- runStepOperationFn
980
+ runStepActionFn
983
981
  }: {
984
982
  account: Account;
985
983
  connector: Connector | string;
986
984
  logger?: ILogger;
987
985
  getHttpClient: () => Promise<IHttpClient>;
988
986
  parseConnector?: typeof parseYamlConnector;
989
- getTestOperationsFn?: typeof getTestOperations;
987
+ getTestActionsFn?: typeof getTestActions;
990
988
  createBlockContextFn?: typeof createBlockContext;
991
989
  createBlockFn?: typeof createBlock;
992
- runStepOperationFn?: typeof runStepOperation;
990
+ runStepActionFn?: typeof runStepAction;
993
991
  }) => Promise<boolean>;
994
992
  //#endregion
995
- export { ConnectSDKError, type ConnectorMeta, type ErrorType, REFRESH_TOKEN_OPERATION_PATH, applyReleaseStageToConnector, createBlock, executeStepFunction, getActionsMeta, getActionsMetaFromConnectors, getOperationFromUrl, getRefreshTokenExpiresIn, getTokenExpiresIn, isConnectorReleased, loadConnector, parseOperationInputs, parseYamlConnector, runAction, runConnectorAction, runConnectorOperation, runStepOperation, runTestOperations, supportsRefreshAuthentication, validateYamlConnector };
993
+ export { ConnectSDKError, type ConnectorMeta, type ErrorType, applyReleaseStageToConnector, createBlock, executeStepFunction, getActionFromUrl, getActionsMeta, getActionsMetaFromConnectors, getRefreshTokenExpiresIn, getTokenExpiresIn, isConnectorReleased, loadConnector, parseActionInputs, parseYamlConnector, runAction, runConnectorActionById, runConnectorActionByPath, runStepAction, runTestActions, supportsRefreshAuthentication, validateYamlConnector };
package/dist/index.d.ts CHANGED
@@ -291,7 +291,7 @@ type ActionResult = {
291
291
  actionId: string;
292
292
  connectorKey: string;
293
293
  connectorVersion: string;
294
- operationType: string;
294
+ actionType: string;
295
295
  mode?: string;
296
296
  category?: string;
297
297
  organizationId: string;
@@ -366,7 +366,7 @@ type Block = {
366
366
  olapClient?: IOlapClient;
367
367
  settings?: Settings;
368
368
  logger?: ILogger;
369
- operation?: Operation;
369
+ action?: Action;
370
370
  credentials?: Credentials;
371
371
  outputs?: unknown;
372
372
  nextCursor?: Cursor | null;
@@ -387,7 +387,7 @@ type BlockContext = {
387
387
  connectorVersion: string;
388
388
  category: Category;
389
389
  schema?: string;
390
- operationType: OperationType;
390
+ actionType: ActionType;
391
391
  authenticationType: string;
392
392
  environment: string;
393
393
  actionRunId?: string;
@@ -510,8 +510,8 @@ type Connector = {
510
510
  description: string;
511
511
  categories?: Category[];
512
512
  authentication?: Authentication;
513
- operations?: {
514
- [operationId: string]: Operation;
513
+ actions?: {
514
+ [actionId: string]: Action;
515
515
  };
516
516
  rateLimit?: RateLimitConfig;
517
517
  concurrency?: ConcurrencyConfig;
@@ -520,7 +520,7 @@ type Connector = {
520
520
  type Assets = {
521
521
  icon: string;
522
522
  };
523
- type OperationType = 'list' | 'get' | 'create' | 'update' | 'delete' | 'custom' | 'refresh_token' | 'test' | 'unknown';
523
+ type ActionType = 'list' | 'get' | 'create' | 'update' | 'delete' | 'custom' | 'refresh_token' | 'test' | 'unknown';
524
524
  type InputLocation = 'body' | 'query' | 'path' | 'headers';
525
525
  type Input = {
526
526
  name: string;
@@ -531,7 +531,7 @@ type Input = {
531
531
  array?: boolean;
532
532
  properties?: Omit<Input, 'in'>[];
533
533
  };
534
- type Operation = {
534
+ type Action = {
535
535
  id: string;
536
536
  categories: Category[];
537
537
  label: string;
@@ -540,7 +540,7 @@ type Operation = {
540
540
  schemaType: 'native' | 'unified';
541
541
  endpoint?: string;
542
542
  context?: string;
543
- operationType: OperationType;
543
+ actionType: ActionType;
544
544
  tags?: string[];
545
545
  releaseStage?: ReleaseStage;
546
546
  entrypointUrl?: string;
@@ -551,8 +551,8 @@ type Operation = {
551
551
  };
552
552
  result?: string | Record<string, unknown>;
553
553
  responses: {
554
- success: OperationResponse;
555
- errors: Record<number, OperationResponse>;
554
+ success: ActionResponse;
555
+ errors: Record<number, ActionResponse>;
556
556
  };
557
557
  cursor: {
558
558
  enabled: boolean;
@@ -581,7 +581,7 @@ type SyncFilterConfig = {
581
581
  initialLoopbackPeriod: string;
582
582
  incrementalLoopbackPeriod: string;
583
583
  };
584
- type OperationResponse = {
584
+ type ActionResponse = {
585
585
  statusCode: number;
586
586
  description?: string;
587
587
  };
@@ -604,8 +604,8 @@ type SupportConfig = {
604
604
  link: string;
605
605
  description?: string;
606
606
  };
607
- type TestOperationConfig = {
608
- operation: Operation;
607
+ type TestActionConfig = {
608
+ action: Action;
609
609
  condition?: string;
610
610
  required: boolean;
611
611
  };
@@ -613,6 +613,7 @@ type AuthenticationConfig = {
613
613
  envKey: string;
614
614
  envName: string;
615
615
  type: 'custom' | 'oauth2';
616
+ grantType?: 'authorization_code' | 'client_credentials';
616
617
  label: string;
617
618
  authorization: {
618
619
  type: 'basic' | 'bearer' | 'oauth2';
@@ -623,9 +624,9 @@ type AuthenticationConfig = {
623
624
  setupFields?: AuthenticationField[];
624
625
  refreshAuthentication?: {
625
626
  schedule?: string;
626
- operation: Operation;
627
+ action: Action;
627
628
  };
628
- testOperations?: TestOperationConfig[];
629
+ testActions?: TestActionConfig[];
629
630
  };
630
631
  type Authentication = {
631
632
  [authType: string]: {
@@ -666,7 +667,7 @@ declare const createBlock: ({
666
667
  connector,
667
668
  inputs,
668
669
  context,
669
- operation,
670
+ action,
670
671
  credentials,
671
672
  nextCursor,
672
673
  settings,
@@ -677,7 +678,7 @@ declare const createBlock: ({
677
678
  connector: Connector;
678
679
  inputs?: Record<string, unknown>;
679
680
  context: BlockContext;
680
- operation?: Operation;
681
+ action?: Action;
681
682
  credentials?: Record<string, unknown>;
682
683
  nextCursor?: Cursor;
683
684
  settings?: Settings;
@@ -686,22 +687,22 @@ declare const createBlock: ({
686
687
  getOlapClient?: () => Promise<IOlapClient>;
687
688
  }) => Promise<Block>;
688
689
  //#endregion
689
- //#region src/connectors/fileReader.d.ts
690
- declare const loadConnector: (filePath: string) => string;
691
- //#endregion
692
- //#region src/connectors/operations.d.ts
693
- declare const getOperationFromUrl: (connector: Connector, url: string, method: HttpMethod) => {
694
- operation: Operation;
690
+ //#region src/connectors/actions.d.ts
691
+ declare const getActionFromUrl: (connector: Connector, url: string, method: HttpMethod) => {
692
+ action: Action;
695
693
  params: Partial<Record<string, string | string[]>>;
696
694
  } | undefined;
697
695
  //#endregion
696
+ //#region src/connectors/fileReader.d.ts
697
+ declare const loadConnector: (filePath: string) => string;
698
+ //#endregion
698
699
  //#region src/connectors/parsers.d.ts
699
700
  declare function parseYamlConnector(yamlFileContents: string): Connector;
700
- declare const parseOperationInputs: (operation: Operation, inputs: unknown) => Record<string, unknown>;
701
+ declare const parseActionInputs: (action: Action, inputs: unknown) => Record<string, unknown>;
701
702
  //#endregion
702
703
  //#region src/connectors/refreshAuthentication.d.ts
703
- declare const getOperationForRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => {
704
- operation: Operation;
704
+ declare const getActionForRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => {
705
+ action: Action;
705
706
  params: Partial<Record<string, string | string[]>>;
706
707
  } | undefined;
707
708
  declare const supportsRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => boolean;
@@ -725,7 +726,7 @@ declare const validateYamlConnector: (yamlFileContents: string) => {
725
726
  };
726
727
  //#endregion
727
728
  //#region src/errors/types.d.ts
728
- type ErrorType = 'CONNECTOR_PARSE_ERROR' | 'MISSING_OPERATION_ERROR' | 'INVALID_OPERATION_INPUTS_ERROR' | 'INVALID_CURSOR_ERROR';
729
+ type ErrorType = 'CONNECTOR_PARSE_ERROR' | 'MISSING_ACTION_ERROR' | 'INVALID_ACTION_INPUTS_ERROR' | 'INVALID_CURSOR_ERROR';
729
730
  //#endregion
730
731
  //#region src/errors/connectSDKErrors.d.ts
731
732
  declare class ConnectSDKError extends Error {
@@ -736,7 +737,7 @@ declare class ConnectSDKError extends Error {
736
737
  }
737
738
  //#endregion
738
739
  //#region src/meta/types.d.ts
739
- interface MetaOperation {
740
+ interface MetaAction {
740
741
  id: string;
741
742
  label: string;
742
743
  description: string;
@@ -763,7 +764,7 @@ type ConnectorMeta = {
763
764
  description: string;
764
765
  schema_type: string;
765
766
  tags?: string[];
766
- operation_details?: MetaOperation;
767
+ action_details?: MetaAction;
767
768
  authentication: MetaAuthenticationConfig[];
768
769
  }[];
769
770
  };
@@ -772,9 +773,6 @@ type ConnectorMeta = {
772
773
  declare const getActionsMeta: (connector: Connector, include?: string[]) => ConnectorMeta;
773
774
  declare const getActionsMetaFromConnectors: (connectors: Connector[], include?: string[]) => ConnectorMeta[];
774
775
  //#endregion
775
- //#region src/runners/constants.d.ts
776
- declare const REFRESH_TOKEN_OPERATION_PATH = "stackone://internal//refresh_token";
777
- //#endregion
778
776
  //#region src/runners/executeStepFunctions.d.ts
779
777
  declare const executeStepFunction: ({
780
778
  block,
@@ -795,7 +793,7 @@ declare const createBlockContext: ({
795
793
  connectorVersion,
796
794
  authConfigKey,
797
795
  environment,
798
- operation,
796
+ action,
799
797
  accountSecureId,
800
798
  projectSecureId,
801
799
  organizationId
@@ -805,14 +803,14 @@ declare const createBlockContext: ({
805
803
  connectorVersion: string;
806
804
  authConfigKey: string;
807
805
  environment?: string;
808
- operation?: Operation;
806
+ action?: Action;
809
807
  accountSecureId: string;
810
808
  projectSecureId: string;
811
809
  organizationId: string;
812
810
  }) => BlockContext;
813
811
  //#endregion
814
- //#region src/connectors/testOperations.d.ts
815
- declare const getTestOperations: (connector: Connector, authConfigKey: string, environment: string) => TestOperationConfig[] | undefined;
812
+ //#region src/connectors/testActions.d.ts
813
+ declare const getTestActions: (connector: Connector, authConfigKey: string, environment: string) => TestActionConfig[] | undefined;
816
814
  //#endregion
817
815
  //#region src/compositeIds/inputs.d.ts
818
816
  declare const decodeInputCompositeIdentifiers: (block: Block) => Block;
@@ -828,8 +826,8 @@ declare const virtualPaginateResult: (result: unknown, pageSize: number, steps:
828
826
  next: string | null;
829
827
  };
830
828
  //#endregion
831
- //#region src/runners/runStepOperation.d.ts
832
- declare const runStepOperation: ({
829
+ //#region src/runners/runStepAction.d.ts
830
+ declare const runStepAction: ({
833
831
  block,
834
832
  buildStepFunction,
835
833
  virtualPaginateResultFn,
@@ -854,50 +852,50 @@ type BaseRunActionParams = {
854
852
  settings?: Settings;
855
853
  logger?: ILogger;
856
854
  parseConnector?: typeof parseYamlConnector;
857
- parseOperationInputsFn?: typeof parseOperationInputs;
855
+ parseActionInputsFn?: typeof parseActionInputs;
858
856
  createBlockContextFn?: typeof createBlockContext;
859
857
  createBlockFn?: typeof createBlock;
860
- runStepOperationFn?: typeof runStepOperation;
861
- getOperationFromUrlFn?: typeof getOperationFromUrl;
862
- getOperationForRefreshAuthenticationFn?: typeof getOperationForRefreshAuthentication;
863
- getTestOperationsFn?: typeof getTestOperations;
858
+ runStepActionFn?: typeof runStepAction;
859
+ getActionFromUrlFn?: typeof getActionFromUrl;
860
+ getActionForRefreshAuthenticationFn?: typeof getActionForRefreshAuthentication;
861
+ getTestActionsFn?: typeof getTestActions;
864
862
  getHttpClient: () => Promise<IHttpClient>;
865
863
  getOlapClient?: () => Promise<IOlapClient>;
866
864
  };
867
- type OperationIdMode = BaseRunActionParams & {
868
- mode: 'operation_id';
869
- operationId: string;
865
+ type ActionIdMode = BaseRunActionParams & {
866
+ mode: 'action_id';
867
+ actionId: string;
870
868
  category?: never;
871
869
  path?: never;
872
870
  method?: never;
873
871
  };
874
872
  type PathMode = BaseRunActionParams & {
875
873
  mode: 'path';
876
- operationId?: never;
874
+ actionId?: never;
877
875
  category: Category;
878
876
  path: string;
879
877
  method: HttpMethod;
880
878
  };
881
- type TestOperationsMode = BaseRunActionParams & {
882
- mode: 'test_operations';
883
- operationId?: never;
879
+ type TestActionsMode = BaseRunActionParams & {
880
+ mode: 'test_actions';
881
+ actionId?: never;
884
882
  category?: never;
885
883
  path?: never;
886
884
  method?: never;
887
885
  };
888
886
  type RefreshAuthenticationMode = BaseRunActionParams & {
889
887
  mode: 'refresh_authentication';
890
- operationId?: never;
888
+ actionId?: never;
891
889
  category?: never;
892
890
  path?: never;
893
891
  method?: never;
894
892
  };
895
- type RunActionParams = OperationIdMode | PathMode | TestOperationsMode | RefreshAuthenticationMode;
893
+ type RunActionParams = ActionIdMode | PathMode | TestActionsMode | RefreshAuthenticationMode;
896
894
  declare const runAction: (params: RunActionParams) => Promise<Block>;
897
895
  //#endregion
898
- //#region src/runners/runConnectorAction.d.ts
899
- declare const runConnectorAction: ({
900
- operationId,
896
+ //#region src/runners/runConnectorActionById.d.ts
897
+ declare const runConnectorActionById: ({
898
+ actionId,
901
899
  account,
902
900
  connector,
903
901
  pathParams,
@@ -908,12 +906,12 @@ declare const runConnectorAction: ({
908
906
  getHttpClient,
909
907
  getOlapClient,
910
908
  parseConnector,
911
- parseOperationInputsFn,
909
+ parseActionInputsFn,
912
910
  createBlockContextFn,
913
911
  createBlockFn,
914
- runStepOperationFn
912
+ runStepActionFn
915
913
  }: {
916
- operationId: string;
914
+ actionId: string;
917
915
  account: Account;
918
916
  connector: Connector;
919
917
  pathParams?: unknown;
@@ -924,14 +922,14 @@ declare const runConnectorAction: ({
924
922
  getHttpClient: () => Promise<IHttpClient>;
925
923
  getOlapClient?: () => Promise<IOlapClient>;
926
924
  parseConnector?: typeof parseYamlConnector;
927
- parseOperationInputsFn?: typeof parseOperationInputs;
925
+ parseActionInputsFn?: typeof parseActionInputs;
928
926
  createBlockContextFn?: typeof createBlockContext;
929
927
  createBlockFn?: typeof createBlock;
930
- runStepOperationFn?: typeof runStepOperation;
928
+ runStepActionFn?: typeof runStepAction;
931
929
  }) => Promise<Block>;
932
930
  //#endregion
933
- //#region src/runners/runConnectorOperation.d.ts
934
- declare const runConnectorOperation: ({
931
+ //#region src/runners/runConnectorActionByPath.d.ts
932
+ declare const runConnectorActionByPath: ({
935
933
  account,
936
934
  connector,
937
935
  category,
@@ -943,12 +941,12 @@ declare const runConnectorOperation: ({
943
941
  logger,
944
942
  getHttpClient,
945
943
  parseConnector,
946
- getOperationFromUrlFn,
947
- getOperationForRefreshAuthenticationFn,
948
- parseOperationInputsFn,
944
+ getActionFromUrlFn,
945
+ getActionForRefreshAuthenticationFn,
946
+ parseActionInputsFn,
949
947
  createBlockContextFn,
950
948
  createBlockFn,
951
- runStepOperationFn
949
+ runStepActionFn
952
950
  }: {
953
951
  account: Account;
954
952
  connector: Connector | string;
@@ -961,35 +959,35 @@ declare const runConnectorOperation: ({
961
959
  logger?: ILogger;
962
960
  getHttpClient: () => Promise<IHttpClient>;
963
961
  parseConnector?: typeof parseYamlConnector;
964
- getOperationFromUrlFn?: typeof getOperationFromUrl;
965
- getOperationForRefreshAuthenticationFn?: typeof getOperationForRefreshAuthentication;
966
- parseOperationInputsFn?: typeof parseOperationInputs;
962
+ getActionFromUrlFn?: typeof getActionFromUrl;
963
+ getActionForRefreshAuthenticationFn?: typeof getActionForRefreshAuthentication;
964
+ parseActionInputsFn?: typeof parseActionInputs;
967
965
  createBlockContextFn?: typeof createBlockContext;
968
966
  createBlockFn?: typeof createBlock;
969
- runStepOperationFn?: typeof runStepOperation;
967
+ runStepActionFn?: typeof runStepAction;
970
968
  }) => Promise<Block>;
971
969
  //#endregion
972
- //#region src/runners/runTestOperations.d.ts
973
- declare const runTestOperations: ({
970
+ //#region src/runners/runTestActions.d.ts
971
+ declare const runTestActions: ({
974
972
  account,
975
973
  connector,
976
974
  logger,
977
975
  getHttpClient,
978
976
  parseConnector,
979
- getTestOperationsFn,
977
+ getTestActionsFn,
980
978
  createBlockContextFn,
981
979
  createBlockFn,
982
- runStepOperationFn
980
+ runStepActionFn
983
981
  }: {
984
982
  account: Account;
985
983
  connector: Connector | string;
986
984
  logger?: ILogger;
987
985
  getHttpClient: () => Promise<IHttpClient>;
988
986
  parseConnector?: typeof parseYamlConnector;
989
- getTestOperationsFn?: typeof getTestOperations;
987
+ getTestActionsFn?: typeof getTestActions;
990
988
  createBlockContextFn?: typeof createBlockContext;
991
989
  createBlockFn?: typeof createBlock;
992
- runStepOperationFn?: typeof runStepOperation;
990
+ runStepActionFn?: typeof runStepAction;
993
991
  }) => Promise<boolean>;
994
992
  //#endregion
995
- export { ConnectSDKError, type ConnectorMeta, type ErrorType, REFRESH_TOKEN_OPERATION_PATH, applyReleaseStageToConnector, createBlock, executeStepFunction, getActionsMeta, getActionsMetaFromConnectors, getOperationFromUrl, getRefreshTokenExpiresIn, getTokenExpiresIn, isConnectorReleased, loadConnector, parseOperationInputs, parseYamlConnector, runAction, runConnectorAction, runConnectorOperation, runStepOperation, runTestOperations, supportsRefreshAuthentication, validateYamlConnector };
993
+ export { ConnectSDKError, type ConnectorMeta, type ErrorType, applyReleaseStageToConnector, createBlock, executeStepFunction, getActionFromUrl, getActionsMeta, getActionsMetaFromConnectors, getRefreshTokenExpiresIn, getTokenExpiresIn, isConnectorReleased, loadConnector, parseActionInputs, parseYamlConnector, runAction, runConnectorActionById, runConnectorActionByPath, runStepAction, runTestActions, supportsRefreshAuthentication, validateYamlConnector };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=s(require(`@stackone/utils`)),l=s(require(`fs`)),u=s(require(`path`)),d=s(require(`path-to-regexp`)),f=s(require(`@stackone/core`)),p=s(require(`@stackone/transport`)),m=s(require(`yaml`)),h=s(require(`@stackone/expressions`)),g=async({connector:e,inputs:t,context:n,operation:r,credentials:i,nextCursor:a,settings:o,logger:s,getHttpClient:l,getOlapClient:u})=>{if((0,c.isMissing)(l))throw Error(`getHttpClient function is required`);let d=await l(),f=u?await u():void 0;return{connector:e,inputs:t,fieldConfigs:[],context:n,operation:r,credentials:i,nextCursor:a,httpClient:d,olapClient:f,settings:o,logger:s}},_=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=(0,l.readFileSync)(e,`utf8`);if(!t.includes(`:`)||!t.includes(`$ref:`))return t;let n=t.split(`
2
- `),r=v(n,(0,u.dirname)(e));return r.join(`
3
- `)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},v=(e,t)=>{let n=[];for(let r of e)if(y(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=b(i,t),o=a.map(t=>` `.repeat(e)+t);n.push(...o)}else n.push(r);return n},y=e=>e.includes(`$ref:`),b=(e,t)=>{let n=(0,u.resolve)((0,u.join)(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{let e=(0,l.readFileSync)(n,`utf8`);return e.split(`
4
- `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}},x=(e,t,n)=>{let r=n.toUpperCase();if(!e.operations)return;let i=Object.values(e.operations).filter(e=>(0,c.notMissing)(e.endpoint)).map(e=>({operationId:e.id,endpoint:e.endpoint})),a=C(t,r,i);if(a)return{operation:e.operations?.[a.operationId],params:a.params}},S=e=>{let t=e.startsWith(`/`)?e.slice(1):e,n=t.endsWith(`/`)?t.slice(0,-1):t;return n},C=(e,t,n)=>{let r=S(e);for(let e of n)if(e.endpoint?.startsWith(t)){let n=e.endpoint.replace(`${t} `,``).trim(),i=(0,d.match)(S(n)),a=i(S(r));if(a!==!1)return{operationId:e.operationId,path:e.endpoint,params:a.params}}},w=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,ee=(e,t)=>{let n=`${e.key}_`,r=t.startsWith(n)?t:`${n}${t}`;return e.operations?.[r]};var T=class e extends Error{errorType;constructor(t,n){super(n),this.name=`InternalConnectSDKError`,this.errorType=t,Error.captureStackTrace&&Error.captureStackTrace(this,e)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},E=class extends T{line;constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},D=class extends T{issues;constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},O=class extends T{operationId;stepId;functionName;functionVersion;constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the operation '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.operationId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},k=class extends T{operationId;stepId;functionName;functionVersion;issues;constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the operation '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.operationId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}};const A=25,te=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The operation was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token operation was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown operation type: ${e}`)}},j=()=>{let e={400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}};return e},M={key:c.z.string(),label:c.z.string(),required:c.z.boolean().optional().default(!1),secret:c.z.boolean().optional().default(!1),readOnly:c.z.boolean().optional().default(!1),placeholder:c.z.string().optional(),description:c.z.string().optional(),tooltip:c.z.string().optional()},N=c.z.discriminatedUnion(`type`,[(0,c.zStrictObject)({...M,type:c.z.enum([`text`,`password`])}),(0,c.zStrictObject)({...M,type:c.z.literal(`select`),options:(0,c.zStrictObject)({value:c.z.string(),label:c.z.string()}).array()})]),P=(0,c.zStrictObject)({targetFieldKey:c.z.string(),alias:c.z.string().optional(),expression:c.z.string().optional(),values:c.z.unknown().optional(),type:c.z.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:c.z.boolean().default(!1),custom:c.z.boolean().default(!1),hidden:c.z.boolean().default(!1),enumMapper:(0,c.zStrictObject)({matcher:c.z.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or((0,c.zStrictObject)({matchExpression:c.z.string(),value:c.z.string()}).array())}).optional(),properties:c.z.lazy(()=>P).array().optional()}),F=(0,c.zStrictObject)({name:c.z.string(),type:c.z.enum([`string`,`number`,`boolean`,`datetime_string`,`object`]),required:c.z.boolean(),description:c.z.string(),array:c.z.boolean().optional().default(!1),in:c.z.enum([`body`,`query`,`path`,`headers`]),properties:c.z.lazy(()=>F.omit({in:!0})).array().optional()}),I=(0,c.zStrictObject)({operationId:c.z.string(),categories:c.z.string().array(),operationType:c.z.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`unknown`]),schema:c.z.string().optional(),schemaType:c.z.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:c.z.string().optional(),entrypointHttpMethod:c.z.string().optional(),label:c.z.string(),description:c.z.string(),tags:c.z.string().array().optional(),releaseStage:c.z.enum(f.ReleaseStages).optional(),context:c.z.string().optional(),responses:(0,c.zStrictObject)({statusCode:c.z.number(),description:c.z.string()}).array().optional(),inputs:F.array().optional(),cursor:(0,c.zStrictObject)({enabled:c.z.boolean(),pageSize:c.z.number()}).optional(),compositeIdentifiers:(0,c.zStrictObject)({enabled:c.z.boolean(),version:c.z.number().optional(),fields:(0,c.zStrictObject)({targetFieldKey:c.z.string(),remote:c.z.string().optional(),components:c.z.string().array()}).array().optional()}).optional(),scheduledJobs:(0,c.zStrictObject)({enabled:c.z.boolean(),type:c.z.enum([`data_sync`]),schedule:c.z.string(),description:c.z.string(),requestParams:(0,c.zStrictObject)({fields:c.z.string().array().optional(),expand:c.z.string().array().optional(),filter:c.z.record(c.z.string(),c.z.string()).optional()}).optional(),syncFilter:(0,c.zStrictObject)({name:c.z.enum([`updated_after`,`created_after`]),initialLoopbackPeriod:c.z.string(),incrementalLoopbackPeriod:c.z.string()}).optional()}).array().optional(),fieldConfigs:P.array().optional(),steps:(0,c.zStrictObject)({stepId:c.z.string(),description:c.z.string(),stepFunction:(0,c.zStrictObject)({functionName:c.z.string(),version:c.z.string().optional(),parameters:c.z.record(c.z.string(),c.z.unknown())}),condition:c.z.string().optional(),ignoreError:c.z.boolean().optional()}).array(),result:c.z.string().or(c.z.record(c.z.string(),c.z.unknown())).optional()}),ne=(0,c.zStrictObject)({schedule:c.z.string().optional(),operation:I.extend({operationType:c.z.literal(`refresh_token`)})}),re=(0,c.zStrictObject)({mainRatelimit:c.z.number(),subPools:c.z.array((0,c.zStrictObject)({subPoolKey:c.z.string(),urlPattern:c.z.string(),rateLimit:c.z.number()})).optional(),mappedRateLimitErrors:c.z.array((0,c.zStrictObject)({errorStatus:c.z.number(),errorMessage:c.z.string(),errorMessagePath:c.z.string().optional(),retryAfterPath:c.z.string().optional(),retryAfterUnit:c.z.union([c.z.literal(`seconds`),c.z.literal(`milliseconds`),c.z.literal(`date`)]).optional(),retryAfterValue:c.z.number().optional()})).optional()}),ie=(0,c.zStrictObject)({mainMaxConcurrency:c.z.number(),subPools:c.z.array((0,c.zStrictObject)({subPoolKey:c.z.string(),urlPattern:c.z.string(),maxConcurrency:c.z.number()})).optional()}),ae=(0,c.zStrictObject)({StackOne:c.z.string(),info:(0,c.zStrictObject)({title:c.z.string(),version:c.z.string(),key:c.z.string(),assets:(0,c.zStrictObject)({icon:c.z.string()}),description:c.z.string()}),context:c.z.string().optional(),baseUrl:c.z.string(),authentication:c.z.record(c.z.string(),(0,c.zStrictObject)({type:c.z.string(),label:c.z.string(),authorization:f.AUTHENTICATION_SCHEMA,environments:(0,c.zStrictObject)({key:c.z.string(),name:c.z.string()}).array(),support:(0,c.zStrictObject)({link:c.z.string(),description:c.z.string().optional()}),configFields:N.array().optional(),setupFields:N.array().optional(),refreshAuthentication:ne.optional(),testOperations:(0,c.zStrictObject)({operation:c.z.string().or(I),condition:c.z.string().optional(),required:c.z.boolean().default(!0)}).array().optional()})).array().optional(),operations:I.array().optional(),rateLimit:re.optional(),concurrency:ie.optional(),releaseStage:c.z.enum(f.ReleaseStages).optional()}).strict();function L(e){try{let t=(0,m.parse)(e),n=Ce(ae,t),r={title:n.info.title,version:n.info.version,key:n.info.key,assets:n.info.assets,description:n.info.description,context:n.context,rateLimit:n.rateLimit,concurrency:n.concurrency,releaseStage:n.releaseStage},i=le(n),a={baseUrl:n.baseUrl,authentication:oe(i)},o=he(n,a);return r.operations=o,se(n.info.key,i,o,a),r.authentication=i,(0,c.notMissing)(o)&&(r.categories=ce(Object.values(o))),r}catch(e){if(e instanceof T)throw e;let t=e.message,n=t.match(/at line (\d+)/),r=n?parseInt(n[1],10):1;throw new E(r,t)}}const oe=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testOperations:s,...c}=r;t[n]=oe(c)}else t[n]=r;return t},se=(e,t,n,r)=>{if(!(!t||!n))for(let i of Object.values(t))for(let t of Object.values(i)){let i=t.testOperations;t.testOperations=i?.map(t=>{if((0,c.notMissing)(t.operation))if(typeof t.operation==`string`){let r=w(e,t.operation),i=Object.values(n).find(e=>e.id===r);if(i)return{...t,operation:i}}else{let n=w(e,t.operation.operationId),i=R(n,t.operation,r);return{...t,operation:i}}return t})}},ce=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},le=e=>{let t={};for(let n of e.authentication??[]){let[r]=Object.keys(n),i=n[r].environments.reduce((t,i)=>{let{key:a,name:o}=i,{environments:s,refreshAuthentication:l,testOperations:u,...d}=n[r],f=(0,c.notMissing)(l)?{schedule:l.schedule,operation:R(w(e.info.key,l.operation.operationId),l.operation)}:void 0;return t[a]={...d,refreshAuthentication:f,envKey:a,envName:o,testOperations:u},t},{});t[r]=i}return t},ue=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,de=e=>e.operationType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,fe=e=>{if(e.operationType!==`refresh_token`)return e.entrypointHttpMethod??`get`},pe=e=>{if(!(e.operationType===`refresh_token`||(0,c.isMissing)(e.schema)))return e.operationType===`list`?`/${e.schema}`:`/${e.schema}/:id`},me=e=>{let t={success:te(e.operationType),errors:j()},n=e.responses?.reduce((e,t)=>{let n=(0,p.isSuccessStatusCode)(t.statusCode);return n?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e},t);return n??t},he=(e,t)=>{let n=e.operations?.reduce((n,r)=>{let i=ue(r),a=de(r),o=i??a,s=w(e.info.key,r.operationId);return n[s]=R(s,r,t,o),n},{});return n},R=(e,t,n,r)=>{let i=pe(t),a=me(t),o=ye(t),s=t.inputs||[];o.enabled&&(s?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),s?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1}));let c=fe(t);return{id:e,categories:t.categories,label:t.label,description:t.description,operationType:t.operationType,schemaType:t.schemaType??`native`,entrypointUrl:t.entrypointUrl??i,entrypointHttpMethod:c,endpoint:r,tags:t.tags,releaseStage:t.releaseStage,context:t.context,responses:a,cursor:o,compositeIdentifiers:be(t),scheduledJobs:xe(t),inputs:s,steps:t.steps.reduce((e,r)=>{let{customErrors:i,...a}=r.stepFunction.parameters??{},o={id:r.stepId,description:r.description,condition:r.condition,ignoreError:r.ignoreError,stepFunction:{functionName:r.stepFunction.functionName,version:r.stepFunction.version,params:{...Se({stepFunctionName:r.stepFunction.functionName,baseRequestParams:n,customErrors:i}),...r.stepFunction.functionName===`map_fields`||r.stepFunction.functionName===`typecast`?{fields:a.fields??t.fieldConfigs}:{},...a}}};return ge(t.operationId,o),e[r.stepId]=o,e},{}),result:t.result}},ge=(e,t)=>{let n=t.stepFunction.version??`1`,r=f.StepFunctionsRegistry[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new O(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&we(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},z=(e,t)=>{if(!e.inputs)return{};let n=_e(e.inputs),r=c.z.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},_e=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=ve(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=c.z.object(t))}return n},ve=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=c.z.string();break;case`number`:t=c.z.number();break;case`boolean`:t=c.z.boolean();break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=ve(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=c.z.object(n)}else t=c.z.record(c.z.string(),c.z.unknown());break;default:t=c.z.unknown()}return e.array&&(t=c.z.array(t)),t},ye=e=>{let t=e.operationType===`list`,n=e.cursor??{enabled:t,pageSize:A};return{enabled:n.enabled&&t,pageSize:n.pageSize}},be=e=>{if(e.operationType===`refresh_token`)return{enabled:!1};if((0,c.isMissing)(e.compositeIdentifiers)){let t=e.fieldConfigs?.find(e=>e.targetFieldKey===`id`),n=(0,c.notMissing)(t)?[{targetFieldKey:t.targetFieldKey,remote:`id`,components:[{name:t.targetFieldKey,alias:t.alias}]}]:void 0;return{enabled:!0,version:f.COMPOSITE_ID_LATEST_VERSION,fields:n}}let t=[];for(let n of e.compositeIdentifiers?.fields??[]){let r=n.components.map(t=>{let n=e.fieldConfigs?.find(e=>e.targetFieldKey===t);return{name:t,alias:n?.alias}});t.push({targetFieldKey:n.targetFieldKey,remote:n.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:t.length>0?t:void 0}},xe=e=>{if(!(0,c.isMissing)(e.scheduledJobs))return e.scheduledJobs},Se=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`){let e=[{receivedStatus:500,targetStatus:502}],r=n&&Array.isArray(n)?n:[],i=[...r,...e];return{...t,customErrors:i}}else return{}},Ce=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;{let e=n.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]}));throw new D(e,`Invalid connector schema`)}},we=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;{let e=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]}));throw new k(n,r,i,a,e)}},B=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.authorization.type!==`oauth2`)return;let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.operation;if((0,c.notMissing)(r))return{operation:r,params:{}}},Te=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.authorization.type!==`oauth2`)return!1;let r=B(e,t,n);return(0,c.notMissing)(r)},Ee=(e,t,n)=>{let r=e.authentication?.[t]?.[n]?.authorization;if(r?.type===`oauth2`)return r?.tokenExpiresIn},De=(e,t,n)=>{let r=e.authentication?.[t]?.[n]?.authorization;if(r?.type===`oauth2`)return r?.tokenRefreshExpiresIn},Oe=(e,t=[])=>V(t,e.releaseStage),ke=(e,t=[])=>{if(!Oe(e,t))return;let n={};if(e.operations)for(let[r,i]of Object.entries(e.operations))V(t,i.releaseStage)&&(n[r]=i);return{...e,operations:n}},Ae=e=>e??`ga`,V=(e=[],t)=>{let n=Ae(t);return e.includes(n)},je=e=>{try{let t=L(e);return{success:!0,connector:t}}catch(t){if(t instanceof D){let n=t.issues,r=[];return n.forEach(t=>{let n=t?.keys?.[0],i=(0,c.isMissing)(n)?t.path:[...t.path,n],a=Me(i,e);r.push({line:a,message:t.message,field:i.join(`.`)})}),{success:!1,errors:r}}else if(t instanceof E)return{success:!1,errors:[{line:t.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(t instanceof O){let n=Ne(t.operationId,t.stepId,t.functionName,!1,e);return{success:!1,errors:[{line:n,message:t.message,field:void 0}]}}else if(t instanceof k){let n=t.issues,r=[];return n.forEach(n=>{let i=n?.keys?.[0],a=(0,c.isMissing)(i)?n.path:[...n.path,i],o=Ne(t.operationId,t.stepId,t.functionName,!0,e);r.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:r}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},Me=(e,t)=>{let n=t.split(`
5
- `),r=0,i=-1,a=0;for(let t=0;t<n.length;t++){let o=n[t],s=o.match(/^(\s*)/)?.[1]?.length||0,l=o.replace(`- `,``).trim();if(l.startsWith(`#`)||l===``||s<=i)continue;let u=(0,c.notMissing)(e[r])?`${String(e[r])}`:``;if((0,c.isMissing)(u))return a+1;if(isNaN(Number(u))){if(l.startsWith(`${u}:`)){if(r===e.length-1)return t+1;i=s,a=t,r++}}else{let e=parseInt(u,10),i=-1;for(let o=t;o<n.length;o++){let s=n[o],c=s.trim();if(c.startsWith(`-`)&&i++,i===e){r++,a=t,t--;break}else t++}}}return a+1},Ne=(e,t,n,r,i)=>{let a=i.split(`
6
- `),o=1,s=null,l=null;for(let i=0;i<a.length;i++){let u=a[i],d=u.trim();if((0,c.isMissing)(s)&&d===`- operationId: ${e}`){s=e,o=i+1;continue}if((0,c.notMissing)(s)&&(0,c.isMissing)(l)&&d===`- stepId: ${t}`){l=t,o=i+1;continue}if((0,c.notMissing)(s)&&(0,c.notMissing)(l)&&!r&&d.startsWith(`functionName: ${n}`)||(0,c.notMissing)(s)&&(0,c.notMissing)(l)&&r&&d===`parameters:`)return o=i+1,o}return o};var H=class e extends Error{errorType;context;constructor(t,n,r){super(r),this.name=`ConnectSDKError`,this.errorType=t,this.context=n,Error.captureStackTrace&&Error.captureStackTrace(this,e)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},Pe=class extends H{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},U=class extends H{constructor(e,t){super(`MISSING_OPERATION_ERROR`,e,t),this.name=`MissingOperationError`}},Fe=class extends H{constructor(e,t){super(`INVALID_OPERATION_INPUTS_ERROR`,e,t),this.name=`InvalidOperationInputsError`}},Ie=class extends H{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const Le=(e,t)=>{let n=Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t})),r=Object.values(e?.operations??{}).map(e=>({id:e.id,description:e.description.replace(/\b\w/g,e=>e.toUpperCase()),label:e.label.replace(/\b\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,authentication:n,operation_details:t?.includes(`operation_details`)?e:void 0}));return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,authentication:n,actions:r}},Re=(e,t)=>e.map(e=>Le(e,t)),ze=`stackone://internal//`,Be=`${ze}refresh_token`,Ve=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=f.StepFunctionsFactory.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===f.StepFunctionName.MAP_FIELDS?{[f.StepFunctionName.MAP_FIELDS.toString()]:{output:{data:a.block.result},errors:a.errors,successful:a.successful}}:{};return{...a.block,steps:{...a?.block?.steps??{},...o}}},W=({category:e,connectorKey:t,connectorVersion:n,authConfigKey:r,environment:i=`production`,operation:a,accountSecureId:o,projectSecureId:s,organizationId:l})=>({organizationId:l,projectSecureId:s,accountSecureId:o,connectorKey:t,connectorVersion:n,category:e,service:``,resource:``,schema:a?.schema?.key,operationType:a?.operationType??`unknown`,authenticationType:r,environment:i,actionRunId:(0,c.generateActionRunId)()}),He=(e,t,n)=>e.authentication?.[t]?.[n]?.testOperations,Ue=e=>{let t=e.operation?.compositeIdentifiers,n={...e.inputs??{}};if(!t?.enabled||(0,c.isMissing)(n))return e;let r=t.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{}),i={version:t.version??f.COMPOSITE_ID_LATEST_VERSION,aliases:r};return G(n,i,e.logger),{...e,inputs:n}},G=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))Ye(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)G(e,t,n);else typeof i==`object`&&i&&G(i,t,n)}},We=(e,t,n,r)=>{let i=[],a=[];for(let o of e)try{let e=(0,f.decodeCompositeId)(o,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:o,compositeIdentifierConfig:n,error:e}}),a.push(o)}return{compositeIdComponents:i,nonCompositeIds:a}},Ge=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},Ke=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},qe=(e,t,n,r,i)=>{n.every(Ke)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},Je=(e,t,n)=>{e instanceof f.CoreError&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},Ye=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=We(o,t,r,i);Ge(n,t,s,a),qe(n,t,s,c,a)}catch(e){Je(e,t,i)}},K=`remote_`,Xe=e=>{let t=e.operation?.compositeIdentifiers;if(!t?.enabled)return e;let n=`data`,r=e.outputs?.[n];if((0,c.isMissing)(r))return e;let i=Array.isArray(r)?r.map(e=>Ze(e,t)):Ze(r,t);return{...e,outputs:{...e.outputs??{},[n]:i}}},Ze=(e,t)=>{let n=Qe(e,t),r=q(n);return{...e,...(0,c.isObject)(r)?r:{}}},Qe=(e,t)=>{let n=t.version??f.COMPOSITE_ID_LATEST_VERSION,r={};return t.fields?.forEach(t=>{let i={},a=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),a.push({key:t.name,value:e[t.name]})});let o=a.length===1?a[0]:{identifiers:a},s={version:n,aliases:Object.keys(i).length>0?i:void 0},c=(0,f.encodeCompositeId)(o,s);r[t.targetFieldKey]=c,t.remote&&(r[`${K}${t.remote}`]=e[t.remote])}),{...e,...r}},$e=e=>e===`id`||/.+_id(s)?$/.test(e),et=e=>Array.isArray(e)&&e.every(e=>(0,c.isString)(e)&&e.length>0),tt=(e,t)=>(0,f.isCompositeId)(e)||t.startsWith(K),nt=(e,t)=>{try{return(0,f.encodeCompositeId)({key:e,value:t},{version:f.COMPOSITE_ID_LATEST_VERSION})}catch{return t}},rt=(e,t,n)=>{let r=t.map(t=>(0,c.isString)(t)&&t.length>0&&!(0,f.isCompositeId)(t)?nt(e,t):t);n[e]=r,n[`${K}${e}`]=t},it=(e,t,n)=>{if(tt(t,e))return;let r=(0,f.encodeCompositeId)({key:e,value:t},{version:f.COMPOSITE_ID_LATEST_VERSION});n[e]=r,n[`remote_${e}`]=t},at=(e,t,n)=>{et(t)?rt(e,t,n):(0,c.isString)(t)&&t.length>0&&it(e,t,n)},q=e=>{if(Array.isArray(e))return e.map(e=>q(e));if(!(0,c.isObject)(e))return e;let t={...e};for(let[n,r]of Object.entries(e))((0,c.isObject)(r)||Array.isArray(r)&&r.length>0&&(0,c.isObject)(r[0]))&&(t[n]=q(r)),$e(n)&&at(n,r,t);return t},ot=(e,t)=>{let n=Number(e.inputs?.page_size),r=(0,c.notMissing)(e.inputs?.page_size)&&(0,c.isNumber)(n)&&!Number.isNaN(n)?n:e.operation?.cursor?.pageSize??t;return r},st=(e,t,n,r)=>{let i=(0,c.isMissing)(e)?void 0:e.data,a=Object.keys(n).length+1,o=(0,f.isCursorEmpty)({cursor:r,ignoreStepIndex:a});if(!(0,c.isObject)(e)||(0,c.isMissing)(i)||(i?.length??0)<=t)return{result:e,next:(0,c.notMissing)(r)&&!o?(0,f.minifyCursor)(r):null};let s=r?.remote?.[a]?.pageNumber??1,l=(s-1)*t,u=l+t,d=i.slice(l,u),p=i.length>u||!o,m=(0,f.updateCursor)({cursor:r,stepIndex:a,pageNumber:s+1});return{result:{...e,data:d},next:p?(0,f.minifyCursor)(m):null}},ct=e=>{let t=e.settings?.olap;return(0,c.isMissing)(t)?{}:{logs:t.logs?{enabled:t.logs.enabled}:void 0,advanced:t.advanced?{enabled:t.advanced.enabled,ttl:t.advanced.ttl,errorsOnly:t.advanced.errorsOnly}:void 0}},J=async({block:e,buildStepFunction:t=f.StepFunctionsFactory.build,virtualPaginateResultFn:n=st,encodeResultCompositeIds:r=Xe,decodeInputCompositeIds:i=Ue})=>{let a=i(e),o=await mt({block:a,buildStepFunction:t,virtualPaginateResultFn:n});return r(o)},lt=(e,t)=>e.condition?!(0,h.safeEvaluate)(e.condition,t):!1,ut=(e,t,n)=>{let r=e.stepFunction,i=f.StepFunctionsRegistry[e.stepFunction.functionName]?.[`v${e.stepFunction.version??1}`],a=(0,c.notMissing)(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return t.operation?.cursor.enabled&&a?{...r.params??{},cursor:{token:t.nextCursor?.remote?.[n]?.providerPageCursor,position:t.nextCursor?.remote?.[n]?.position}}:r.params??{}},dt=(e,t,n,r,i)=>{let a=Y({block:e,stepId:t,successful:!1,functionOutput:n}),o=r.ignoreError??!1;return o||(i.hasFatalError=!0,i.errorStatusCode??=n.output?.statusCode??500),a},ft=async(e,t,n,r,i,a)=>{let o=n[e],s=o.stepFunction,c=a.buildStepFunction({functionName:s.functionName,version:s.version,validateSchemas:!0}).fn;if(lt(o,r))return Y({block:r,stepId:e,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`});if(i.hasFatalError)return Y({block:r,stepId:e,successful:!1,skipped:!0,message:`Step skipped due to previous error.`});let l=ut(o,r,t),u=await c({block:r,params:l});if(u.successful===!1)return dt(r,e,u,o,i);let d=r.operation?.cursor.enabled?(0,f.updateCursor)({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return Y({block:{...u.block,nextCursor:d},stepId:e,functionOutput:u})},pt=(e,t,n,r,i)=>{let a=!n.hasFatalError,o=a?e.operation?.responses.success.statusCode??200:n.errorStatusCode??500,s=(0,c.notMissing)(i)&&(0,c.isObject)(i.result)?{next:i.next,...i.result}:r;return{...t,outputs:s,response:{successful:a,statusCode:o,message:a?void 0:e.operation?.responses?.errors?.[o]?.description??p.HttpErrorMessages?.[o]??`Error while processing the request`}}},mt=async({block:e,buildStepFunction:t=f.StepFunctionsFactory.build,virtualPaginateResultFn:n=st})=>{let r=e.operation?.steps||{},i={...e},a=Object.keys(r),o=ot(e,A),s={hasFatalError:!1,errorStatusCode:null},c={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of a.entries()){let n=new Date;i=await ft(t,e,r,i,s,c),gt({block:i,stepId:t,startTime:n,endTime:new Date})}let l=e.operation?.result?ht(e.operation.result,i):void 0,u=e.operation?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return pt(e,i,s,l,u)},ht=(e,t)=>(0,c.isObject)(e)?(0,h.safeEvaluateRecord)(e,t):(0,h.safeEvaluate)(e,t),Y=({block:e,stepId:t,successful:n,functionOutput:r,skipped:i,message:a})=>({...e,steps:{...e.steps,[t]:{successful:n??r?.successful??!1,errors:r?.errors,output:r?.output,skipped:i,message:a}}}),gt=({block:e,stepId:t,startTime:n,endTime:r})=>{let i=e.olapClient;if((0,c.isMissing)(i?.recordStep))return;let a=ct(e),o=e.context,s={actionRunId:o.actionRunId??`unknown`,stepId:t,status:e.steps?.[t]?.successful?`successful`:`failed`,skipped:e.steps?.[t]?.skipped,message:e.steps?.[t]?.message,outputs:e.steps?.[t]?.output,errors:e.steps?.[t]?.errors,startTime:n,endTime:r};i.recordStep(s,a)},X=async e=>{let{pathParams:t={},queryParams:n={},body:r={},headers:i={},parseConnector:a=L,parseOperationInputsFn:o=z,createBlockContextFn:s=W,createBlockFn:l=g,runStepOperationFn:u=J,getOperationFromUrlFn:d=x,getOperationForRefreshAuthenticationFn:f=B,getTestOperationsFn:p=He,mode:m,account:_,connector:v,getHttpClient:y,getOlapClient:b,settings:S,logger:C,category:w,...T}=e,E=_.authConfigKey,D=_.environment??`production`,O=_.secureId,k=_.projectSecureId,A=_.organizationId,te=_.credentials,j=s({category:w??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,authConfigKey:E,environment:D,accountSecureId:O,projectSecureId:k,organizationId:A}),M=new Date,N;try{N=(0,c.isString)(v)?a(v):v}catch{throw new Pe(j,`Error while parsing connector`)}let P={connector:N,context:j,credentials:te,settings:S,logger:C,getHttpClient:y,getOlapClient:b};if(m===`operation_id`){let{operationId:e}=T,a=ee(N,e);if((0,c.isMissing)(a))throw new U(j,`No matching operation found`);let s=await Z({operation:a,blockContext:j,queryParams:n,pathParams:t,body:r,headers:i,parseOperationInputsFn:o,createBlockFn:l,createBlockParams:P,runStepOperationFn:u});return s.statistics={startTime:M,endTime:new Date},$({block:s}),s}else if(m===`test_operations`){let e=p(N,E,D);if((0,c.isMissing)(e)||e.length===0){let e=await _t(l,P);return e.statistics={startTime:M,endTime:new Date},$({block:e}),e}j.operationType=`test`;for(let t of e){let e=await l({...P,inputs:void 0,operation:t.operation,nextCursor:void 0}),n=(0,c.notMissing)(t.condition)?(0,h.evaluate)(t.condition,e):!0;if(!n)continue;let r=await u({block:e});if(((0,c.isMissing)(r?.response?.successful)||!r.response.successful)&&t.required){C?.error({code:`TestOperationFailed`,message:`Test operation "${t.operation.id}" failed with error: ${r?.response?.message}`});let e=await Q(l,P);return $({block:e}),e}}let t=await _t(l,P);return t.statistics={startTime:M,endTime:new Date},$({block:t}),t}else if(m===`refresh_authentication`){let e=f(N,E,D);if((0,c.isMissing)(e))throw new U(j,`No matching operation found`);let t=await Z({operation:e.operation,blockContext:j,queryParams:n,pathParams:e.params,body:r,headers:i,parseOperationInputsFn:o,createBlockFn:l,createBlockParams:P,runStepOperationFn:u});return t.statistics={startTime:M,endTime:new Date},$({block:t}),t}else if(m===`path`){let{path:e,method:t}=T,a=d(N,e,t);if((0,c.isMissing)(a))throw new U(j,`No matching operation found`);let s=await Z({operation:a.operation,blockContext:j,queryParams:n,pathParams:a.params,body:r,headers:i,parseOperationInputsFn:o,createBlockFn:l,createBlockParams:P,runStepOperationFn:u});return s.statistics={startTime:M,endTime:new Date},$({block:s}),s}else{let e=await Q(l,P);return e.statistics={startTime:M,endTime:new Date},$({block:e}),e}},Z=async e=>{let{operation:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseOperationInputsFn:s,createBlockFn:c,createBlockParams:l,runStepOperationFn:u}=e;n.operationType=t.operationType,n.schema=t.schema?.key;let d=vt(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch{throw new Fe(n,`Error while parsing operation inputs`)}let p=await c({...l,inputs:f,operation:t,nextCursor:d});return await u({block:p})},_t=async(e,t)=>{let n=await e({...t,inputs:void 0,operation:void 0,nextCursor:void 0});return{...n,response:{successful:!0,statusCode:200}}},Q=async(e,t)=>{let n=await e({...t,inputs:void 0,operation:void 0,nextCursor:void 0});return{...n,response:{successful:!1,statusCode:500}}},vt=(e,t)=>{let n=e?.next,r=(0,c.notMissing)(n)&&t.operationType===`list`?(0,f.expandCursor)(n):void 0;if(r===null)throw new Ie(t,`Invalid cursor.`);return r},$=({block:e})=>{let t=e.olapClient;if((0,c.isMissing)(t?.recordAction))return;let n=ct(e),r=e.context,i={actionRunId:e.context.actionRunId||`unknown`,actionId:e.operation?.id||`unknown`,connectorKey:r.connectorKey,connectorVersion:r.connectorVersion,operationType:r.operationType,category:r.category,organizationId:r.organizationId||`unknown`,projectSecureId:r.projectSecureId,accountSecureId:r.accountSecureId,originOwnerId:r.originOwnerId,originOwnerName:r.originOwnerName,httpMethod:e.operation?.entrypointHttpMethod,url:e.operation?.entrypointUrl,sourceId:r.sourceId,sourceType:r.sourceType,sourceValue:r.sourceValue,status:e.response?.successful?`success`:`error`,message:e.response?.message,outputs:e.outputs,startTime:e.statistics?.startTime,endTime:e.statistics?.endTime};t.recordAction(i,n)},yt=async({operationId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=L,parseOperationInputsFn:d=z,createBlockContextFn:f=W,createBlockFn:p=g,runStepOperationFn:m=J})=>X({mode:`operation_id`,operationId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u,parseOperationInputsFn:d,createBlockContextFn:f,createBlockFn:p,runStepOperationFn:m}),bt=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,logger:c,getHttpClient:l,parseConnector:u=L,getOperationFromUrlFn:d=x,getOperationForRefreshAuthenticationFn:f=B,parseOperationInputsFn:p=z,createBlockContextFn:m=W,createBlockFn:h=g,runStepOperationFn:_=J})=>{let v=xt(r),y=v?await X({mode:`refresh_authentication`,account:e,connector:t,getOperationForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseOperationInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepOperationFn:_}):await X({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,getOperationFromUrlFn:d,parseConnector:u,logger:c,getHttpClient:l,parseOperationInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepOperationFn:_});return y},xt=e=>e===Be,St=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=L,getTestOperationsFn:a=He,createBlockContextFn:o=W,createBlockFn:s=g,runStepOperationFn:c=J})=>{let l=await X({mode:`test_operations`,account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i,getTestOperationsFn:a,createBlockContextFn:o,createBlockFn:s,runStepOperationFn:c});return l?.response?.successful??!1};exports.ConnectSDKError=H,exports.REFRESH_TOKEN_OPERATION_PATH=Be,exports.applyReleaseStageToConnector=ke,exports.createBlock=g,exports.executeStepFunction=Ve,exports.getActionsMeta=Le,exports.getActionsMetaFromConnectors=Re,exports.getOperationFromUrl=x,exports.getRefreshTokenExpiresIn=De,exports.getTokenExpiresIn=Ee,exports.isConnectorReleased=Oe,exports.loadConnector=_,exports.parseOperationInputs=z,exports.parseYamlConnector=L,exports.runAction=X,exports.runConnectorAction=yt,exports.runConnectorOperation=bt,exports.runStepOperation=J,exports.runTestOperations=St,exports.supportsRefreshAuthentication=Te,exports.validateYamlConnector=je;
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=s(require(`@stackone/utils`)),l=s(require(`path-to-regexp`)),u=s(require(`fs`)),d=s(require(`path`)),f=s(require(`@stackone/core`)),p=s(require(`@stackone/transport`)),m=s(require(`yaml`)),h=s(require(`@stackone/expressions`)),g=async({connector:e,inputs:t,context:n,action:r,credentials:i,nextCursor:a,settings:o,logger:s,getHttpClient:l,getOlapClient:u})=>{if((0,c.isMissing)(l))throw Error(`getHttpClient function is required`);let d=await l(),f=u?await u():void 0;return{connector:e,inputs:t,fieldConfigs:[],context:n,action:r,credentials:i,nextCursor:a,httpClient:d,olapClient:f,settings:o,logger:s}},_=(e,t,n)=>{let r=n.toUpperCase();if(!e.actions)return;let i=Object.values(e.actions).filter(e=>(0,c.notMissing)(e.endpoint)).map(e=>({actionId:e.id,endpoint:e.endpoint})),a=y(t,r,i);if(a)return{action:e.actions?.[a.actionId],params:a.params}},v=e=>{let t=e.startsWith(`/`)?e.slice(1):e,n=t.endsWith(`/`)?t.slice(0,-1):t;return n},y=(e,t,n)=>{let r=v(e);for(let e of n)if(e.endpoint?.startsWith(t)){let n=e.endpoint.replace(`${t} `,``).trim(),i=(0,l.match)(v(n)),a=i(v(r));if(a!==!1)return{actionId:e.actionId,path:e.endpoint,params:a.params}}},b=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,ee=(e,t)=>{let n=`${e.key}_`,r=t.startsWith(n)?t:`${n}${t}`;return e.actions?.[r]},te=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=(0,u.readFileSync)(e,`utf8`);if(!t.includes(`:`)||!t.includes(`$ref:`))return t;let n=t.split(`
2
+ `),r=x(n,(0,d.dirname)(e));return r.join(`
3
+ `)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},x=(e,t)=>{let n=[];for(let r of e)if(S(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=ne(i,t),o=a.map(t=>` `.repeat(e)+t);n.push(...o)}else n.push(r);return n},S=e=>e.includes(`$ref:`),ne=(e,t)=>{let n=(0,d.resolve)((0,d.join)(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{let e=(0,u.readFileSync)(n,`utf8`);return e.split(`
4
+ `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var C=class e extends Error{errorType;constructor(t,n){super(n),this.name=`InternalConnectSDKError`,this.errorType=t,Error.captureStackTrace&&Error.captureStackTrace(this,e)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},w=class extends C{line;constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},T=class extends C{issues;constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},E=class extends C{actionId;stepId;functionName;functionVersion;constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},D=class extends C{actionId;stepId;functionName;functionVersion;issues;constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}};const O=25,re=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},k=()=>{let e={400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}};return e},A={key:c.z.string(),label:c.z.string(),required:c.z.boolean().optional().default(!1),secret:c.z.boolean().optional().default(!1),readOnly:c.z.boolean().optional().default(!1),placeholder:c.z.string().optional(),description:c.z.string().optional(),tooltip:c.z.string().optional()},j=c.z.discriminatedUnion(`type`,[(0,c.zStrictObject)({...A,type:c.z.enum([`text`,`password`])}),(0,c.zStrictObject)({...A,type:c.z.literal(`select`),options:(0,c.zStrictObject)({value:c.z.string(),label:c.z.string()}).array()})]),M=(0,c.zStrictObject)({targetFieldKey:c.z.string(),alias:c.z.string().optional(),expression:c.z.string().optional(),values:c.z.unknown().optional(),type:c.z.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:c.z.boolean().default(!1),custom:c.z.boolean().default(!1),hidden:c.z.boolean().default(!1),enumMapper:(0,c.zStrictObject)({matcher:c.z.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or((0,c.zStrictObject)({matchExpression:c.z.string(),value:c.z.string()}).array())}).optional(),properties:c.z.lazy(()=>M).array().optional()}),ie=(0,c.zStrictObject)({name:c.z.string(),type:c.z.enum([`string`,`number`,`boolean`,`datetime_string`,`object`]),required:c.z.boolean(),description:c.z.string(),array:c.z.boolean().optional().default(!1),in:c.z.enum([`body`,`query`,`path`,`headers`]),properties:c.z.lazy(()=>ie.omit({in:!0})).array().optional()}),N=(0,c.zStrictObject)({actionId:c.z.string(),categories:c.z.string().array(),actionType:c.z.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`unknown`]),schema:c.z.string().optional(),schemaType:c.z.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:c.z.string().optional(),entrypointHttpMethod:c.z.string().optional(),label:c.z.string(),description:c.z.string(),tags:c.z.string().array().optional(),releaseStage:c.z.enum(f.ReleaseStages).optional(),context:c.z.string().optional(),responses:(0,c.zStrictObject)({statusCode:c.z.number(),description:c.z.string()}).array().optional(),inputs:ie.array().optional(),cursor:(0,c.zStrictObject)({enabled:c.z.boolean(),pageSize:c.z.number()}).optional(),compositeIdentifiers:(0,c.zStrictObject)({enabled:c.z.boolean(),version:c.z.number().optional(),fields:(0,c.zStrictObject)({targetFieldKey:c.z.string(),remote:c.z.string().optional(),components:c.z.string().array()}).array().optional()}).optional(),scheduledJobs:(0,c.zStrictObject)({enabled:c.z.boolean(),type:c.z.enum([`data_sync`]),schedule:c.z.string(),description:c.z.string(),requestParams:(0,c.zStrictObject)({fields:c.z.string().array().optional(),expand:c.z.string().array().optional(),filter:c.z.record(c.z.string(),c.z.string()).optional()}).optional(),syncFilter:(0,c.zStrictObject)({name:c.z.enum([`updated_after`,`created_after`]),initialLoopbackPeriod:c.z.string(),incrementalLoopbackPeriod:c.z.string()}).optional()}).array().optional(),fieldConfigs:M.array().optional(),steps:(0,c.zStrictObject)({stepId:c.z.string(),description:c.z.string(),stepFunction:(0,c.zStrictObject)({functionName:c.z.string(),version:c.z.string().optional(),parameters:c.z.record(c.z.string(),c.z.unknown())}),condition:c.z.string().optional(),ignoreError:c.z.boolean().optional()}).array(),result:c.z.string().or(c.z.record(c.z.string(),c.z.unknown())).optional()}),ae=(0,c.zStrictObject)({schedule:c.z.string().optional(),action:N.extend({actionType:c.z.literal(`refresh_token`)})}),oe=(0,c.zStrictObject)({mainRatelimit:c.z.number(),subPools:c.z.array((0,c.zStrictObject)({subPoolKey:c.z.string(),urlPattern:c.z.string(),rateLimit:c.z.number()})).optional(),mappedRateLimitErrors:c.z.array((0,c.zStrictObject)({errorStatus:c.z.number(),errorMessage:c.z.string(),errorMessagePath:c.z.string().optional(),retryAfterPath:c.z.string().optional(),retryAfterUnit:c.z.union([c.z.literal(`seconds`),c.z.literal(`milliseconds`),c.z.literal(`date`)]).optional(),retryAfterValue:c.z.number().optional()})).optional()}),se=(0,c.zStrictObject)({mainMaxConcurrency:c.z.number(),subPools:c.z.array((0,c.zStrictObject)({subPoolKey:c.z.string(),urlPattern:c.z.string(),maxConcurrency:c.z.number()})).optional()}),P=(0,c.zStrictObject)({label:c.z.string(),authorization:f.AUTHORIZATION_SCHEMA,environments:(0,c.zStrictObject)({key:c.z.string(),name:c.z.string()}).array(),support:(0,c.zStrictObject)({link:c.z.string(),description:c.z.string().optional()}),configFields:j.array().optional(),setupFields:j.array().optional(),refreshAuthentication:ae.optional(),testActions:(0,c.zStrictObject)({action:c.z.string().or(N),condition:c.z.string().optional(),required:c.z.boolean().default(!0)}).array().optional()}),ce=P.extend({type:c.z.literal(`oauth2`),grantType:c.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),le=P.extend({type:c.z.literal(`custom`)}),ue=P.extend({type:c.z.literal(`oidc`)}),de=c.z.discriminatedUnion(`type`,[ce,le,ue]),fe=(0,c.zStrictObject)({StackOne:c.z.string(),info:(0,c.zStrictObject)({title:c.z.string(),version:c.z.string(),key:c.z.string(),assets:(0,c.zStrictObject)({icon:c.z.string()}),description:c.z.string()}),context:c.z.string().optional(),baseUrl:c.z.string(),authentication:c.z.record(c.z.string(),de).array().optional(),actions:N.array().optional(),rateLimit:oe.optional(),concurrency:se.optional(),releaseStage:c.z.enum(f.ReleaseStages).optional()}).strict();function F(e){try{let t=(0,m.parse)(e),n=Oe(fe,t),r={title:n.info.title,version:n.info.version,key:n.info.key,assets:n.info.assets,description:n.info.description,context:n.context,rateLimit:n.rateLimit,concurrency:n.concurrency,releaseStage:n.releaseStage},i=he(n),a={baseUrl:n.baseUrl,authentication:I(i)},o=xe(n,a);return r.actions=o,pe(n.info.key,i,o,a),r.authentication=i,(0,c.notMissing)(o)&&(r.categories=me(Object.values(o))),r}catch(e){if(e instanceof C)throw e;let t=e.message,n=t.match(/at line (\d+)/),r=n?parseInt(n[1],10):1;throw new w(r,t)}}const I=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,...c}=r;t[n]=I(c)}else t[n]=r;return t},pe=(e,t,n,r)=>{if(!(!t||!n))for(let i of Object.values(t))for(let t of Object.values(i)){let i=t.testActions;t.testActions=i?.map(t=>{if((0,c.notMissing)(t.action))if(typeof t.action==`string`){let r=b(e,t.action),i=Object.values(n).find(e=>e.id===r);if(i)return{...t,action:i}}else{let n=b(e,t.action.actionId),i=L(n,t.action,r);return{...t,action:i}}return t})}},me=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},he=e=>{let t={};for(let n of e.authentication??[]){let[r]=Object.keys(n),i=n[r].environments.reduce((t,i)=>{let{key:a,name:o}=i,{environments:s,refreshAuthentication:l,testActions:u,...d}=n[r],f=(0,c.notMissing)(l)?{schedule:l.schedule,action:L(b(e.info.key,l.action.actionId),l.action)}:void 0;return t[a]={...d,refreshAuthentication:f,envKey:a,envName:o,testActions:u},t},{});t[r]=i}return t},ge=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,_e=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,ve=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},ye=e=>{if(!(e.actionType===`refresh_token`||(0,c.isMissing)(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},be=e=>{let t={success:re(e.actionType),errors:k()},n=e.responses?.reduce((e,t)=>{let n=(0,p.isSuccessStatusCode)(t.statusCode);return n?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e},t);return n??t},xe=(e,t)=>{let n=e.actions?.reduce((n,r)=>{let i=ge(r),a=_e(r),o=i??a,s=b(e.info.key,r.actionId);return n[s]=L(s,r,t,o),n},{});return n},L=(e,t,n,r)=>{let i=ye(t),a=be(t),o=we(t),s=t.inputs||[];o.enabled&&(s?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),s?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1}));let c=ve(t);return{id:e,categories:t.categories,label:t.label,description:t.description,actionType:t.actionType,schemaType:t.schemaType??`native`,entrypointUrl:t.entrypointUrl??i,entrypointHttpMethod:c,endpoint:r,tags:t.tags,releaseStage:t.releaseStage,context:t.context,responses:a,cursor:o,compositeIdentifiers:Te(t),scheduledJobs:Ee(t),inputs:s,steps:t.steps.reduce((e,r)=>{let{customErrors:i,...a}=r.stepFunction.parameters??{},o={id:r.stepId,description:r.description,condition:r.condition,ignoreError:r.ignoreError,stepFunction:{functionName:r.stepFunction.functionName,version:r.stepFunction.version,params:{...De({stepFunctionName:r.stepFunction.functionName,baseRequestParams:n,customErrors:i}),...r.stepFunction.functionName===`map_fields`||r.stepFunction.functionName===`typecast`?{fields:a.fields??t.fieldConfigs}:{},...a}}};return Se(t.actionId,o),e[r.stepId]=o,e},{}),result:t.result}},Se=(e,t)=>{let n=t.stepFunction.version??`1`,r=f.StepFunctionsRegistry[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new E(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&ke(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},R=(e,t)=>{if(!e.inputs)return{};let n=Ce(e.inputs),r=c.z.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},Ce=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=z(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=c.z.object(t))}return n},z=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=c.z.string();break;case`number`:t=c.z.number();break;case`boolean`:t=c.z.boolean();break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=z(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=c.z.object(n)}else t=c.z.record(c.z.string(),c.z.unknown());break;default:t=c.z.unknown()}return e.array&&(t=c.z.array(t)),t},we=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:O};return{enabled:n.enabled&&t,pageSize:n.pageSize}},Te=e=>{if(e.actionType===`refresh_token`)return{enabled:!1};if((0,c.isMissing)(e.compositeIdentifiers)){let t=e.fieldConfigs?.find(e=>e.targetFieldKey===`id`),n=(0,c.notMissing)(t)?[{targetFieldKey:t.targetFieldKey,remote:`id`,components:[{name:t.targetFieldKey,alias:t.alias}]}]:void 0;return{enabled:!0,version:f.COMPOSITE_ID_LATEST_VERSION,fields:n}}let t=[];for(let n of e.compositeIdentifiers?.fields??[]){let r=n.components.map(t=>{let n=e.fieldConfigs?.find(e=>e.targetFieldKey===t);return{name:t,alias:n?.alias}});t.push({targetFieldKey:n.targetFieldKey,remote:n.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:t.length>0?t:void 0}},Ee=e=>{if(!(0,c.isMissing)(e.scheduledJobs))return e.scheduledJobs},De=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`){let e=[{receivedStatus:500,targetStatus:502}],r=n&&Array.isArray(n)?n:[],i=[...r,...e];return{...t,customErrors:i}}else return{}},Oe=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;{let e=n.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]}));throw new T(e,`Invalid connector schema`)}},ke=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;{let e=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]}));throw new D(n,r,i,a,e)}},B=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.type;if(i!==`oauth2`)return;let a=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;if((0,c.notMissing)(a))return{action:a,params:{}}},Ae=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.type;if(i!==`oauth2`)return!1;let a=B(e,t,n);return(0,c.notMissing)(a)},je=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization,a=r?.type;if(a===`oauth2`)return i?.tokenExpiresIn},Me=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization,a=r?.type;if(a===`oauth2`)return i?.tokenRefreshExpiresIn},V=(e,t=[])=>H(t,e.releaseStage),Ne=(e,t=[])=>{if(!V(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))H(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},Pe=e=>e??`ga`,H=(e=[],t)=>{let n=Pe(t);return e.includes(n)},Fe=e=>{try{let t=F(e);return{success:!0,connector:t}}catch(t){if(t instanceof T){let n=t.issues,r=[];return n.forEach(t=>{let n=t?.keys?.[0],i=(0,c.isMissing)(n)?t.path:[...t.path,n],a=Ie(i,e);r.push({line:a,message:t.message,field:i.join(`.`)})}),{success:!1,errors:r}}else if(t instanceof w)return{success:!1,errors:[{line:t.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(t instanceof E){let n=Le(t.actionId,t.stepId,t.functionName,!1,e);return{success:!1,errors:[{line:n,message:t.message,field:void 0}]}}else if(t instanceof D){let n=t.issues,r=[];return n.forEach(n=>{let i=n?.keys?.[0],a=(0,c.isMissing)(i)?n.path:[...n.path,i],o=Le(t.actionId,t.stepId,t.functionName,!0,e);r.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:r}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},Ie=(e,t)=>{let n=t.split(`
5
+ `),r=0,i=-1,a=0;for(let t=0;t<n.length;t++){let o=n[t],s=o.match(/^(\s*)/)?.[1]?.length||0,l=o.replace(`- `,``).trim();if(l.startsWith(`#`)||l===``||s<=i)continue;let u=(0,c.notMissing)(e[r])?`${String(e[r])}`:``;if((0,c.isMissing)(u))return a+1;if(isNaN(Number(u))){if(l.startsWith(`${u}:`)){if(r===e.length-1)return t+1;i=s,a=t,r++}}else{let e=parseInt(u,10),i=-1;for(let o=t;o<n.length;o++){let s=n[o],c=s.trim();if(c.startsWith(`-`)&&i++,i===e){r++,a=t,t--;break}else t++}}}return a+1},Le=(e,t,n,r,i)=>{let a=i.split(`
6
+ `),o=1,s=null,l=null;for(let i=0;i<a.length;i++){let u=a[i],d=u.trim();if((0,c.isMissing)(s)&&d===`- actionId: ${e}`){s=e,o=i+1;continue}if((0,c.notMissing)(s)&&(0,c.isMissing)(l)&&d===`- stepId: ${t}`){l=t,o=i+1;continue}if((0,c.notMissing)(s)&&(0,c.notMissing)(l)&&!r&&d.startsWith(`functionName: ${n}`)||(0,c.notMissing)(s)&&(0,c.notMissing)(l)&&r&&d===`parameters:`)return o=i+1,o}return o};var U=class e extends Error{errorType;context;constructor(t,n,r){super(r),this.name=`ConnectSDKError`,this.errorType=t,this.context=n,Error.captureStackTrace&&Error.captureStackTrace(this,e)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},Re=class extends U{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},W=class extends U{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},ze=class extends U{constructor(e,t){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`}},Be=class extends U{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const Ve=(e,t)=>{let n=Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t})),r=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description.replace(/\b\w/g,e=>e.toUpperCase()),label:e.label.replace(/\b\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,authentication:n,action_details:t?.includes(`action_details`)?e:void 0}));return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,authentication:n,actions:r}},He=(e,t)=>e.map(e=>Ve(e,t)),Ue=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=f.StepFunctionsFactory.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===f.StepFunctionName.MAP_FIELDS?{[f.StepFunctionName.MAP_FIELDS.toString()]:{output:{data:a.block.result},errors:a.errors,successful:a.successful}}:{};return{...a.block,steps:{...a?.block?.steps??{},...o}}},G=({category:e,connectorKey:t,connectorVersion:n,authConfigKey:r,environment:i=`production`,action:a,accountSecureId:o,projectSecureId:s,organizationId:l})=>({organizationId:l,projectSecureId:s,accountSecureId:o,connectorKey:t,connectorVersion:n,category:e,service:``,resource:``,schema:a?.schema?.key,actionType:a?.actionType??`unknown`,authenticationType:r,environment:i,actionRunId:(0,c.generateActionRunId)()}),We=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions,Ge=e=>{let t=e.action?.compositeIdentifiers,n={...e.inputs??{}};if(!t?.enabled||(0,c.isMissing)(n))return e;let r=t.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{}),i={version:t.version??f.COMPOSITE_ID_LATEST_VERSION,aliases:r};return K(n,i,e.logger),{...e,inputs:n}},K=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))Ze(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)K(e,t,n);else typeof i==`object`&&i&&K(i,t,n)}},Ke=(e,t,n,r)=>{let i=[],a=[];for(let o of e)try{let e=(0,f.decodeCompositeId)(o,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:o,compositeIdentifierConfig:n,error:e}}),a.push(o)}return{compositeIdComponents:i,nonCompositeIds:a}},qe=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},Je=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},Ye=(e,t,n,r,i)=>{n.every(Je)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},Xe=(e,t,n)=>{e instanceof f.CoreError&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},Ze=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=Ke(o,t,r,i);qe(n,t,s,a),Ye(n,t,s,c,a)}catch(e){Xe(e,t,i)}},q=`remote_`,Qe=e=>{let t=e.action?.compositeIdentifiers;if(!t?.enabled)return e;let n=`data`,r=e.outputs?.[n];if((0,c.isMissing)(r))return e;let i=Array.isArray(r)?r.map(e=>$e(e,t)):$e(r,t);return{...e,outputs:{...e.outputs??{},[n]:i}}},$e=(e,t)=>{let n=et(e,t),r=J(n);return{...e,...(0,c.isObject)(r)?r:{}}},et=(e,t)=>{let n=t.version??f.COMPOSITE_ID_LATEST_VERSION,r={};return t.fields?.forEach(t=>{let i={},a=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),a.push({key:t.name,value:e[t.name]})});let o=a.length===1?a[0]:{identifiers:a},s={version:n,aliases:Object.keys(i).length>0?i:void 0},c=(0,f.encodeCompositeId)(o,s);r[t.targetFieldKey]=c,t.remote&&(r[`${q}${t.remote}`]=e[t.remote])}),{...e,...r}},tt=e=>e===`id`||/.+_id(s)?$/.test(e),nt=e=>Array.isArray(e)&&e.every(e=>(0,c.isString)(e)&&e.length>0),rt=(e,t)=>(0,f.isCompositeId)(e)||t.startsWith(q),it=(e,t)=>{try{return(0,f.encodeCompositeId)({key:e,value:t},{version:f.COMPOSITE_ID_LATEST_VERSION})}catch{return t}},at=(e,t,n)=>{let r=t.map(t=>(0,c.isString)(t)&&t.length>0&&!(0,f.isCompositeId)(t)?it(e,t):t);n[e]=r,n[`${q}${e}`]=t},ot=(e,t,n)=>{if(rt(t,e))return;let r=(0,f.encodeCompositeId)({key:e,value:t},{version:f.COMPOSITE_ID_LATEST_VERSION});n[e]=r,n[`remote_${e}`]=t},st=(e,t,n)=>{nt(t)?at(e,t,n):(0,c.isString)(t)&&t.length>0&&ot(e,t,n)},J=e=>{if(Array.isArray(e))return e.map(e=>J(e));if(!(0,c.isObject)(e))return e;let t={...e};for(let[n,r]of Object.entries(e))((0,c.isObject)(r)||Array.isArray(r)&&r.length>0&&(0,c.isObject)(r[0]))&&(t[n]=J(r)),tt(n)&&st(n,r,t);return t},ct=(e,t)=>{let n=Number(e.inputs?.page_size),r=(0,c.notMissing)(e.inputs?.page_size)&&(0,c.isNumber)(n)&&!Number.isNaN(n)?n:e.action?.cursor?.pageSize??t;return r},lt=(e,t,n,r)=>{let i=(0,c.isMissing)(e)?void 0:e.data,a=Object.keys(n).length+1,o=(0,f.isCursorEmpty)({cursor:r,ignoreStepIndex:a});if(!(0,c.isObject)(e)||(0,c.isMissing)(i)||(i?.length??0)<=t)return{result:e,next:(0,c.notMissing)(r)&&!o?(0,f.minifyCursor)(r):null};let s=r?.remote?.[a]?.pageNumber??1,l=(s-1)*t,u=l+t,d=i.slice(l,u),p=i.length>u||!o,m=(0,f.updateCursor)({cursor:r,stepIndex:a,pageNumber:s+1});return{result:{...e,data:d},next:p?(0,f.minifyCursor)(m):null}},ut=e=>{let t=e.settings?.olap;return(0,c.isMissing)(t)?{}:{logs:t.logs?{enabled:t.logs.enabled}:void 0,advanced:t.advanced?{enabled:t.advanced.enabled,ttl:t.advanced.ttl,errorsOnly:t.advanced.errorsOnly}:void 0}},Y=async({block:e,buildStepFunction:t=f.StepFunctionsFactory.build,virtualPaginateResultFn:n=lt,encodeResultCompositeIds:r=Qe,decodeInputCompositeIds:i=Ge})=>{let a=i(e),o=await gt({block:a,buildStepFunction:t,virtualPaginateResultFn:n});return r(o)},dt=(e,t)=>e.condition?!(0,h.safeEvaluate)(e.condition,t):!1,ft=(e,t,n)=>{let r=e.stepFunction,i=f.StepFunctionsRegistry[e.stepFunction.functionName]?.[`v${e.stepFunction.version??1}`],a=(0,c.notMissing)(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return t.action?.cursor.enabled&&a?{...r.params??{},cursor:{token:t.nextCursor?.remote?.[n]?.providerPageCursor,position:t.nextCursor?.remote?.[n]?.position}}:r.params??{}},pt=(e,t,n,r,i)=>{let a=X({block:e,stepId:t,successful:!1,functionOutput:n}),o=r.ignoreError??!1;return o||(i.hasFatalError=!0,i.errorStatusCode??=n.output?.statusCode??500),a},mt=async(e,t,n,r,i,a)=>{let o=n[e],s=o.stepFunction,c=a.buildStepFunction({functionName:s.functionName,version:s.version,validateSchemas:!0}).fn;if(dt(o,r))return X({block:r,stepId:e,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`});if(i.hasFatalError)return X({block:r,stepId:e,successful:!1,skipped:!0,message:`Step skipped due to previous error.`});let l=ft(o,r,t),u=await c({block:r,params:l});if(u.successful===!1)return pt(r,e,u,o,i);let d=r.action?.cursor.enabled?(0,f.updateCursor)({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return X({block:{...u.block,nextCursor:d},stepId:e,functionOutput:u})},ht=(e,t,n,r,i)=>{let a=!n.hasFatalError,o=a?e.action?.responses.success.statusCode??200:n.errorStatusCode??500,s=(0,c.notMissing)(i)&&(0,c.isObject)(i.result)?{next:i.next,...i.result}:r;return{...t,outputs:s,response:{successful:a,statusCode:o,message:a?void 0:e.action?.responses?.errors?.[o]?.description??p.HttpErrorMessages?.[o]??`Error while processing the request`}}},gt=async({block:e,buildStepFunction:t=f.StepFunctionsFactory.build,virtualPaginateResultFn:n=lt})=>{let r=e.action?.steps||{},i={...e},a=Object.keys(r),o=ct(e,O),s={hasFatalError:!1,errorStatusCode:null},c={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of a.entries()){let n=new Date;i=await mt(t,e,r,i,s,c),vt({block:i,stepId:t,startTime:n,endTime:new Date})}let l=e.action?.result?_t(e.action.result,i):void 0,u=e.action?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return ht(e,i,s,l,u)},_t=(e,t)=>(0,c.isObject)(e)?(0,h.safeEvaluateRecord)(e,t):(0,h.safeEvaluate)(e,t),X=({block:e,stepId:t,successful:n,functionOutput:r,skipped:i,message:a})=>({...e,steps:{...e.steps,[t]:{successful:n??r?.successful??!1,errors:r?.errors,output:r?.output,skipped:i,message:a}}}),vt=({block:e,stepId:t,startTime:n,endTime:r})=>{let i=e.olapClient;if((0,c.isMissing)(i?.recordStep))return;let a=ut(e),o=e.context,s={actionRunId:o.actionRunId??`unknown`,stepId:t,status:e.steps?.[t]?.successful?`successful`:`failed`,skipped:e.steps?.[t]?.skipped,message:e.steps?.[t]?.message,outputs:e.steps?.[t]?.output,errors:e.steps?.[t]?.errors,startTime:n,endTime:r};i.recordStep(s,a)},Z=async e=>{let{pathParams:t={},queryParams:n={},body:r={},headers:i={},parseConnector:a=F,parseActionInputsFn:o=R,createBlockContextFn:s=G,createBlockFn:l=g,runStepActionFn:u=Y,getActionFromUrlFn:d=_,getActionForRefreshAuthenticationFn:f=B,getTestActionsFn:p=We,mode:m,account:v,connector:y,getHttpClient:b,getOlapClient:te,settings:x,logger:S,category:ne,...C}=e,w=v.authConfigKey,T=v.environment??`production`,E=v.secureId,D=v.projectSecureId,O=v.organizationId,re=v.credentials,k=s({category:ne??`action`,connectorKey:v.providerKey,connectorVersion:v.providerVersion,authConfigKey:w,environment:T,accountSecureId:E,projectSecureId:D,organizationId:O}),A=new Date,j;try{j=(0,c.isString)(y)?a(y):y}catch{throw new Re(k,`Error while parsing connector`)}let M={connector:j,context:k,credentials:re,settings:x,logger:S,getHttpClient:b,getOlapClient:te};if(m===`action_id`){let{actionId:e}=C,a=ee(j,e);if((0,c.isMissing)(a))throw new W(k,`No matching action found`);let s=await Q({action:a,blockContext:k,queryParams:n,pathParams:t,body:r,headers:i,parseActionInputsFn:o,createBlockFn:l,createBlockParams:M,runStepActionFn:u});return s.statistics={startTime:A,endTime:new Date},$({block:s}),s}else if(m===`test_actions`){let e=p(j,w,T);if((0,c.isMissing)(e)||e.length===0){let e=await yt(l,M);return e.statistics={startTime:A,endTime:new Date},$({block:e}),e}k.actionType=`test`;for(let t of e){let e=await l({...M,inputs:void 0,action:t.action,nextCursor:void 0}),n=(0,c.notMissing)(t.condition)?(0,h.evaluate)(t.condition,e):!0;if(!n)continue;let r=await u({block:e});if(((0,c.isMissing)(r?.response?.successful)||!r.response.successful)&&t.required){S?.error({code:`TestActionFailed`,message:`Test action "${t.action.id}" failed with error: ${r?.response?.message}`});let e=await bt(l,M);return $({block:e}),e}}let t=await yt(l,M);return t.statistics={startTime:A,endTime:new Date},$({block:t}),t}else if(m===`refresh_authentication`){let e=f(j,w,T);if((0,c.isMissing)(e))throw new W(k,`No matching action found`);let t=await Q({action:e.action,blockContext:k,queryParams:n,pathParams:e.params,body:r,headers:i,parseActionInputsFn:o,createBlockFn:l,createBlockParams:M,runStepActionFn:u});return t.statistics={startTime:A,endTime:new Date},$({block:t}),t}else if(m===`path`){let{path:e,method:t}=C,a=d(j,e,t);if((0,c.isMissing)(a))throw new W(k,`No matching action found`);let s=await Q({action:a.action,blockContext:k,queryParams:n,pathParams:a.params,body:r,headers:i,parseActionInputsFn:o,createBlockFn:l,createBlockParams:M,runStepActionFn:u});return s.statistics={startTime:A,endTime:new Date},$({block:s}),s}else{let e=await bt(l,M);return e.statistics={startTime:A,endTime:new Date},$({block:e}),e}},Q=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=xt(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch{throw new ze(n,`Error while parsing action inputs`)}let p=await c({...l,inputs:f,action:t,nextCursor:d});return await u({block:p})},yt=async(e,t)=>{let n=await e({...t,inputs:void 0,action:void 0,nextCursor:void 0});return{...n,response:{successful:!0,statusCode:200}}},bt=async(e,t)=>{let n=await e({...t,inputs:void 0,action:void 0,nextCursor:void 0});return{...n,response:{successful:!1,statusCode:500}}},xt=(e,t)=>{let n=e?.next,r=(0,c.notMissing)(n)&&t.actionType===`list`?(0,f.expandCursor)(n):void 0;if(r===null)throw new Be(t,`Invalid cursor.`);return r},$=({block:e})=>{let t=e.olapClient;if((0,c.isMissing)(t?.recordAction))return;let n=ut(e),r=e.context,i={actionRunId:e.context.actionRunId||`unknown`,actionId:e.action?.id||`unknown`,connectorKey:r.connectorKey,connectorVersion:r.connectorVersion,actionType:r.actionType,category:r.category,organizationId:r.organizationId||`unknown`,projectSecureId:r.projectSecureId,accountSecureId:r.accountSecureId,originOwnerId:r.originOwnerId,originOwnerName:r.originOwnerName,httpMethod:e.action?.entrypointHttpMethod,url:e.action?.entrypointUrl,sourceId:r.sourceId,sourceType:r.sourceType,sourceValue:r.sourceValue,status:e.response?.successful?`success`:`error`,message:e.response?.message,outputs:e.outputs,startTime:e.statistics?.startTime,endTime:e.statistics?.endTime};t.recordAction(i,n)},St=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=F,parseActionInputsFn:d=R,createBlockContextFn:f=G,createBlockFn:p=g,runStepActionFn:m=Y})=>Z({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u,parseActionInputsFn:d,createBlockContextFn:f,createBlockFn:p,runStepActionFn:m}),Ct=`stackone://internal//`,wt=`${Ct}refresh_token`,Tt=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,logger:c,getHttpClient:l,parseConnector:u=F,getActionFromUrlFn:d=_,getActionForRefreshAuthenticationFn:f=B,parseActionInputsFn:p=R,createBlockContextFn:m=G,createBlockFn:h=g,runStepActionFn:v=Y})=>{let y=Et(r),b=y?await Z({mode:`refresh_authentication`,account:e,connector:t,getActionForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:v}):await Z({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,getActionFromUrlFn:d,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:v});return b},Et=e=>e===wt,Dt=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=F,getTestActionsFn:a=We,createBlockContextFn:o=G,createBlockFn:s=g,runStepActionFn:c=Y})=>{let l=await Z({mode:`test_actions`,account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i,getTestActionsFn:a,createBlockContextFn:o,createBlockFn:s,runStepActionFn:c});return l?.response?.successful??!1};exports.ConnectSDKError=U,exports.applyReleaseStageToConnector=Ne,exports.createBlock=g,exports.executeStepFunction=Ue,exports.getActionFromUrl=_,exports.getActionsMeta=Ve,exports.getActionsMetaFromConnectors=He,exports.getRefreshTokenExpiresIn=Me,exports.getTokenExpiresIn=je,exports.isConnectorReleased=V,exports.loadConnector=te,exports.parseActionInputs=R,exports.parseYamlConnector=F,exports.runAction=Z,exports.runConnectorActionById=St,exports.runConnectorActionByPath=Tt,exports.runStepAction=Y,exports.runTestActions=Dt,exports.supportsRefreshAuthentication=Ae,exports.validateYamlConnector=Fe;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import{generateActionRunId as e,isMissing as t,isNumber as n,isObject as r,isString as i,notMissing as a,z as o,zStrictObject as s}from"@stackone/utils";import{readFileSync as c}from"fs";import{dirname as l,join as u,resolve as d}from"path";import{match as f}from"path-to-regexp";import{AUTHENTICATION_SCHEMA as p,COMPOSITE_ID_LATEST_VERSION as m,CoreError as h,ReleaseStages as g,StepFunctionName as _,StepFunctionsFactory as v,StepFunctionsRegistry as y,decodeCompositeId as ee,encodeCompositeId as b,expandCursor as x,isCompositeId as S,isCursorEmpty as C,minifyCursor as w,updateCursor as T}from"@stackone/core";import{HttpErrorMessages as te,isSuccessStatusCode as ne}from"@stackone/transport";import{parse as re}from"yaml";import{evaluate as ie,safeEvaluate as E,safeEvaluateRecord as D}from"@stackone/expressions";const O=async({connector:e,inputs:n,context:r,operation:i,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u})=>{if(t(l))throw Error(`getHttpClient function is required`);let d=await l(),f=u?await u():void 0;return{connector:e,inputs:n,fieldConfigs:[],context:r,operation:i,credentials:a,nextCursor:o,httpClient:d,olapClient:f,settings:s,logger:c}},k=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=c(e,`utf8`);if(!t.includes(`:`)||!t.includes(`$ref:`))return t;let n=t.split(`
2
- `),r=A(n,l(e));return r.join(`
3
- `)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},A=(e,t)=>{let n=[];for(let r of e)if(j(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=ae(i,t),o=a.map(t=>` `.repeat(e)+t);n.push(...o)}else n.push(r);return n},j=e=>e.includes(`$ref:`),ae=(e,t)=>{let n=d(u(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{let e=c(n,`utf8`);return e.split(`
4
- `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}},M=(e,t,n)=>{let r=n.toUpperCase();if(!e.operations)return;let i=Object.values(e.operations).filter(e=>a(e.endpoint)).map(e=>({operationId:e.id,endpoint:e.endpoint})),o=oe(t,r,i);if(o)return{operation:e.operations?.[o.operationId],params:o.params}},N=e=>{let t=e.startsWith(`/`)?e.slice(1):e,n=t.endsWith(`/`)?t.slice(0,-1):t;return n},oe=(e,t,n)=>{let r=N(e);for(let e of n)if(e.endpoint?.startsWith(t)){let n=e.endpoint.replace(`${t} `,``).trim(),i=f(N(n)),a=i(N(r));if(a!==!1)return{operationId:e.operationId,path:e.endpoint,params:a.params}}},P=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,se=(e,t)=>{let n=`${e.key}_`,r=t.startsWith(n)?t:`${n}${t}`;return e.operations?.[r]};var F=class e extends Error{errorType;constructor(t,n){super(n),this.name=`InternalConnectSDKError`,this.errorType=t,Error.captureStackTrace&&Error.captureStackTrace(this,e)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ce=class extends F{line;constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},le=class extends F{issues;constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},ue=class extends F{operationId;stepId;functionName;functionVersion;constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the operation '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.operationId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},de=class extends F{operationId;stepId;functionName;functionVersion;issues;constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the operation '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.operationId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}};const fe=25,pe=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The operation was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token operation was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown operation type: ${e}`)}},me=()=>{let e={400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}};return e},he={key:o.string(),label:o.string(),required:o.boolean().optional().default(!1),secret:o.boolean().optional().default(!1),readOnly:o.boolean().optional().default(!1),placeholder:o.string().optional(),description:o.string().optional(),tooltip:o.string().optional()},ge=o.discriminatedUnion(`type`,[s({...he,type:o.enum([`text`,`password`])}),s({...he,type:o.literal(`select`),options:s({value:o.string(),label:o.string()}).array()})]),_e=s({targetFieldKey:o.string(),alias:o.string().optional(),expression:o.string().optional(),values:o.unknown().optional(),type:o.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:o.boolean().default(!1),custom:o.boolean().default(!1),hidden:o.boolean().default(!1),enumMapper:s({matcher:o.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or(s({matchExpression:o.string(),value:o.string()}).array())}).optional(),properties:o.lazy(()=>_e).array().optional()}),I=s({name:o.string(),type:o.enum([`string`,`number`,`boolean`,`datetime_string`,`object`]),required:o.boolean(),description:o.string(),array:o.boolean().optional().default(!1),in:o.enum([`body`,`query`,`path`,`headers`]),properties:o.lazy(()=>I.omit({in:!0})).array().optional()}),L=s({operationId:o.string(),categories:o.string().array(),operationType:o.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`unknown`]),schema:o.string().optional(),schemaType:o.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:o.string().optional(),entrypointHttpMethod:o.string().optional(),label:o.string(),description:o.string(),tags:o.string().array().optional(),releaseStage:o.enum(g).optional(),context:o.string().optional(),responses:s({statusCode:o.number(),description:o.string()}).array().optional(),inputs:I.array().optional(),cursor:s({enabled:o.boolean(),pageSize:o.number()}).optional(),compositeIdentifiers:s({enabled:o.boolean(),version:o.number().optional(),fields:s({targetFieldKey:o.string(),remote:o.string().optional(),components:o.string().array()}).array().optional()}).optional(),scheduledJobs:s({enabled:o.boolean(),type:o.enum([`data_sync`]),schedule:o.string(),description:o.string(),requestParams:s({fields:o.string().array().optional(),expand:o.string().array().optional(),filter:o.record(o.string(),o.string()).optional()}).optional(),syncFilter:s({name:o.enum([`updated_after`,`created_after`]),initialLoopbackPeriod:o.string(),incrementalLoopbackPeriod:o.string()}).optional()}).array().optional(),fieldConfigs:_e.array().optional(),steps:s({stepId:o.string(),description:o.string(),stepFunction:s({functionName:o.string(),version:o.string().optional(),parameters:o.record(o.string(),o.unknown())}),condition:o.string().optional(),ignoreError:o.boolean().optional()}).array(),result:o.string().or(o.record(o.string(),o.unknown())).optional()}),ve=s({schedule:o.string().optional(),operation:L.extend({operationType:o.literal(`refresh_token`)})}),ye=s({mainRatelimit:o.number(),subPools:o.array(s({subPoolKey:o.string(),urlPattern:o.string(),rateLimit:o.number()})).optional(),mappedRateLimitErrors:o.array(s({errorStatus:o.number(),errorMessage:o.string(),errorMessagePath:o.string().optional(),retryAfterPath:o.string().optional(),retryAfterUnit:o.union([o.literal(`seconds`),o.literal(`milliseconds`),o.literal(`date`)]).optional(),retryAfterValue:o.number().optional()})).optional()}),be=s({mainMaxConcurrency:o.number(),subPools:o.array(s({subPoolKey:o.string(),urlPattern:o.string(),maxConcurrency:o.number()})).optional()}),xe=s({StackOne:o.string(),info:s({title:o.string(),version:o.string(),key:o.string(),assets:s({icon:o.string()}),description:o.string()}),context:o.string().optional(),baseUrl:o.string(),authentication:o.record(o.string(),s({type:o.string(),label:o.string(),authorization:p,environments:s({key:o.string(),name:o.string()}).array(),support:s({link:o.string(),description:o.string().optional()}),configFields:ge.array().optional(),setupFields:ge.array().optional(),refreshAuthentication:ve.optional(),testOperations:s({operation:o.string().or(L),condition:o.string().optional(),required:o.boolean().default(!0)}).array().optional()})).array().optional(),operations:L.array().optional(),rateLimit:ye.optional(),concurrency:be.optional(),releaseStage:o.enum(g).optional()}).strict();function R(e){try{let t=re(e),n=ze(xe,t),r={title:n.info.title,version:n.info.version,key:n.info.key,assets:n.info.assets,description:n.info.description,context:n.context,rateLimit:n.rateLimit,concurrency:n.concurrency,releaseStage:n.releaseStage},i=Te(n),o={baseUrl:n.baseUrl,authentication:Se(i)},s=je(n,o);return r.operations=s,Ce(n.info.key,i,s,o),r.authentication=i,a(s)&&(r.categories=we(Object.values(s))),r}catch(e){if(e instanceof F)throw e;let t=e.message,n=t.match(/at line (\d+)/),r=n?parseInt(n[1],10):1;throw new ce(r,t)}}const Se=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testOperations:s,...c}=r;t[n]=Se(c)}else t[n]=r;return t},Ce=(e,t,n,r)=>{if(!(!t||!n))for(let i of Object.values(t))for(let t of Object.values(i)){let i=t.testOperations;t.testOperations=i?.map(t=>{if(a(t.operation))if(typeof t.operation==`string`){let r=P(e,t.operation),i=Object.values(n).find(e=>e.id===r);if(i)return{...t,operation:i}}else{let n=P(e,t.operation.operationId),i=z(n,t.operation,r);return{...t,operation:i}}return t})}},we=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},Te=e=>{let t={};for(let n of e.authentication??[]){let[r]=Object.keys(n),i=n[r].environments.reduce((t,i)=>{let{key:o,name:s}=i,{environments:c,refreshAuthentication:l,testOperations:u,...d}=n[r],f=a(l)?{schedule:l.schedule,operation:z(P(e.info.key,l.operation.operationId),l.operation)}:void 0;return t[o]={...d,refreshAuthentication:f,envKey:o,envName:s,testOperations:u},t},{});t[r]=i}return t},Ee=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,De=e=>e.operationType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,Oe=e=>{if(e.operationType!==`refresh_token`)return e.entrypointHttpMethod??`get`},ke=e=>{if(!(e.operationType===`refresh_token`||t(e.schema)))return e.operationType===`list`?`/${e.schema}`:`/${e.schema}/:id`},Ae=e=>{let t={success:pe(e.operationType),errors:me()},n=e.responses?.reduce((e,t)=>{let n=ne(t.statusCode);return n?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e},t);return n??t},je=(e,t)=>{let n=e.operations?.reduce((n,r)=>{let i=Ee(r),a=De(r),o=i??a,s=P(e.info.key,r.operationId);return n[s]=z(s,r,t,o),n},{});return n},z=(e,t,n,r)=>{let i=ke(t),a=Ae(t),o=Fe(t),s=t.inputs||[];o.enabled&&(s?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),s?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1}));let c=Oe(t);return{id:e,categories:t.categories,label:t.label,description:t.description,operationType:t.operationType,schemaType:t.schemaType??`native`,entrypointUrl:t.entrypointUrl??i,entrypointHttpMethod:c,endpoint:r,tags:t.tags,releaseStage:t.releaseStage,context:t.context,responses:a,cursor:o,compositeIdentifiers:Ie(t),scheduledJobs:Le(t),inputs:s,steps:t.steps.reduce((e,r)=>{let{customErrors:i,...a}=r.stepFunction.parameters??{},o={id:r.stepId,description:r.description,condition:r.condition,ignoreError:r.ignoreError,stepFunction:{functionName:r.stepFunction.functionName,version:r.stepFunction.version,params:{...Re({stepFunctionName:r.stepFunction.functionName,baseRequestParams:n,customErrors:i}),...r.stepFunction.functionName===`map_fields`||r.stepFunction.functionName===`typecast`?{fields:a.fields??t.fieldConfigs}:{},...a}}};return Me(t.operationId,o),e[r.stepId]=o,e},{}),result:t.result}},Me=(e,t)=>{let n=t.stepFunction.version??`1`,r=y[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new ue(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&Be(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},B=(e,t)=>{if(!e.inputs)return{};let n=Ne(e.inputs),r=o.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},Ne=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=Pe(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=o.object(t))}return n},Pe=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=o.string();break;case`number`:t=o.number();break;case`boolean`:t=o.boolean();break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=Pe(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=o.object(n)}else t=o.record(o.string(),o.unknown());break;default:t=o.unknown()}return e.array&&(t=o.array(t)),t},Fe=e=>{let t=e.operationType===`list`,n=e.cursor??{enabled:t,pageSize:fe};return{enabled:n.enabled&&t,pageSize:n.pageSize}},Ie=e=>{if(e.operationType===`refresh_token`)return{enabled:!1};if(t(e.compositeIdentifiers)){let t=e.fieldConfigs?.find(e=>e.targetFieldKey===`id`),n=a(t)?[{targetFieldKey:t.targetFieldKey,remote:`id`,components:[{name:t.targetFieldKey,alias:t.alias}]}]:void 0;return{enabled:!0,version:m,fields:n}}let n=[];for(let t of e.compositeIdentifiers?.fields??[]){let r=t.components.map(t=>{let n=e.fieldConfigs?.find(e=>e.targetFieldKey===t);return{name:t,alias:n?.alias}});n.push({targetFieldKey:t.targetFieldKey,remote:t.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:n.length>0?n:void 0}},Le=e=>{if(!t(e.scheduledJobs))return e.scheduledJobs},Re=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`){let e=[{receivedStatus:500,targetStatus:502}],r=n&&Array.isArray(n)?n:[],i=[...r,...e];return{...t,customErrors:i}}else return{}},ze=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;{let e=n.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]}));throw new le(e,`Invalid connector schema`)}},Be=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;{let e=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]}));throw new de(n,r,i,a,e)}},V=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.authorization.type!==`oauth2`)return;let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.operation;if(a(r))return{operation:r,params:{}}},Ve=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.authorization.type!==`oauth2`)return!1;let r=V(e,t,n);return a(r)},He=(e,t,n)=>{let r=e.authentication?.[t]?.[n]?.authorization;if(r?.type===`oauth2`)return r?.tokenExpiresIn},Ue=(e,t,n)=>{let r=e.authentication?.[t]?.[n]?.authorization;if(r?.type===`oauth2`)return r?.tokenRefreshExpiresIn},We=(e,t=[])=>qe(t,e.releaseStage),Ge=(e,t=[])=>{if(!We(e,t))return;let n={};if(e.operations)for(let[r,i]of Object.entries(e.operations))qe(t,i.releaseStage)&&(n[r]=i);return{...e,operations:n}},Ke=e=>e??`ga`,qe=(e=[],t)=>{let n=Ke(t);return e.includes(n)},Je=e=>{try{let t=R(e);return{success:!0,connector:t}}catch(n){if(n instanceof le){let r=n.issues,i=[];return r.forEach(n=>{let r=n?.keys?.[0],a=t(r)?n.path:[...n.path,r],o=Ye(a,e);i.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(n instanceof ce)return{success:!1,errors:[{line:n.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(n instanceof ue){let t=Xe(n.operationId,n.stepId,n.functionName,!1,e);return{success:!1,errors:[{line:t,message:n.message,field:void 0}]}}else if(n instanceof de){let r=n.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=t(a)?r.path:[...r.path,a],s=Xe(n.operationId,n.stepId,n.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},Ye=(e,n)=>{let r=n.split(`
5
- `),i=0,o=-1,s=0;for(let n=0;n<r.length;n++){let c=r[n],l=c.match(/^(\s*)/)?.[1]?.length||0,u=c.replace(`- `,``).trim();if(u.startsWith(`#`)||u===``||l<=o)continue;let d=a(e[i])?`${String(e[i])}`:``;if(t(d))return s+1;if(isNaN(Number(d))){if(u.startsWith(`${d}:`)){if(i===e.length-1)return n+1;o=l,s=n,i++}}else{let e=parseInt(d,10),t=-1;for(let a=n;a<r.length;a++){let o=r[a],c=o.trim();if(c.startsWith(`-`)&&t++,t===e){i++,s=n,n--;break}else n++}}}return s+1},Xe=(e,n,r,i,o)=>{let s=o.split(`
6
- `),c=1,l=null,u=null;for(let o=0;o<s.length;o++){let d=s[o],f=d.trim();if(t(l)&&f===`- operationId: ${e}`){l=e,c=o+1;continue}if(a(l)&&t(u)&&f===`- stepId: ${n}`){u=n,c=o+1;continue}if(a(l)&&a(u)&&!i&&f.startsWith(`functionName: ${r}`)||a(l)&&a(u)&&i&&f===`parameters:`)return c=o+1,c}return c};var H=class e extends Error{errorType;context;constructor(t,n,r){super(r),this.name=`ConnectSDKError`,this.errorType=t,this.context=n,Error.captureStackTrace&&Error.captureStackTrace(this,e)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},Ze=class extends H{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},U=class extends H{constructor(e,t){super(`MISSING_OPERATION_ERROR`,e,t),this.name=`MissingOperationError`}},Qe=class extends H{constructor(e,t){super(`INVALID_OPERATION_INPUTS_ERROR`,e,t),this.name=`InvalidOperationInputsError`}},$e=class extends H{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const et=(e,t)=>{let n=Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t})),r=Object.values(e?.operations??{}).map(e=>({id:e.id,description:e.description.replace(/\b\w/g,e=>e.toUpperCase()),label:e.label.replace(/\b\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,authentication:n,operation_details:t?.includes(`operation_details`)?e:void 0}));return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,authentication:n,actions:r}},tt=(e,t)=>e.map(e=>et(e,t)),nt=`stackone://internal//`,rt=`${nt}refresh_token`,it=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=v.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===_.MAP_FIELDS?{[_.MAP_FIELDS.toString()]:{output:{data:a.block.result},errors:a.errors,successful:a.successful}}:{};return{...a.block,steps:{...a?.block?.steps??{},...o}}},W=({category:t,connectorKey:n,connectorVersion:r,authConfigKey:i,environment:a=`production`,operation:o,accountSecureId:s,projectSecureId:c,organizationId:l})=>({organizationId:l,projectSecureId:c,accountSecureId:s,connectorKey:n,connectorVersion:r,category:t,service:``,resource:``,schema:o?.schema?.key,operationType:o?.operationType??`unknown`,authenticationType:i,environment:a,actionRunId:e()}),at=(e,t,n)=>e.authentication?.[t]?.[n]?.testOperations,ot=e=>{let n=e.operation?.compositeIdentifiers,r={...e.inputs??{}};if(!n?.enabled||t(r))return e;let i=n.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{}),a={version:n.version??m,aliases:i};return G(r,a,e.logger),{...e,inputs:r}},G=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))ft(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)G(e,t,n);else typeof i==`object`&&i&&G(i,t,n)}},st=(e,t,n,r)=>{let i=[],a=[];for(let o of e)try{let e=ee(o,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:o,compositeIdentifierConfig:n,error:e}}),a.push(o)}return{compositeIdComponents:i,nonCompositeIds:a}},ct=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},lt=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},ut=(e,t,n,r,i)=>{n.every(lt)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},dt=(e,t,n)=>{e instanceof h&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},ft=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=st(o,t,r,i);ct(n,t,s,a),ut(n,t,s,c,a)}catch(e){dt(e,t,i)}},K=`remote_`,pt=e=>{let n=e.operation?.compositeIdentifiers;if(!n?.enabled)return e;let r=`data`,i=e.outputs?.[r];if(t(i))return e;let a=Array.isArray(i)?i.map(e=>mt(e,n)):mt(i,n);return{...e,outputs:{...e.outputs??{},[r]:a}}},mt=(e,t)=>{let n=ht(e,t),i=q(n);return{...e,...r(i)?i:{}}},ht=(e,t)=>{let n=t.version??m,r={};return t.fields?.forEach(t=>{let i={},a=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),a.push({key:t.name,value:e[t.name]})});let o=a.length===1?a[0]:{identifiers:a},s={version:n,aliases:Object.keys(i).length>0?i:void 0},c=b(o,s);r[t.targetFieldKey]=c,t.remote&&(r[`${K}${t.remote}`]=e[t.remote])}),{...e,...r}},gt=e=>e===`id`||/.+_id(s)?$/.test(e),_t=e=>Array.isArray(e)&&e.every(e=>i(e)&&e.length>0),vt=(e,t)=>S(e)||t.startsWith(K),yt=(e,t)=>{try{return b({key:e,value:t},{version:m})}catch{return t}},bt=(e,t,n)=>{let r=t.map(t=>i(t)&&t.length>0&&!S(t)?yt(e,t):t);n[e]=r,n[`${K}${e}`]=t},xt=(e,t,n)=>{if(vt(t,e))return;let r=b({key:e,value:t},{version:m});n[e]=r,n[`remote_${e}`]=t},St=(e,t,n)=>{_t(t)?bt(e,t,n):i(t)&&t.length>0&&xt(e,t,n)},q=e=>{if(Array.isArray(e))return e.map(e=>q(e));if(!r(e))return e;let t={...e};for(let[n,i]of Object.entries(e))(r(i)||Array.isArray(i)&&i.length>0&&r(i[0]))&&(t[n]=q(i)),gt(n)&&St(n,i,t);return t},Ct=(e,t)=>{let r=Number(e.inputs?.page_size),i=a(e.inputs?.page_size)&&n(r)&&!Number.isNaN(r)?r:e.operation?.cursor?.pageSize??t;return i},J=(e,n,i,o)=>{let s=t(e)?void 0:e.data,c=Object.keys(i).length+1,l=C({cursor:o,ignoreStepIndex:c});if(!r(e)||t(s)||(s?.length??0)<=n)return{result:e,next:a(o)&&!l?w(o):null};let u=o?.remote?.[c]?.pageNumber??1,d=(u-1)*n,f=d+n,p=s.slice(d,f),m=s.length>f||!l,h=T({cursor:o,stepIndex:c,pageNumber:u+1});return{result:{...e,data:p},next:m?w(h):null}},wt=e=>{let n=e.settings?.olap;return t(n)?{}:{logs:n.logs?{enabled:n.logs.enabled}:void 0,advanced:n.advanced?{enabled:n.advanced.enabled,ttl:n.advanced.ttl,errorsOnly:n.advanced.errorsOnly}:void 0}},Y=async({block:e,buildStepFunction:t=v.build,virtualPaginateResultFn:n=J,encodeResultCompositeIds:r=pt,decodeInputCompositeIds:i=ot})=>{let a=i(e),o=await At({block:a,buildStepFunction:t,virtualPaginateResultFn:n});return r(o)},Tt=(e,t)=>e.condition?!E(e.condition,t):!1,Et=(e,t,n)=>{let r=e.stepFunction,i=y[e.stepFunction.functionName]?.[`v${e.stepFunction.version??1}`],o=a(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return t.operation?.cursor.enabled&&o?{...r.params??{},cursor:{token:t.nextCursor?.remote?.[n]?.providerPageCursor,position:t.nextCursor?.remote?.[n]?.position}}:r.params??{}},Dt=(e,t,n,r,i)=>{let a=X({block:e,stepId:t,successful:!1,functionOutput:n}),o=r.ignoreError??!1;return o||(i.hasFatalError=!0,i.errorStatusCode??=n.output?.statusCode??500),a},Ot=async(e,t,n,r,i,a)=>{let o=n[e],s=o.stepFunction,c=a.buildStepFunction({functionName:s.functionName,version:s.version,validateSchemas:!0}).fn;if(Tt(o,r))return X({block:r,stepId:e,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`});if(i.hasFatalError)return X({block:r,stepId:e,successful:!1,skipped:!0,message:`Step skipped due to previous error.`});let l=Et(o,r,t),u=await c({block:r,params:l});if(u.successful===!1)return Dt(r,e,u,o,i);let d=r.operation?.cursor.enabled?T({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return X({block:{...u.block,nextCursor:d},stepId:e,functionOutput:u})},kt=(e,t,n,i,o)=>{let s=!n.hasFatalError,c=s?e.operation?.responses.success.statusCode??200:n.errorStatusCode??500,l=a(o)&&r(o.result)?{next:o.next,...o.result}:i;return{...t,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.operation?.responses?.errors?.[c]?.description??te?.[c]??`Error while processing the request`}}},At=async({block:e,buildStepFunction:t=v.build,virtualPaginateResultFn:n=J})=>{let r=e.operation?.steps||{},i={...e},a=Object.keys(r),o=Ct(e,fe),s={hasFatalError:!1,errorStatusCode:null},c={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of a.entries()){let n=new Date;i=await Ot(t,e,r,i,s,c),Mt({block:i,stepId:t,startTime:n,endTime:new Date})}let l=e.operation?.result?jt(e.operation.result,i):void 0,u=e.operation?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return kt(e,i,s,l,u)},jt=(e,t)=>r(e)?D(e,t):E(e,t),X=({block:e,stepId:t,successful:n,functionOutput:r,skipped:i,message:a})=>({...e,steps:{...e.steps,[t]:{successful:n??r?.successful??!1,errors:r?.errors,output:r?.output,skipped:i,message:a}}}),Mt=({block:e,stepId:n,startTime:r,endTime:i})=>{let a=e.olapClient;if(t(a?.recordStep))return;let o=wt(e),s=e.context,c={actionRunId:s.actionRunId??`unknown`,stepId:n,status:e.steps?.[n]?.successful?`successful`:`failed`,skipped:e.steps?.[n]?.skipped,message:e.steps?.[n]?.message,outputs:e.steps?.[n]?.output,errors:e.steps?.[n]?.errors,startTime:r,endTime:i};a.recordStep(c,o)},Z=async e=>{let{pathParams:n={},queryParams:r={},body:o={},headers:s={},parseConnector:c=R,parseOperationInputsFn:l=B,createBlockContextFn:u=W,createBlockFn:d=O,runStepOperationFn:f=Y,getOperationFromUrlFn:p=M,getOperationForRefreshAuthenticationFn:m=V,getTestOperationsFn:h=at,mode:g,account:_,connector:v,getHttpClient:y,getOlapClient:ee,settings:b,logger:x,category:S,...C}=e,w=_.authConfigKey,T=_.environment??`production`,te=_.secureId,ne=_.projectSecureId,re=_.organizationId,E=_.credentials,D=u({category:S??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,authConfigKey:w,environment:T,accountSecureId:te,projectSecureId:ne,organizationId:re}),k=new Date,A;try{A=i(v)?c(v):v}catch{throw new Ze(D,`Error while parsing connector`)}let j={connector:A,context:D,credentials:E,settings:b,logger:x,getHttpClient:y,getOlapClient:ee};if(g===`operation_id`){let{operationId:e}=C,i=se(A,e);if(t(i))throw new U(D,`No matching operation found`);let a=await Q({operation:i,blockContext:D,queryParams:r,pathParams:n,body:o,headers:s,parseOperationInputsFn:l,createBlockFn:d,createBlockParams:j,runStepOperationFn:f});return a.statistics={startTime:k,endTime:new Date},$({block:a}),a}else if(g===`test_operations`){let e=h(A,w,T);if(t(e)||e.length===0){let e=await Nt(d,j);return e.statistics={startTime:k,endTime:new Date},$({block:e}),e}D.operationType=`test`;for(let n of e){let e=await d({...j,inputs:void 0,operation:n.operation,nextCursor:void 0}),r=a(n.condition)?ie(n.condition,e):!0;if(!r)continue;let i=await f({block:e});if((t(i?.response?.successful)||!i.response.successful)&&n.required){x?.error({code:`TestOperationFailed`,message:`Test operation "${n.operation.id}" failed with error: ${i?.response?.message}`});let e=await Pt(d,j);return $({block:e}),e}}let n=await Nt(d,j);return n.statistics={startTime:k,endTime:new Date},$({block:n}),n}else if(g===`refresh_authentication`){let e=m(A,w,T);if(t(e))throw new U(D,`No matching operation found`);let n=await Q({operation:e.operation,blockContext:D,queryParams:r,pathParams:e.params,body:o,headers:s,parseOperationInputsFn:l,createBlockFn:d,createBlockParams:j,runStepOperationFn:f});return n.statistics={startTime:k,endTime:new Date},$({block:n}),n}else if(g===`path`){let{path:e,method:n}=C,i=p(A,e,n);if(t(i))throw new U(D,`No matching operation found`);let a=await Q({operation:i.operation,blockContext:D,queryParams:r,pathParams:i.params,body:o,headers:s,parseOperationInputsFn:l,createBlockFn:d,createBlockParams:j,runStepOperationFn:f});return a.statistics={startTime:k,endTime:new Date},$({block:a}),a}else{let e=await Pt(d,j);return e.statistics={startTime:k,endTime:new Date},$({block:e}),e}},Q=async e=>{let{operation:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseOperationInputsFn:s,createBlockFn:c,createBlockParams:l,runStepOperationFn:u}=e;n.operationType=t.operationType,n.schema=t.schema?.key;let d=Ft(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch{throw new Qe(n,`Error while parsing operation inputs`)}let p=await c({...l,inputs:f,operation:t,nextCursor:d});return await u({block:p})},Nt=async(e,t)=>{let n=await e({...t,inputs:void 0,operation:void 0,nextCursor:void 0});return{...n,response:{successful:!0,statusCode:200}}},Pt=async(e,t)=>{let n=await e({...t,inputs:void 0,operation:void 0,nextCursor:void 0});return{...n,response:{successful:!1,statusCode:500}}},Ft=(e,t)=>{let n=e?.next,r=a(n)&&t.operationType===`list`?x(n):void 0;if(r===null)throw new $e(t,`Invalid cursor.`);return r},$=({block:e})=>{let n=e.olapClient;if(t(n?.recordAction))return;let r=wt(e),i=e.context,a={actionRunId:e.context.actionRunId||`unknown`,actionId:e.operation?.id||`unknown`,connectorKey:i.connectorKey,connectorVersion:i.connectorVersion,operationType:i.operationType,category:i.category,organizationId:i.organizationId||`unknown`,projectSecureId:i.projectSecureId,accountSecureId:i.accountSecureId,originOwnerId:i.originOwnerId,originOwnerName:i.originOwnerName,httpMethod:e.operation?.entrypointHttpMethod,url:e.operation?.entrypointUrl,sourceId:i.sourceId,sourceType:i.sourceType,sourceValue:i.sourceValue,status:e.response?.successful?`success`:`error`,message:e.response?.message,outputs:e.outputs,startTime:e.statistics?.startTime,endTime:e.statistics?.endTime};n.recordAction(a,r)},It=async({operationId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=R,parseOperationInputsFn:d=B,createBlockContextFn:f=W,createBlockFn:p=O,runStepOperationFn:m=Y})=>Z({mode:`operation_id`,operationId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u,parseOperationInputsFn:d,createBlockContextFn:f,createBlockFn:p,runStepOperationFn:m}),Lt=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,logger:c,getHttpClient:l,parseConnector:u=R,getOperationFromUrlFn:d=M,getOperationForRefreshAuthenticationFn:f=V,parseOperationInputsFn:p=B,createBlockContextFn:m=W,createBlockFn:h=O,runStepOperationFn:g=Y})=>{let _=Rt(r),v=_?await Z({mode:`refresh_authentication`,account:e,connector:t,getOperationForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseOperationInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepOperationFn:g}):await Z({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,getOperationFromUrlFn:d,parseConnector:u,logger:c,getHttpClient:l,parseOperationInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepOperationFn:g});return v},Rt=e=>e===rt,zt=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=R,getTestOperationsFn:a=at,createBlockContextFn:o=W,createBlockFn:s=O,runStepOperationFn:c=Y})=>{let l=await Z({mode:`test_operations`,account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i,getTestOperationsFn:a,createBlockContextFn:o,createBlockFn:s,runStepOperationFn:c});return l?.response?.successful??!1};export{H as ConnectSDKError,rt as REFRESH_TOKEN_OPERATION_PATH,Ge as applyReleaseStageToConnector,O as createBlock,it as executeStepFunction,et as getActionsMeta,tt as getActionsMetaFromConnectors,M as getOperationFromUrl,Ue as getRefreshTokenExpiresIn,He as getTokenExpiresIn,We as isConnectorReleased,k as loadConnector,B as parseOperationInputs,R as parseYamlConnector,Z as runAction,It as runConnectorAction,Lt as runConnectorOperation,Y as runStepOperation,zt as runTestOperations,Ve as supportsRefreshAuthentication,Je as validateYamlConnector};
1
+ import{generateActionRunId as e,isMissing as t,isNumber as n,isObject as r,isString as i,notMissing as a,z as o,zStrictObject as s}from"@stackone/utils";import{match as c}from"path-to-regexp";import{readFileSync as l}from"fs";import{dirname as u,join as d,resolve as f}from"path";import{AUTHORIZATION_SCHEMA as p,COMPOSITE_ID_LATEST_VERSION as m,CoreError as h,ReleaseStages as g,StepFunctionName as _,StepFunctionsFactory as v,StepFunctionsRegistry as y,decodeCompositeId as ee,encodeCompositeId as b,expandCursor as x,isCompositeId as S,isCursorEmpty as C,minifyCursor as w,updateCursor as T}from"@stackone/core";import{HttpErrorMessages as te,isSuccessStatusCode as ne}from"@stackone/transport";import{parse as re}from"yaml";import{evaluate as ie,safeEvaluate as E,safeEvaluateRecord as D}from"@stackone/expressions";const O=async({connector:e,inputs:n,context:r,action:i,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u})=>{if(t(l))throw Error(`getHttpClient function is required`);let d=await l(),f=u?await u():void 0;return{connector:e,inputs:n,fieldConfigs:[],context:r,action:i,credentials:a,nextCursor:o,httpClient:d,olapClient:f,settings:s,logger:c}},k=(e,t,n)=>{let r=n.toUpperCase();if(!e.actions)return;let i=Object.values(e.actions).filter(e=>a(e.endpoint)).map(e=>({actionId:e.id,endpoint:e.endpoint})),o=j(t,r,i);if(o)return{action:e.actions?.[o.actionId],params:o.params}},A=e=>{let t=e.startsWith(`/`)?e.slice(1):e,n=t.endsWith(`/`)?t.slice(0,-1):t;return n},j=(e,t,n)=>{let r=A(e);for(let e of n)if(e.endpoint?.startsWith(t)){let n=e.endpoint.replace(`${t} `,``).trim(),i=c(A(n)),a=i(A(r));if(a!==!1)return{actionId:e.actionId,path:e.endpoint,params:a.params}}},M=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,ae=(e,t)=>{let n=`${e.key}_`,r=t.startsWith(n)?t:`${n}${t}`;return e.actions?.[r]},oe=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=l(e,`utf8`);if(!t.includes(`:`)||!t.includes(`$ref:`))return t;let n=t.split(`
2
+ `),r=se(n,u(e));return r.join(`
3
+ `)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},se=(e,t)=>{let n=[];for(let r of e)if(ce(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=le(i,t),o=a.map(t=>` `.repeat(e)+t);n.push(...o)}else n.push(r);return n},ce=e=>e.includes(`$ref:`),le=(e,t)=>{let n=f(d(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{let e=l(n,`utf8`);return e.split(`
4
+ `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var N=class e extends Error{errorType;constructor(t,n){super(n),this.name=`InternalConnectSDKError`,this.errorType=t,Error.captureStackTrace&&Error.captureStackTrace(this,e)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},P=class extends N{line;constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},F=class extends N{issues;constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},ue=class extends N{actionId;stepId;functionName;functionVersion;constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},de=class extends N{actionId;stepId;functionName;functionVersion;issues;constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}};const fe=25,pe=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},me=()=>{let e={400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}};return e},he={key:o.string(),label:o.string(),required:o.boolean().optional().default(!1),secret:o.boolean().optional().default(!1),readOnly:o.boolean().optional().default(!1),placeholder:o.string().optional(),description:o.string().optional(),tooltip:o.string().optional()},ge=o.discriminatedUnion(`type`,[s({...he,type:o.enum([`text`,`password`])}),s({...he,type:o.literal(`select`),options:s({value:o.string(),label:o.string()}).array()})]),_e=s({targetFieldKey:o.string(),alias:o.string().optional(),expression:o.string().optional(),values:o.unknown().optional(),type:o.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:o.boolean().default(!1),custom:o.boolean().default(!1),hidden:o.boolean().default(!1),enumMapper:s({matcher:o.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or(s({matchExpression:o.string(),value:o.string()}).array())}).optional(),properties:o.lazy(()=>_e).array().optional()}),ve=s({name:o.string(),type:o.enum([`string`,`number`,`boolean`,`datetime_string`,`object`]),required:o.boolean(),description:o.string(),array:o.boolean().optional().default(!1),in:o.enum([`body`,`query`,`path`,`headers`]),properties:o.lazy(()=>ve.omit({in:!0})).array().optional()}),I=s({actionId:o.string(),categories:o.string().array(),actionType:o.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`unknown`]),schema:o.string().optional(),schemaType:o.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:o.string().optional(),entrypointHttpMethod:o.string().optional(),label:o.string(),description:o.string(),tags:o.string().array().optional(),releaseStage:o.enum(g).optional(),context:o.string().optional(),responses:s({statusCode:o.number(),description:o.string()}).array().optional(),inputs:ve.array().optional(),cursor:s({enabled:o.boolean(),pageSize:o.number()}).optional(),compositeIdentifiers:s({enabled:o.boolean(),version:o.number().optional(),fields:s({targetFieldKey:o.string(),remote:o.string().optional(),components:o.string().array()}).array().optional()}).optional(),scheduledJobs:s({enabled:o.boolean(),type:o.enum([`data_sync`]),schedule:o.string(),description:o.string(),requestParams:s({fields:o.string().array().optional(),expand:o.string().array().optional(),filter:o.record(o.string(),o.string()).optional()}).optional(),syncFilter:s({name:o.enum([`updated_after`,`created_after`]),initialLoopbackPeriod:o.string(),incrementalLoopbackPeriod:o.string()}).optional()}).array().optional(),fieldConfigs:_e.array().optional(),steps:s({stepId:o.string(),description:o.string(),stepFunction:s({functionName:o.string(),version:o.string().optional(),parameters:o.record(o.string(),o.unknown())}),condition:o.string().optional(),ignoreError:o.boolean().optional()}).array(),result:o.string().or(o.record(o.string(),o.unknown())).optional()}),ye=s({schedule:o.string().optional(),action:I.extend({actionType:o.literal(`refresh_token`)})}),be=s({mainRatelimit:o.number(),subPools:o.array(s({subPoolKey:o.string(),urlPattern:o.string(),rateLimit:o.number()})).optional(),mappedRateLimitErrors:o.array(s({errorStatus:o.number(),errorMessage:o.string(),errorMessagePath:o.string().optional(),retryAfterPath:o.string().optional(),retryAfterUnit:o.union([o.literal(`seconds`),o.literal(`milliseconds`),o.literal(`date`)]).optional(),retryAfterValue:o.number().optional()})).optional()}),xe=s({mainMaxConcurrency:o.number(),subPools:o.array(s({subPoolKey:o.string(),urlPattern:o.string(),maxConcurrency:o.number()})).optional()}),L=s({label:o.string(),authorization:p,environments:s({key:o.string(),name:o.string()}).array(),support:s({link:o.string(),description:o.string().optional()}),configFields:ge.array().optional(),setupFields:ge.array().optional(),refreshAuthentication:ye.optional(),testActions:s({action:o.string().or(I),condition:o.string().optional(),required:o.boolean().default(!0)}).array().optional()}),Se=L.extend({type:o.literal(`oauth2`),grantType:o.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),Ce=L.extend({type:o.literal(`custom`)}),we=L.extend({type:o.literal(`oidc`)}),Te=o.discriminatedUnion(`type`,[Se,Ce,we]),Ee=s({StackOne:o.string(),info:s({title:o.string(),version:o.string(),key:o.string(),assets:s({icon:o.string()}),description:o.string()}),context:o.string().optional(),baseUrl:o.string(),authentication:o.record(o.string(),Te).array().optional(),actions:I.array().optional(),rateLimit:be.optional(),concurrency:xe.optional(),releaseStage:o.enum(g).optional()}).strict();function R(e){try{let t=re(e),n=Ue(Ee,t),r={title:n.info.title,version:n.info.version,key:n.info.key,assets:n.info.assets,description:n.info.description,context:n.context,rateLimit:n.rateLimit,concurrency:n.concurrency,releaseStage:n.releaseStage},i=Ae(n),o={baseUrl:n.baseUrl,authentication:De(i)},s=Ie(n,o);return r.actions=s,Oe(n.info.key,i,s,o),r.authentication=i,a(s)&&(r.categories=ke(Object.values(s))),r}catch(e){if(e instanceof N)throw e;let t=e.message,n=t.match(/at line (\d+)/),r=n?parseInt(n[1],10):1;throw new P(r,t)}}const De=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,...c}=r;t[n]=De(c)}else t[n]=r;return t},Oe=(e,t,n,r)=>{if(!(!t||!n))for(let i of Object.values(t))for(let t of Object.values(i)){let i=t.testActions;t.testActions=i?.map(t=>{if(a(t.action))if(typeof t.action==`string`){let r=M(e,t.action),i=Object.values(n).find(e=>e.id===r);if(i)return{...t,action:i}}else{let n=M(e,t.action.actionId),i=z(n,t.action,r);return{...t,action:i}}return t})}},ke=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},Ae=e=>{let t={};for(let n of e.authentication??[]){let[r]=Object.keys(n),i=n[r].environments.reduce((t,i)=>{let{key:o,name:s}=i,{environments:c,refreshAuthentication:l,testActions:u,...d}=n[r],f=a(l)?{schedule:l.schedule,action:z(M(e.info.key,l.action.actionId),l.action)}:void 0;return t[o]={...d,refreshAuthentication:f,envKey:o,envName:s,testActions:u},t},{});t[r]=i}return t},je=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,Me=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,Ne=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},Pe=e=>{if(!(e.actionType===`refresh_token`||t(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},Fe=e=>{let t={success:pe(e.actionType),errors:me()},n=e.responses?.reduce((e,t)=>{let n=ne(t.statusCode);return n?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e},t);return n??t},Ie=(e,t)=>{let n=e.actions?.reduce((n,r)=>{let i=je(r),a=Me(r),o=i??a,s=M(e.info.key,r.actionId);return n[s]=z(s,r,t,o),n},{});return n},z=(e,t,n,r)=>{let i=Pe(t),a=Fe(t),o=ze(t),s=t.inputs||[];o.enabled&&(s?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),s?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1}));let c=Ne(t);return{id:e,categories:t.categories,label:t.label,description:t.description,actionType:t.actionType,schemaType:t.schemaType??`native`,entrypointUrl:t.entrypointUrl??i,entrypointHttpMethod:c,endpoint:r,tags:t.tags,releaseStage:t.releaseStage,context:t.context,responses:a,cursor:o,compositeIdentifiers:Be(t),scheduledJobs:Ve(t),inputs:s,steps:t.steps.reduce((e,r)=>{let{customErrors:i,...a}=r.stepFunction.parameters??{},o={id:r.stepId,description:r.description,condition:r.condition,ignoreError:r.ignoreError,stepFunction:{functionName:r.stepFunction.functionName,version:r.stepFunction.version,params:{...He({stepFunctionName:r.stepFunction.functionName,baseRequestParams:n,customErrors:i}),...r.stepFunction.functionName===`map_fields`||r.stepFunction.functionName===`typecast`?{fields:a.fields??t.fieldConfigs}:{},...a}}};return Le(t.actionId,o),e[r.stepId]=o,e},{}),result:t.result}},Le=(e,t)=>{let n=t.stepFunction.version??`1`,r=y[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new ue(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&We(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},B=(e,t)=>{if(!e.inputs)return{};let n=Re(e.inputs),r=o.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},Re=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=V(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=o.object(t))}return n},V=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=o.string();break;case`number`:t=o.number();break;case`boolean`:t=o.boolean();break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=V(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=o.object(n)}else t=o.record(o.string(),o.unknown());break;default:t=o.unknown()}return e.array&&(t=o.array(t)),t},ze=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:fe};return{enabled:n.enabled&&t,pageSize:n.pageSize}},Be=e=>{if(e.actionType===`refresh_token`)return{enabled:!1};if(t(e.compositeIdentifiers)){let t=e.fieldConfigs?.find(e=>e.targetFieldKey===`id`),n=a(t)?[{targetFieldKey:t.targetFieldKey,remote:`id`,components:[{name:t.targetFieldKey,alias:t.alias}]}]:void 0;return{enabled:!0,version:m,fields:n}}let n=[];for(let t of e.compositeIdentifiers?.fields??[]){let r=t.components.map(t=>{let n=e.fieldConfigs?.find(e=>e.targetFieldKey===t);return{name:t,alias:n?.alias}});n.push({targetFieldKey:t.targetFieldKey,remote:t.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:n.length>0?n:void 0}},Ve=e=>{if(!t(e.scheduledJobs))return e.scheduledJobs},He=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`){let e=[{receivedStatus:500,targetStatus:502}],r=n&&Array.isArray(n)?n:[],i=[...r,...e];return{...t,customErrors:i}}else return{}},Ue=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;{let e=n.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]}));throw new F(e,`Invalid connector schema`)}},We=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;{let e=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]}));throw new de(n,r,i,a,e)}},H=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.type;if(i!==`oauth2`)return;let o=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;if(a(o))return{action:o,params:{}}},Ge=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.type;if(i!==`oauth2`)return!1;let o=H(e,t,n);return a(o)},Ke=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization,a=r?.type;if(a===`oauth2`)return i?.tokenExpiresIn},qe=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization,a=r?.type;if(a===`oauth2`)return i?.tokenRefreshExpiresIn},Je=(e,t=[])=>Ze(t,e.releaseStage),Ye=(e,t=[])=>{if(!Je(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))Ze(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},Xe=e=>e??`ga`,Ze=(e=[],t)=>{let n=Xe(t);return e.includes(n)},Qe=e=>{try{let t=R(e);return{success:!0,connector:t}}catch(n){if(n instanceof F){let r=n.issues,i=[];return r.forEach(n=>{let r=n?.keys?.[0],a=t(r)?n.path:[...n.path,r],o=$e(a,e);i.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(n instanceof P)return{success:!1,errors:[{line:n.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(n instanceof ue){let t=et(n.actionId,n.stepId,n.functionName,!1,e);return{success:!1,errors:[{line:t,message:n.message,field:void 0}]}}else if(n instanceof de){let r=n.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=t(a)?r.path:[...r.path,a],s=et(n.actionId,n.stepId,n.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},$e=(e,n)=>{let r=n.split(`
5
+ `),i=0,o=-1,s=0;for(let n=0;n<r.length;n++){let c=r[n],l=c.match(/^(\s*)/)?.[1]?.length||0,u=c.replace(`- `,``).trim();if(u.startsWith(`#`)||u===``||l<=o)continue;let d=a(e[i])?`${String(e[i])}`:``;if(t(d))return s+1;if(isNaN(Number(d))){if(u.startsWith(`${d}:`)){if(i===e.length-1)return n+1;o=l,s=n,i++}}else{let e=parseInt(d,10),t=-1;for(let a=n;a<r.length;a++){let o=r[a],c=o.trim();if(c.startsWith(`-`)&&t++,t===e){i++,s=n,n--;break}else n++}}}return s+1},et=(e,n,r,i,o)=>{let s=o.split(`
6
+ `),c=1,l=null,u=null;for(let o=0;o<s.length;o++){let d=s[o],f=d.trim();if(t(l)&&f===`- actionId: ${e}`){l=e,c=o+1;continue}if(a(l)&&t(u)&&f===`- stepId: ${n}`){u=n,c=o+1;continue}if(a(l)&&a(u)&&!i&&f.startsWith(`functionName: ${r}`)||a(l)&&a(u)&&i&&f===`parameters:`)return c=o+1,c}return c};var U=class e extends Error{errorType;context;constructor(t,n,r){super(r),this.name=`ConnectSDKError`,this.errorType=t,this.context=n,Error.captureStackTrace&&Error.captureStackTrace(this,e)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},tt=class extends U{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},W=class extends U{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},nt=class extends U{constructor(e,t){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`}},rt=class extends U{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const it=(e,t)=>{let n=Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t})),r=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description.replace(/\b\w/g,e=>e.toUpperCase()),label:e.label.replace(/\b\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,authentication:n,action_details:t?.includes(`action_details`)?e:void 0}));return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,authentication:n,actions:r}},at=(e,t)=>e.map(e=>it(e,t)),ot=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=v.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===_.MAP_FIELDS?{[_.MAP_FIELDS.toString()]:{output:{data:a.block.result},errors:a.errors,successful:a.successful}}:{};return{...a.block,steps:{...a?.block?.steps??{},...o}}},G=({category:t,connectorKey:n,connectorVersion:r,authConfigKey:i,environment:a=`production`,action:o,accountSecureId:s,projectSecureId:c,organizationId:l})=>({organizationId:l,projectSecureId:c,accountSecureId:s,connectorKey:n,connectorVersion:r,category:t,service:``,resource:``,schema:o?.schema?.key,actionType:o?.actionType??`unknown`,authenticationType:i,environment:a,actionRunId:e()}),st=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions,ct=e=>{let n=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!n?.enabled||t(r))return e;let i=n.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{}),a={version:n.version??m,aliases:i};return K(r,a,e.logger),{...e,inputs:r}},K=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))mt(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)K(e,t,n);else typeof i==`object`&&i&&K(i,t,n)}},lt=(e,t,n,r)=>{let i=[],a=[];for(let o of e)try{let e=ee(o,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:o,compositeIdentifierConfig:n,error:e}}),a.push(o)}return{compositeIdComponents:i,nonCompositeIds:a}},ut=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},dt=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},ft=(e,t,n,r,i)=>{n.every(dt)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},pt=(e,t,n)=>{e instanceof h&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},mt=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=lt(o,t,r,i);ut(n,t,s,a),ft(n,t,s,c,a)}catch(e){pt(e,t,i)}},q=`remote_`,ht=e=>{let n=e.action?.compositeIdentifiers;if(!n?.enabled)return e;let r=`data`,i=e.outputs?.[r];if(t(i))return e;let a=Array.isArray(i)?i.map(e=>gt(e,n)):gt(i,n);return{...e,outputs:{...e.outputs??{},[r]:a}}},gt=(e,t)=>{let n=_t(e,t),i=J(n);return{...e,...r(i)?i:{}}},_t=(e,t)=>{let n=t.version??m,r={};return t.fields?.forEach(t=>{let i={},a=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),a.push({key:t.name,value:e[t.name]})});let o=a.length===1?a[0]:{identifiers:a},s={version:n,aliases:Object.keys(i).length>0?i:void 0},c=b(o,s);r[t.targetFieldKey]=c,t.remote&&(r[`${q}${t.remote}`]=e[t.remote])}),{...e,...r}},vt=e=>e===`id`||/.+_id(s)?$/.test(e),yt=e=>Array.isArray(e)&&e.every(e=>i(e)&&e.length>0),bt=(e,t)=>S(e)||t.startsWith(q),xt=(e,t)=>{try{return b({key:e,value:t},{version:m})}catch{return t}},St=(e,t,n)=>{let r=t.map(t=>i(t)&&t.length>0&&!S(t)?xt(e,t):t);n[e]=r,n[`${q}${e}`]=t},Ct=(e,t,n)=>{if(bt(t,e))return;let r=b({key:e,value:t},{version:m});n[e]=r,n[`remote_${e}`]=t},wt=(e,t,n)=>{yt(t)?St(e,t,n):i(t)&&t.length>0&&Ct(e,t,n)},J=e=>{if(Array.isArray(e))return e.map(e=>J(e));if(!r(e))return e;let t={...e};for(let[n,i]of Object.entries(e))(r(i)||Array.isArray(i)&&i.length>0&&r(i[0]))&&(t[n]=J(i)),vt(n)&&wt(n,i,t);return t},Tt=(e,t)=>{let r=Number(e.inputs?.page_size),i=a(e.inputs?.page_size)&&n(r)&&!Number.isNaN(r)?r:e.action?.cursor?.pageSize??t;return i},Et=(e,n,i,o)=>{let s=t(e)?void 0:e.data,c=Object.keys(i).length+1,l=C({cursor:o,ignoreStepIndex:c});if(!r(e)||t(s)||(s?.length??0)<=n)return{result:e,next:a(o)&&!l?w(o):null};let u=o?.remote?.[c]?.pageNumber??1,d=(u-1)*n,f=d+n,p=s.slice(d,f),m=s.length>f||!l,h=T({cursor:o,stepIndex:c,pageNumber:u+1});return{result:{...e,data:p},next:m?w(h):null}},Dt=e=>{let n=e.settings?.olap;return t(n)?{}:{logs:n.logs?{enabled:n.logs.enabled}:void 0,advanced:n.advanced?{enabled:n.advanced.enabled,ttl:n.advanced.ttl,errorsOnly:n.advanced.errorsOnly}:void 0}},Y=async({block:e,buildStepFunction:t=v.build,virtualPaginateResultFn:n=Et,encodeResultCompositeIds:r=ht,decodeInputCompositeIds:i=ct})=>{let a=i(e),o=await Nt({block:a,buildStepFunction:t,virtualPaginateResultFn:n});return r(o)},Ot=(e,t)=>e.condition?!E(e.condition,t):!1,kt=(e,t,n)=>{let r=e.stepFunction,i=y[e.stepFunction.functionName]?.[`v${e.stepFunction.version??1}`],o=a(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return t.action?.cursor.enabled&&o?{...r.params??{},cursor:{token:t.nextCursor?.remote?.[n]?.providerPageCursor,position:t.nextCursor?.remote?.[n]?.position}}:r.params??{}},At=(e,t,n,r,i)=>{let a=X({block:e,stepId:t,successful:!1,functionOutput:n}),o=r.ignoreError??!1;return o||(i.hasFatalError=!0,i.errorStatusCode??=n.output?.statusCode??500),a},jt=async(e,t,n,r,i,a)=>{let o=n[e],s=o.stepFunction,c=a.buildStepFunction({functionName:s.functionName,version:s.version,validateSchemas:!0}).fn;if(Ot(o,r))return X({block:r,stepId:e,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`});if(i.hasFatalError)return X({block:r,stepId:e,successful:!1,skipped:!0,message:`Step skipped due to previous error.`});let l=kt(o,r,t),u=await c({block:r,params:l});if(u.successful===!1)return At(r,e,u,o,i);let d=r.action?.cursor.enabled?T({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return X({block:{...u.block,nextCursor:d},stepId:e,functionOutput:u})},Mt=(e,t,n,i,o)=>{let s=!n.hasFatalError,c=s?e.action?.responses.success.statusCode??200:n.errorStatusCode??500,l=a(o)&&r(o.result)?{next:o.next,...o.result}:i;return{...t,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??te?.[c]??`Error while processing the request`}}},Nt=async({block:e,buildStepFunction:t=v.build,virtualPaginateResultFn:n=Et})=>{let r=e.action?.steps||{},i={...e},a=Object.keys(r),o=Tt(e,fe),s={hasFatalError:!1,errorStatusCode:null},c={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of a.entries()){let n=new Date;i=await jt(t,e,r,i,s,c),Ft({block:i,stepId:t,startTime:n,endTime:new Date})}let l=e.action?.result?Pt(e.action.result,i):void 0,u=e.action?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return Mt(e,i,s,l,u)},Pt=(e,t)=>r(e)?D(e,t):E(e,t),X=({block:e,stepId:t,successful:n,functionOutput:r,skipped:i,message:a})=>({...e,steps:{...e.steps,[t]:{successful:n??r?.successful??!1,errors:r?.errors,output:r?.output,skipped:i,message:a}}}),Ft=({block:e,stepId:n,startTime:r,endTime:i})=>{let a=e.olapClient;if(t(a?.recordStep))return;let o=Dt(e),s=e.context,c={actionRunId:s.actionRunId??`unknown`,stepId:n,status:e.steps?.[n]?.successful?`successful`:`failed`,skipped:e.steps?.[n]?.skipped,message:e.steps?.[n]?.message,outputs:e.steps?.[n]?.output,errors:e.steps?.[n]?.errors,startTime:r,endTime:i};a.recordStep(c,o)},Z=async e=>{let{pathParams:n={},queryParams:r={},body:o={},headers:s={},parseConnector:c=R,parseActionInputsFn:l=B,createBlockContextFn:u=G,createBlockFn:d=O,runStepActionFn:f=Y,getActionFromUrlFn:p=k,getActionForRefreshAuthenticationFn:m=H,getTestActionsFn:h=st,mode:g,account:_,connector:v,getHttpClient:y,getOlapClient:ee,settings:b,logger:x,category:S,...C}=e,w=_.authConfigKey,T=_.environment??`production`,te=_.secureId,ne=_.projectSecureId,re=_.organizationId,E=_.credentials,D=u({category:S??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,authConfigKey:w,environment:T,accountSecureId:te,projectSecureId:ne,organizationId:re}),A=new Date,j;try{j=i(v)?c(v):v}catch{throw new tt(D,`Error while parsing connector`)}let M={connector:j,context:D,credentials:E,settings:b,logger:x,getHttpClient:y,getOlapClient:ee};if(g===`action_id`){let{actionId:e}=C,i=ae(j,e);if(t(i))throw new W(D,`No matching action found`);let a=await Q({action:i,blockContext:D,queryParams:r,pathParams:n,body:o,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:M,runStepActionFn:f});return a.statistics={startTime:A,endTime:new Date},$({block:a}),a}else if(g===`test_actions`){let e=h(j,w,T);if(t(e)||e.length===0){let e=await It(d,M);return e.statistics={startTime:A,endTime:new Date},$({block:e}),e}D.actionType=`test`;for(let n of e){let e=await d({...M,inputs:void 0,action:n.action,nextCursor:void 0}),r=a(n.condition)?ie(n.condition,e):!0;if(!r)continue;let i=await f({block:e});if((t(i?.response?.successful)||!i.response.successful)&&n.required){x?.error({code:`TestActionFailed`,message:`Test action "${n.action.id}" failed with error: ${i?.response?.message}`});let e=await Lt(d,M);return $({block:e}),e}}let n=await It(d,M);return n.statistics={startTime:A,endTime:new Date},$({block:n}),n}else if(g===`refresh_authentication`){let e=m(j,w,T);if(t(e))throw new W(D,`No matching action found`);let n=await Q({action:e.action,blockContext:D,queryParams:r,pathParams:e.params,body:o,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:M,runStepActionFn:f});return n.statistics={startTime:A,endTime:new Date},$({block:n}),n}else if(g===`path`){let{path:e,method:n}=C,i=p(j,e,n);if(t(i))throw new W(D,`No matching action found`);let a=await Q({action:i.action,blockContext:D,queryParams:r,pathParams:i.params,body:o,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:M,runStepActionFn:f});return a.statistics={startTime:A,endTime:new Date},$({block:a}),a}else{let e=await Lt(d,M);return e.statistics={startTime:A,endTime:new Date},$({block:e}),e}},Q=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=Rt(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch{throw new nt(n,`Error while parsing action inputs`)}let p=await c({...l,inputs:f,action:t,nextCursor:d});return await u({block:p})},It=async(e,t)=>{let n=await e({...t,inputs:void 0,action:void 0,nextCursor:void 0});return{...n,response:{successful:!0,statusCode:200}}},Lt=async(e,t)=>{let n=await e({...t,inputs:void 0,action:void 0,nextCursor:void 0});return{...n,response:{successful:!1,statusCode:500}}},Rt=(e,t)=>{let n=e?.next,r=a(n)&&t.actionType===`list`?x(n):void 0;if(r===null)throw new rt(t,`Invalid cursor.`);return r},$=({block:e})=>{let n=e.olapClient;if(t(n?.recordAction))return;let r=Dt(e),i=e.context,a={actionRunId:e.context.actionRunId||`unknown`,actionId:e.action?.id||`unknown`,connectorKey:i.connectorKey,connectorVersion:i.connectorVersion,actionType:i.actionType,category:i.category,organizationId:i.organizationId||`unknown`,projectSecureId:i.projectSecureId,accountSecureId:i.accountSecureId,originOwnerId:i.originOwnerId,originOwnerName:i.originOwnerName,httpMethod:e.action?.entrypointHttpMethod,url:e.action?.entrypointUrl,sourceId:i.sourceId,sourceType:i.sourceType,sourceValue:i.sourceValue,status:e.response?.successful?`success`:`error`,message:e.response?.message,outputs:e.outputs,startTime:e.statistics?.startTime,endTime:e.statistics?.endTime};n.recordAction(a,r)},zt=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=R,parseActionInputsFn:d=B,createBlockContextFn:f=G,createBlockFn:p=O,runStepActionFn:m=Y})=>Z({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u,parseActionInputsFn:d,createBlockContextFn:f,createBlockFn:p,runStepActionFn:m}),Bt=`stackone://internal//`,Vt=`${Bt}refresh_token`,Ht=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,logger:c,getHttpClient:l,parseConnector:u=R,getActionFromUrlFn:d=k,getActionForRefreshAuthenticationFn:f=H,parseActionInputsFn:p=B,createBlockContextFn:m=G,createBlockFn:h=O,runStepActionFn:g=Y})=>{let _=Ut(r),v=_?await Z({mode:`refresh_authentication`,account:e,connector:t,getActionForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}):await Z({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,getActionFromUrlFn:d,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g});return v},Ut=e=>e===Vt,Wt=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=R,getTestActionsFn:a=st,createBlockContextFn:o=G,createBlockFn:s=O,runStepActionFn:c=Y})=>{let l=await Z({mode:`test_actions`,account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i,getTestActionsFn:a,createBlockContextFn:o,createBlockFn:s,runStepActionFn:c});return l?.response?.successful??!1};export{U as ConnectSDKError,Ye as applyReleaseStageToConnector,O as createBlock,ot as executeStepFunction,k as getActionFromUrl,it as getActionsMeta,at as getActionsMetaFromConnectors,qe as getRefreshTokenExpiresIn,Ke as getTokenExpiresIn,Je as isConnectorReleased,oe as loadConnector,B as parseActionInputs,R as parseYamlConnector,Z as runAction,zt as runConnectorActionById,Ht as runConnectorActionByPath,Y as runStepAction,Wt as runTestActions,Ge as supportsRefreshAuthentication,Qe as validateYamlConnector};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackone/connect-sdk",
3
- "version": "1.64.0",
3
+ "version": "2.1.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",