@stackone/connect-sdk 1.64.0 → 2.0.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 +74 -77
- package/dist/index.d.ts +74 -77
- package/dist/index.js +5 -5
- package/dist/index.mjs +6 -6
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
514
|
-
[
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
555
|
-
errors: Record<number,
|
|
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
|
|
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
|
|
608
|
-
|
|
607
|
+
type TestActionConfig = {
|
|
608
|
+
action: Action;
|
|
609
609
|
condition?: string;
|
|
610
610
|
required: boolean;
|
|
611
611
|
};
|
|
@@ -623,9 +623,9 @@ type AuthenticationConfig = {
|
|
|
623
623
|
setupFields?: AuthenticationField[];
|
|
624
624
|
refreshAuthentication?: {
|
|
625
625
|
schedule?: string;
|
|
626
|
-
|
|
626
|
+
action: Action;
|
|
627
627
|
};
|
|
628
|
-
|
|
628
|
+
testActions?: TestActionConfig[];
|
|
629
629
|
};
|
|
630
630
|
type Authentication = {
|
|
631
631
|
[authType: string]: {
|
|
@@ -666,7 +666,7 @@ declare const createBlock: ({
|
|
|
666
666
|
connector,
|
|
667
667
|
inputs,
|
|
668
668
|
context,
|
|
669
|
-
|
|
669
|
+
action,
|
|
670
670
|
credentials,
|
|
671
671
|
nextCursor,
|
|
672
672
|
settings,
|
|
@@ -677,7 +677,7 @@ declare const createBlock: ({
|
|
|
677
677
|
connector: Connector;
|
|
678
678
|
inputs?: Record<string, unknown>;
|
|
679
679
|
context: BlockContext;
|
|
680
|
-
|
|
680
|
+
action?: Action;
|
|
681
681
|
credentials?: Record<string, unknown>;
|
|
682
682
|
nextCursor?: Cursor;
|
|
683
683
|
settings?: Settings;
|
|
@@ -686,22 +686,22 @@ declare const createBlock: ({
|
|
|
686
686
|
getOlapClient?: () => Promise<IOlapClient>;
|
|
687
687
|
}) => Promise<Block>;
|
|
688
688
|
//#endregion
|
|
689
|
-
//#region src/connectors/
|
|
690
|
-
declare const
|
|
691
|
-
|
|
692
|
-
//#region src/connectors/operations.d.ts
|
|
693
|
-
declare const getOperationFromUrl: (connector: Connector, url: string, method: HttpMethod) => {
|
|
694
|
-
operation: Operation;
|
|
689
|
+
//#region src/connectors/actions.d.ts
|
|
690
|
+
declare const getActionFromUrl: (connector: Connector, url: string, method: HttpMethod) => {
|
|
691
|
+
action: Action;
|
|
695
692
|
params: Partial<Record<string, string | string[]>>;
|
|
696
693
|
} | undefined;
|
|
697
694
|
//#endregion
|
|
695
|
+
//#region src/connectors/fileReader.d.ts
|
|
696
|
+
declare const loadConnector: (filePath: string) => string;
|
|
697
|
+
//#endregion
|
|
698
698
|
//#region src/connectors/parsers.d.ts
|
|
699
699
|
declare function parseYamlConnector(yamlFileContents: string): Connector;
|
|
700
|
-
declare const
|
|
700
|
+
declare const parseActionInputs: (action: Action, inputs: unknown) => Record<string, unknown>;
|
|
701
701
|
//#endregion
|
|
702
702
|
//#region src/connectors/refreshAuthentication.d.ts
|
|
703
|
-
declare const
|
|
704
|
-
|
|
703
|
+
declare const getActionForRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => {
|
|
704
|
+
action: Action;
|
|
705
705
|
params: Partial<Record<string, string | string[]>>;
|
|
706
706
|
} | undefined;
|
|
707
707
|
declare const supportsRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => boolean;
|
|
@@ -725,7 +725,7 @@ declare const validateYamlConnector: (yamlFileContents: string) => {
|
|
|
725
725
|
};
|
|
726
726
|
//#endregion
|
|
727
727
|
//#region src/errors/types.d.ts
|
|
728
|
-
type ErrorType = 'CONNECTOR_PARSE_ERROR' | '
|
|
728
|
+
type ErrorType = 'CONNECTOR_PARSE_ERROR' | 'MISSING_ACTION_ERROR' | 'INVALID_ACTION_INPUTS_ERROR' | 'INVALID_CURSOR_ERROR';
|
|
729
729
|
//#endregion
|
|
730
730
|
//#region src/errors/connectSDKErrors.d.ts
|
|
731
731
|
declare class ConnectSDKError extends Error {
|
|
@@ -736,7 +736,7 @@ declare class ConnectSDKError extends Error {
|
|
|
736
736
|
}
|
|
737
737
|
//#endregion
|
|
738
738
|
//#region src/meta/types.d.ts
|
|
739
|
-
interface
|
|
739
|
+
interface MetaAction {
|
|
740
740
|
id: string;
|
|
741
741
|
label: string;
|
|
742
742
|
description: string;
|
|
@@ -763,7 +763,7 @@ type ConnectorMeta = {
|
|
|
763
763
|
description: string;
|
|
764
764
|
schema_type: string;
|
|
765
765
|
tags?: string[];
|
|
766
|
-
|
|
766
|
+
action_details?: MetaAction;
|
|
767
767
|
authentication: MetaAuthenticationConfig[];
|
|
768
768
|
}[];
|
|
769
769
|
};
|
|
@@ -772,9 +772,6 @@ type ConnectorMeta = {
|
|
|
772
772
|
declare const getActionsMeta: (connector: Connector, include?: string[]) => ConnectorMeta;
|
|
773
773
|
declare const getActionsMetaFromConnectors: (connectors: Connector[], include?: string[]) => ConnectorMeta[];
|
|
774
774
|
//#endregion
|
|
775
|
-
//#region src/runners/constants.d.ts
|
|
776
|
-
declare const REFRESH_TOKEN_OPERATION_PATH = "stackone://internal//refresh_token";
|
|
777
|
-
//#endregion
|
|
778
775
|
//#region src/runners/executeStepFunctions.d.ts
|
|
779
776
|
declare const executeStepFunction: ({
|
|
780
777
|
block,
|
|
@@ -795,7 +792,7 @@ declare const createBlockContext: ({
|
|
|
795
792
|
connectorVersion,
|
|
796
793
|
authConfigKey,
|
|
797
794
|
environment,
|
|
798
|
-
|
|
795
|
+
action,
|
|
799
796
|
accountSecureId,
|
|
800
797
|
projectSecureId,
|
|
801
798
|
organizationId
|
|
@@ -805,14 +802,14 @@ declare const createBlockContext: ({
|
|
|
805
802
|
connectorVersion: string;
|
|
806
803
|
authConfigKey: string;
|
|
807
804
|
environment?: string;
|
|
808
|
-
|
|
805
|
+
action?: Action;
|
|
809
806
|
accountSecureId: string;
|
|
810
807
|
projectSecureId: string;
|
|
811
808
|
organizationId: string;
|
|
812
809
|
}) => BlockContext;
|
|
813
810
|
//#endregion
|
|
814
|
-
//#region src/connectors/
|
|
815
|
-
declare const
|
|
811
|
+
//#region src/connectors/testActions.d.ts
|
|
812
|
+
declare const getTestActions: (connector: Connector, authConfigKey: string, environment: string) => TestActionConfig[] | undefined;
|
|
816
813
|
//#endregion
|
|
817
814
|
//#region src/compositeIds/inputs.d.ts
|
|
818
815
|
declare const decodeInputCompositeIdentifiers: (block: Block) => Block;
|
|
@@ -828,8 +825,8 @@ declare const virtualPaginateResult: (result: unknown, pageSize: number, steps:
|
|
|
828
825
|
next: string | null;
|
|
829
826
|
};
|
|
830
827
|
//#endregion
|
|
831
|
-
//#region src/runners/
|
|
832
|
-
declare const
|
|
828
|
+
//#region src/runners/runStepAction.d.ts
|
|
829
|
+
declare const runStepAction: ({
|
|
833
830
|
block,
|
|
834
831
|
buildStepFunction,
|
|
835
832
|
virtualPaginateResultFn,
|
|
@@ -854,50 +851,50 @@ type BaseRunActionParams = {
|
|
|
854
851
|
settings?: Settings;
|
|
855
852
|
logger?: ILogger;
|
|
856
853
|
parseConnector?: typeof parseYamlConnector;
|
|
857
|
-
|
|
854
|
+
parseActionInputsFn?: typeof parseActionInputs;
|
|
858
855
|
createBlockContextFn?: typeof createBlockContext;
|
|
859
856
|
createBlockFn?: typeof createBlock;
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
857
|
+
runStepActionFn?: typeof runStepAction;
|
|
858
|
+
getActionFromUrlFn?: typeof getActionFromUrl;
|
|
859
|
+
getActionForRefreshAuthenticationFn?: typeof getActionForRefreshAuthentication;
|
|
860
|
+
getTestActionsFn?: typeof getTestActions;
|
|
864
861
|
getHttpClient: () => Promise<IHttpClient>;
|
|
865
862
|
getOlapClient?: () => Promise<IOlapClient>;
|
|
866
863
|
};
|
|
867
|
-
type
|
|
868
|
-
mode: '
|
|
869
|
-
|
|
864
|
+
type ActionIdMode = BaseRunActionParams & {
|
|
865
|
+
mode: 'action_id';
|
|
866
|
+
actionId: string;
|
|
870
867
|
category?: never;
|
|
871
868
|
path?: never;
|
|
872
869
|
method?: never;
|
|
873
870
|
};
|
|
874
871
|
type PathMode = BaseRunActionParams & {
|
|
875
872
|
mode: 'path';
|
|
876
|
-
|
|
873
|
+
actionId?: never;
|
|
877
874
|
category: Category;
|
|
878
875
|
path: string;
|
|
879
876
|
method: HttpMethod;
|
|
880
877
|
};
|
|
881
|
-
type
|
|
882
|
-
mode: '
|
|
883
|
-
|
|
878
|
+
type TestActionsMode = BaseRunActionParams & {
|
|
879
|
+
mode: 'test_actions';
|
|
880
|
+
actionId?: never;
|
|
884
881
|
category?: never;
|
|
885
882
|
path?: never;
|
|
886
883
|
method?: never;
|
|
887
884
|
};
|
|
888
885
|
type RefreshAuthenticationMode = BaseRunActionParams & {
|
|
889
886
|
mode: 'refresh_authentication';
|
|
890
|
-
|
|
887
|
+
actionId?: never;
|
|
891
888
|
category?: never;
|
|
892
889
|
path?: never;
|
|
893
890
|
method?: never;
|
|
894
891
|
};
|
|
895
|
-
type RunActionParams =
|
|
892
|
+
type RunActionParams = ActionIdMode | PathMode | TestActionsMode | RefreshAuthenticationMode;
|
|
896
893
|
declare const runAction: (params: RunActionParams) => Promise<Block>;
|
|
897
894
|
//#endregion
|
|
898
|
-
//#region src/runners/
|
|
899
|
-
declare const
|
|
900
|
-
|
|
895
|
+
//#region src/runners/runConnectorActionById.d.ts
|
|
896
|
+
declare const runConnectorActionById: ({
|
|
897
|
+
actionId,
|
|
901
898
|
account,
|
|
902
899
|
connector,
|
|
903
900
|
pathParams,
|
|
@@ -908,12 +905,12 @@ declare const runConnectorAction: ({
|
|
|
908
905
|
getHttpClient,
|
|
909
906
|
getOlapClient,
|
|
910
907
|
parseConnector,
|
|
911
|
-
|
|
908
|
+
parseActionInputsFn,
|
|
912
909
|
createBlockContextFn,
|
|
913
910
|
createBlockFn,
|
|
914
|
-
|
|
911
|
+
runStepActionFn
|
|
915
912
|
}: {
|
|
916
|
-
|
|
913
|
+
actionId: string;
|
|
917
914
|
account: Account;
|
|
918
915
|
connector: Connector;
|
|
919
916
|
pathParams?: unknown;
|
|
@@ -924,14 +921,14 @@ declare const runConnectorAction: ({
|
|
|
924
921
|
getHttpClient: () => Promise<IHttpClient>;
|
|
925
922
|
getOlapClient?: () => Promise<IOlapClient>;
|
|
926
923
|
parseConnector?: typeof parseYamlConnector;
|
|
927
|
-
|
|
924
|
+
parseActionInputsFn?: typeof parseActionInputs;
|
|
928
925
|
createBlockContextFn?: typeof createBlockContext;
|
|
929
926
|
createBlockFn?: typeof createBlock;
|
|
930
|
-
|
|
927
|
+
runStepActionFn?: typeof runStepAction;
|
|
931
928
|
}) => Promise<Block>;
|
|
932
929
|
//#endregion
|
|
933
|
-
//#region src/runners/
|
|
934
|
-
declare const
|
|
930
|
+
//#region src/runners/runConnectorActionByPath.d.ts
|
|
931
|
+
declare const runConnectorActionByPath: ({
|
|
935
932
|
account,
|
|
936
933
|
connector,
|
|
937
934
|
category,
|
|
@@ -943,12 +940,12 @@ declare const runConnectorOperation: ({
|
|
|
943
940
|
logger,
|
|
944
941
|
getHttpClient,
|
|
945
942
|
parseConnector,
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
943
|
+
getActionFromUrlFn,
|
|
944
|
+
getActionForRefreshAuthenticationFn,
|
|
945
|
+
parseActionInputsFn,
|
|
949
946
|
createBlockContextFn,
|
|
950
947
|
createBlockFn,
|
|
951
|
-
|
|
948
|
+
runStepActionFn
|
|
952
949
|
}: {
|
|
953
950
|
account: Account;
|
|
954
951
|
connector: Connector | string;
|
|
@@ -961,35 +958,35 @@ declare const runConnectorOperation: ({
|
|
|
961
958
|
logger?: ILogger;
|
|
962
959
|
getHttpClient: () => Promise<IHttpClient>;
|
|
963
960
|
parseConnector?: typeof parseYamlConnector;
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
961
|
+
getActionFromUrlFn?: typeof getActionFromUrl;
|
|
962
|
+
getActionForRefreshAuthenticationFn?: typeof getActionForRefreshAuthentication;
|
|
963
|
+
parseActionInputsFn?: typeof parseActionInputs;
|
|
967
964
|
createBlockContextFn?: typeof createBlockContext;
|
|
968
965
|
createBlockFn?: typeof createBlock;
|
|
969
|
-
|
|
966
|
+
runStepActionFn?: typeof runStepAction;
|
|
970
967
|
}) => Promise<Block>;
|
|
971
968
|
//#endregion
|
|
972
|
-
//#region src/runners/
|
|
973
|
-
declare const
|
|
969
|
+
//#region src/runners/runTestActions.d.ts
|
|
970
|
+
declare const runTestActions: ({
|
|
974
971
|
account,
|
|
975
972
|
connector,
|
|
976
973
|
logger,
|
|
977
974
|
getHttpClient,
|
|
978
975
|
parseConnector,
|
|
979
|
-
|
|
976
|
+
getTestActionsFn,
|
|
980
977
|
createBlockContextFn,
|
|
981
978
|
createBlockFn,
|
|
982
|
-
|
|
979
|
+
runStepActionFn
|
|
983
980
|
}: {
|
|
984
981
|
account: Account;
|
|
985
982
|
connector: Connector | string;
|
|
986
983
|
logger?: ILogger;
|
|
987
984
|
getHttpClient: () => Promise<IHttpClient>;
|
|
988
985
|
parseConnector?: typeof parseYamlConnector;
|
|
989
|
-
|
|
986
|
+
getTestActionsFn?: typeof getTestActions;
|
|
990
987
|
createBlockContextFn?: typeof createBlockContext;
|
|
991
988
|
createBlockFn?: typeof createBlock;
|
|
992
|
-
|
|
989
|
+
runStepActionFn?: typeof runStepAction;
|
|
993
990
|
}) => Promise<boolean>;
|
|
994
991
|
//#endregion
|
|
995
|
-
export { ConnectSDKError, type ConnectorMeta, type ErrorType,
|
|
992
|
+
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
514
|
-
[
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
555
|
-
errors: Record<number,
|
|
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
|
|
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
|
|
608
|
-
|
|
607
|
+
type TestActionConfig = {
|
|
608
|
+
action: Action;
|
|
609
609
|
condition?: string;
|
|
610
610
|
required: boolean;
|
|
611
611
|
};
|
|
@@ -623,9 +623,9 @@ type AuthenticationConfig = {
|
|
|
623
623
|
setupFields?: AuthenticationField[];
|
|
624
624
|
refreshAuthentication?: {
|
|
625
625
|
schedule?: string;
|
|
626
|
-
|
|
626
|
+
action: Action;
|
|
627
627
|
};
|
|
628
|
-
|
|
628
|
+
testActions?: TestActionConfig[];
|
|
629
629
|
};
|
|
630
630
|
type Authentication = {
|
|
631
631
|
[authType: string]: {
|
|
@@ -666,7 +666,7 @@ declare const createBlock: ({
|
|
|
666
666
|
connector,
|
|
667
667
|
inputs,
|
|
668
668
|
context,
|
|
669
|
-
|
|
669
|
+
action,
|
|
670
670
|
credentials,
|
|
671
671
|
nextCursor,
|
|
672
672
|
settings,
|
|
@@ -677,7 +677,7 @@ declare const createBlock: ({
|
|
|
677
677
|
connector: Connector;
|
|
678
678
|
inputs?: Record<string, unknown>;
|
|
679
679
|
context: BlockContext;
|
|
680
|
-
|
|
680
|
+
action?: Action;
|
|
681
681
|
credentials?: Record<string, unknown>;
|
|
682
682
|
nextCursor?: Cursor;
|
|
683
683
|
settings?: Settings;
|
|
@@ -686,22 +686,22 @@ declare const createBlock: ({
|
|
|
686
686
|
getOlapClient?: () => Promise<IOlapClient>;
|
|
687
687
|
}) => Promise<Block>;
|
|
688
688
|
//#endregion
|
|
689
|
-
//#region src/connectors/
|
|
690
|
-
declare const
|
|
691
|
-
|
|
692
|
-
//#region src/connectors/operations.d.ts
|
|
693
|
-
declare const getOperationFromUrl: (connector: Connector, url: string, method: HttpMethod) => {
|
|
694
|
-
operation: Operation;
|
|
689
|
+
//#region src/connectors/actions.d.ts
|
|
690
|
+
declare const getActionFromUrl: (connector: Connector, url: string, method: HttpMethod) => {
|
|
691
|
+
action: Action;
|
|
695
692
|
params: Partial<Record<string, string | string[]>>;
|
|
696
693
|
} | undefined;
|
|
697
694
|
//#endregion
|
|
695
|
+
//#region src/connectors/fileReader.d.ts
|
|
696
|
+
declare const loadConnector: (filePath: string) => string;
|
|
697
|
+
//#endregion
|
|
698
698
|
//#region src/connectors/parsers.d.ts
|
|
699
699
|
declare function parseYamlConnector(yamlFileContents: string): Connector;
|
|
700
|
-
declare const
|
|
700
|
+
declare const parseActionInputs: (action: Action, inputs: unknown) => Record<string, unknown>;
|
|
701
701
|
//#endregion
|
|
702
702
|
//#region src/connectors/refreshAuthentication.d.ts
|
|
703
|
-
declare const
|
|
704
|
-
|
|
703
|
+
declare const getActionForRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => {
|
|
704
|
+
action: Action;
|
|
705
705
|
params: Partial<Record<string, string | string[]>>;
|
|
706
706
|
} | undefined;
|
|
707
707
|
declare const supportsRefreshAuthentication: (connector: Connector, authConfigKey: string, environment: string) => boolean;
|
|
@@ -725,7 +725,7 @@ declare const validateYamlConnector: (yamlFileContents: string) => {
|
|
|
725
725
|
};
|
|
726
726
|
//#endregion
|
|
727
727
|
//#region src/errors/types.d.ts
|
|
728
|
-
type ErrorType = 'CONNECTOR_PARSE_ERROR' | '
|
|
728
|
+
type ErrorType = 'CONNECTOR_PARSE_ERROR' | 'MISSING_ACTION_ERROR' | 'INVALID_ACTION_INPUTS_ERROR' | 'INVALID_CURSOR_ERROR';
|
|
729
729
|
//#endregion
|
|
730
730
|
//#region src/errors/connectSDKErrors.d.ts
|
|
731
731
|
declare class ConnectSDKError extends Error {
|
|
@@ -736,7 +736,7 @@ declare class ConnectSDKError extends Error {
|
|
|
736
736
|
}
|
|
737
737
|
//#endregion
|
|
738
738
|
//#region src/meta/types.d.ts
|
|
739
|
-
interface
|
|
739
|
+
interface MetaAction {
|
|
740
740
|
id: string;
|
|
741
741
|
label: string;
|
|
742
742
|
description: string;
|
|
@@ -763,7 +763,7 @@ type ConnectorMeta = {
|
|
|
763
763
|
description: string;
|
|
764
764
|
schema_type: string;
|
|
765
765
|
tags?: string[];
|
|
766
|
-
|
|
766
|
+
action_details?: MetaAction;
|
|
767
767
|
authentication: MetaAuthenticationConfig[];
|
|
768
768
|
}[];
|
|
769
769
|
};
|
|
@@ -772,9 +772,6 @@ type ConnectorMeta = {
|
|
|
772
772
|
declare const getActionsMeta: (connector: Connector, include?: string[]) => ConnectorMeta;
|
|
773
773
|
declare const getActionsMetaFromConnectors: (connectors: Connector[], include?: string[]) => ConnectorMeta[];
|
|
774
774
|
//#endregion
|
|
775
|
-
//#region src/runners/constants.d.ts
|
|
776
|
-
declare const REFRESH_TOKEN_OPERATION_PATH = "stackone://internal//refresh_token";
|
|
777
|
-
//#endregion
|
|
778
775
|
//#region src/runners/executeStepFunctions.d.ts
|
|
779
776
|
declare const executeStepFunction: ({
|
|
780
777
|
block,
|
|
@@ -795,7 +792,7 @@ declare const createBlockContext: ({
|
|
|
795
792
|
connectorVersion,
|
|
796
793
|
authConfigKey,
|
|
797
794
|
environment,
|
|
798
|
-
|
|
795
|
+
action,
|
|
799
796
|
accountSecureId,
|
|
800
797
|
projectSecureId,
|
|
801
798
|
organizationId
|
|
@@ -805,14 +802,14 @@ declare const createBlockContext: ({
|
|
|
805
802
|
connectorVersion: string;
|
|
806
803
|
authConfigKey: string;
|
|
807
804
|
environment?: string;
|
|
808
|
-
|
|
805
|
+
action?: Action;
|
|
809
806
|
accountSecureId: string;
|
|
810
807
|
projectSecureId: string;
|
|
811
808
|
organizationId: string;
|
|
812
809
|
}) => BlockContext;
|
|
813
810
|
//#endregion
|
|
814
|
-
//#region src/connectors/
|
|
815
|
-
declare const
|
|
811
|
+
//#region src/connectors/testActions.d.ts
|
|
812
|
+
declare const getTestActions: (connector: Connector, authConfigKey: string, environment: string) => TestActionConfig[] | undefined;
|
|
816
813
|
//#endregion
|
|
817
814
|
//#region src/compositeIds/inputs.d.ts
|
|
818
815
|
declare const decodeInputCompositeIdentifiers: (block: Block) => Block;
|
|
@@ -828,8 +825,8 @@ declare const virtualPaginateResult: (result: unknown, pageSize: number, steps:
|
|
|
828
825
|
next: string | null;
|
|
829
826
|
};
|
|
830
827
|
//#endregion
|
|
831
|
-
//#region src/runners/
|
|
832
|
-
declare const
|
|
828
|
+
//#region src/runners/runStepAction.d.ts
|
|
829
|
+
declare const runStepAction: ({
|
|
833
830
|
block,
|
|
834
831
|
buildStepFunction,
|
|
835
832
|
virtualPaginateResultFn,
|
|
@@ -854,50 +851,50 @@ type BaseRunActionParams = {
|
|
|
854
851
|
settings?: Settings;
|
|
855
852
|
logger?: ILogger;
|
|
856
853
|
parseConnector?: typeof parseYamlConnector;
|
|
857
|
-
|
|
854
|
+
parseActionInputsFn?: typeof parseActionInputs;
|
|
858
855
|
createBlockContextFn?: typeof createBlockContext;
|
|
859
856
|
createBlockFn?: typeof createBlock;
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
857
|
+
runStepActionFn?: typeof runStepAction;
|
|
858
|
+
getActionFromUrlFn?: typeof getActionFromUrl;
|
|
859
|
+
getActionForRefreshAuthenticationFn?: typeof getActionForRefreshAuthentication;
|
|
860
|
+
getTestActionsFn?: typeof getTestActions;
|
|
864
861
|
getHttpClient: () => Promise<IHttpClient>;
|
|
865
862
|
getOlapClient?: () => Promise<IOlapClient>;
|
|
866
863
|
};
|
|
867
|
-
type
|
|
868
|
-
mode: '
|
|
869
|
-
|
|
864
|
+
type ActionIdMode = BaseRunActionParams & {
|
|
865
|
+
mode: 'action_id';
|
|
866
|
+
actionId: string;
|
|
870
867
|
category?: never;
|
|
871
868
|
path?: never;
|
|
872
869
|
method?: never;
|
|
873
870
|
};
|
|
874
871
|
type PathMode = BaseRunActionParams & {
|
|
875
872
|
mode: 'path';
|
|
876
|
-
|
|
873
|
+
actionId?: never;
|
|
877
874
|
category: Category;
|
|
878
875
|
path: string;
|
|
879
876
|
method: HttpMethod;
|
|
880
877
|
};
|
|
881
|
-
type
|
|
882
|
-
mode: '
|
|
883
|
-
|
|
878
|
+
type TestActionsMode = BaseRunActionParams & {
|
|
879
|
+
mode: 'test_actions';
|
|
880
|
+
actionId?: never;
|
|
884
881
|
category?: never;
|
|
885
882
|
path?: never;
|
|
886
883
|
method?: never;
|
|
887
884
|
};
|
|
888
885
|
type RefreshAuthenticationMode = BaseRunActionParams & {
|
|
889
886
|
mode: 'refresh_authentication';
|
|
890
|
-
|
|
887
|
+
actionId?: never;
|
|
891
888
|
category?: never;
|
|
892
889
|
path?: never;
|
|
893
890
|
method?: never;
|
|
894
891
|
};
|
|
895
|
-
type RunActionParams =
|
|
892
|
+
type RunActionParams = ActionIdMode | PathMode | TestActionsMode | RefreshAuthenticationMode;
|
|
896
893
|
declare const runAction: (params: RunActionParams) => Promise<Block>;
|
|
897
894
|
//#endregion
|
|
898
|
-
//#region src/runners/
|
|
899
|
-
declare const
|
|
900
|
-
|
|
895
|
+
//#region src/runners/runConnectorActionById.d.ts
|
|
896
|
+
declare const runConnectorActionById: ({
|
|
897
|
+
actionId,
|
|
901
898
|
account,
|
|
902
899
|
connector,
|
|
903
900
|
pathParams,
|
|
@@ -908,12 +905,12 @@ declare const runConnectorAction: ({
|
|
|
908
905
|
getHttpClient,
|
|
909
906
|
getOlapClient,
|
|
910
907
|
parseConnector,
|
|
911
|
-
|
|
908
|
+
parseActionInputsFn,
|
|
912
909
|
createBlockContextFn,
|
|
913
910
|
createBlockFn,
|
|
914
|
-
|
|
911
|
+
runStepActionFn
|
|
915
912
|
}: {
|
|
916
|
-
|
|
913
|
+
actionId: string;
|
|
917
914
|
account: Account;
|
|
918
915
|
connector: Connector;
|
|
919
916
|
pathParams?: unknown;
|
|
@@ -924,14 +921,14 @@ declare const runConnectorAction: ({
|
|
|
924
921
|
getHttpClient: () => Promise<IHttpClient>;
|
|
925
922
|
getOlapClient?: () => Promise<IOlapClient>;
|
|
926
923
|
parseConnector?: typeof parseYamlConnector;
|
|
927
|
-
|
|
924
|
+
parseActionInputsFn?: typeof parseActionInputs;
|
|
928
925
|
createBlockContextFn?: typeof createBlockContext;
|
|
929
926
|
createBlockFn?: typeof createBlock;
|
|
930
|
-
|
|
927
|
+
runStepActionFn?: typeof runStepAction;
|
|
931
928
|
}) => Promise<Block>;
|
|
932
929
|
//#endregion
|
|
933
|
-
//#region src/runners/
|
|
934
|
-
declare const
|
|
930
|
+
//#region src/runners/runConnectorActionByPath.d.ts
|
|
931
|
+
declare const runConnectorActionByPath: ({
|
|
935
932
|
account,
|
|
936
933
|
connector,
|
|
937
934
|
category,
|
|
@@ -943,12 +940,12 @@ declare const runConnectorOperation: ({
|
|
|
943
940
|
logger,
|
|
944
941
|
getHttpClient,
|
|
945
942
|
parseConnector,
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
943
|
+
getActionFromUrlFn,
|
|
944
|
+
getActionForRefreshAuthenticationFn,
|
|
945
|
+
parseActionInputsFn,
|
|
949
946
|
createBlockContextFn,
|
|
950
947
|
createBlockFn,
|
|
951
|
-
|
|
948
|
+
runStepActionFn
|
|
952
949
|
}: {
|
|
953
950
|
account: Account;
|
|
954
951
|
connector: Connector | string;
|
|
@@ -961,35 +958,35 @@ declare const runConnectorOperation: ({
|
|
|
961
958
|
logger?: ILogger;
|
|
962
959
|
getHttpClient: () => Promise<IHttpClient>;
|
|
963
960
|
parseConnector?: typeof parseYamlConnector;
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
961
|
+
getActionFromUrlFn?: typeof getActionFromUrl;
|
|
962
|
+
getActionForRefreshAuthenticationFn?: typeof getActionForRefreshAuthentication;
|
|
963
|
+
parseActionInputsFn?: typeof parseActionInputs;
|
|
967
964
|
createBlockContextFn?: typeof createBlockContext;
|
|
968
965
|
createBlockFn?: typeof createBlock;
|
|
969
|
-
|
|
966
|
+
runStepActionFn?: typeof runStepAction;
|
|
970
967
|
}) => Promise<Block>;
|
|
971
968
|
//#endregion
|
|
972
|
-
//#region src/runners/
|
|
973
|
-
declare const
|
|
969
|
+
//#region src/runners/runTestActions.d.ts
|
|
970
|
+
declare const runTestActions: ({
|
|
974
971
|
account,
|
|
975
972
|
connector,
|
|
976
973
|
logger,
|
|
977
974
|
getHttpClient,
|
|
978
975
|
parseConnector,
|
|
979
|
-
|
|
976
|
+
getTestActionsFn,
|
|
980
977
|
createBlockContextFn,
|
|
981
978
|
createBlockFn,
|
|
982
|
-
|
|
979
|
+
runStepActionFn
|
|
983
980
|
}: {
|
|
984
981
|
account: Account;
|
|
985
982
|
connector: Connector | string;
|
|
986
983
|
logger?: ILogger;
|
|
987
984
|
getHttpClient: () => Promise<IHttpClient>;
|
|
988
985
|
parseConnector?: typeof parseYamlConnector;
|
|
989
|
-
|
|
986
|
+
getTestActionsFn?: typeof getTestActions;
|
|
990
987
|
createBlockContextFn?: typeof createBlockContext;
|
|
991
988
|
createBlockFn?: typeof createBlock;
|
|
992
|
-
|
|
989
|
+
runStepActionFn?: typeof runStepAction;
|
|
993
990
|
}) => Promise<boolean>;
|
|
994
991
|
//#endregion
|
|
995
|
-
export { ConnectSDKError, type ConnectorMeta, type ErrorType,
|
|
992
|
+
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(`
|
|
2
|
-
`),r=
|
|
3
|
-
`)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},
|
|
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(`
|
|
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]},x=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=S(n,(0,d.dirname)(e));return r.join(`
|
|
3
|
+
`)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},S=(e,t)=>{let n=[];for(let r of e)if(C(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=w(i,t),o=a.map(t=>` `.repeat(e)+t);n.push(...o)}else n.push(r);return n},C=e=>e.includes(`$ref:`),w=(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 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{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}},k=class extends T{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 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 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}`)}},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()}),ne=(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(()=>ne.omit({in:!0})).array().optional()}),F=(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:ne.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()}),re=(0,c.zStrictObject)({schedule:c.z.string().optional(),action:F.extend({actionType:c.z.literal(`refresh_token`)})}),ie=(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()}),ae=(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()}),oe=(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:re.optional(),testActions:(0,c.zStrictObject)({action:c.z.string().or(F),condition:c.z.string().optional(),required:c.z.boolean().default(!0)}).array().optional()})).array().optional(),actions:F.array().optional(),rateLimit:ie.optional(),concurrency:ae.optional(),releaseStage:c.z.enum(f.ReleaseStages).optional()}).strict();function I(e){try{let t=(0,m.parse)(e),n=Ce(oe,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=ue(n),a={baseUrl:n.baseUrl,authentication:se(i)},o=ge(n,a);return r.actions=o,ce(n.info.key,i,o,a),r.authentication=i,(0,c.notMissing)(o)&&(r.categories=le(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 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,testActions: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.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})}},le=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},ue=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},de=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,fe=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,pe=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},me=e=>{if(!(e.actionType===`refresh_token`||(0,c.isMissing)(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},he=e=>{let t={success:te(e.actionType),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},ge=(e,t)=>{let n=e.actions?.reduce((n,r)=>{let i=de(r),a=fe(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=me(t),a=he(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=pe(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: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 _e(t.actionId,o),e[r.stepId]=o,e},{}),result:t.result}},_e=(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)},R=(e,t)=>{if(!e.inputs)return{};let n=ve(e.inputs),r=c.z.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},ve=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},ye=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:A};return{enabled:n.enabled&&t,pageSize:n.pageSize}},be=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}},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?.action;if((0,c.notMissing)(r))return{action: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.actions)for(let[r,i]of Object.entries(e.actions))V(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},Ae=e=>e??`ga`,V=(e=[],t)=>{let n=Ae(t);return e.includes(n)},je=e=>{try{let t=I(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.actionId,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.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}]}},Me=(e,t)=>{let n=t.split(`
|
|
5
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;
|
|
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 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_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},Fe=class extends H{constructor(e,t){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`}},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?.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}},Re=(e,t)=>e.map(e=>Le(e,t)),ze=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`,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)()}),Be=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions,Ve=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 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`))qe(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)}},He=(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}},Ue=(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]})},We=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},Ge=(e,t,n,r,i)=>{n.every(We)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},Ke=(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})},qe=(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}=He(o,t,r,i);Ue(n,t,s,a),Ge(n,t,s,c,a)}catch(e){Ke(e,t,i)}},K=`remote_`,Je=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=>Ye(e,t)):Ye(r,t);return{...e,outputs:{...e.outputs??{},[n]:i}}},Ye=(e,t)=>{let n=Xe(e,t),r=q(n);return{...e,...(0,c.isObject)(r)?r:{}}},Xe=(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}},Ze=e=>e===`id`||/.+_id(s)?$/.test(e),Qe=e=>Array.isArray(e)&&e.every(e=>(0,c.isString)(e)&&e.length>0),$e=(e,t)=>(0,f.isCompositeId)(e)||t.startsWith(K),et=(e,t)=>{try{return(0,f.encodeCompositeId)({key:e,value:t},{version:f.COMPOSITE_ID_LATEST_VERSION})}catch{return t}},tt=(e,t,n)=>{let r=t.map(t=>(0,c.isString)(t)&&t.length>0&&!(0,f.isCompositeId)(t)?et(e,t):t);n[e]=r,n[`${K}${e}`]=t},nt=(e,t,n)=>{if($e(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},rt=(e,t,n)=>{Qe(t)?tt(e,t,n):(0,c.isString)(t)&&t.length>0&&nt(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)),Ze(n)&&rt(n,r,t);return t},it=(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},at=(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}},ot=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=at,encodeResultCompositeIds:r=Je,decodeInputCompositeIds:i=Ve})=>{let a=i(e),o=await ft({block:a,buildStepFunction:t,virtualPaginateResultFn:n});return r(o)},st=(e,t)=>e.condition?!(0,h.safeEvaluate)(e.condition,t):!1,ct=(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??{}},lt=(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},ut=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(st(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=ct(o,r,t),u=await c({block:r,params:l});if(u.successful===!1)return lt(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 Y({block:{...u.block,nextCursor:d},stepId:e,functionOutput:u})},dt=(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`}}},ft=async({block:e,buildStepFunction:t=f.StepFunctionsFactory.build,virtualPaginateResultFn:n=at})=>{let r=e.action?.steps||{},i={...e},a=Object.keys(r),o=it(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 ut(t,e,r,i,s,c),mt({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 dt(e,i,s,l,u)},pt=(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}}}),mt=({block:e,stepId:t,startTime:n,endTime:r})=>{let i=e.olapClient;if((0,c.isMissing)(i?.recordStep))return;let a=ot(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=I,parseActionInputsFn:o=R,createBlockContextFn:s=W,createBlockFn:l=g,runStepActionFn:u=J,getActionFromUrlFn:d=_,getActionForRefreshAuthenticationFn:f=B,getTestActionsFn:p=Be,mode:m,account:v,connector:y,getHttpClient:b,getOlapClient:x,settings:S,logger:C,category:w,...T}=e,E=v.authConfigKey,D=v.environment??`production`,O=v.secureId,k=v.projectSecureId,A=v.organizationId,te=v.credentials,j=s({category:w??`action`,connectorKey:v.providerKey,connectorVersion:v.providerVersion,authConfigKey:E,environment:D,accountSecureId:O,projectSecureId:k,organizationId:A}),M=new Date,N;try{N=(0,c.isString)(y)?a(y):y}catch{throw new Pe(j,`Error while parsing connector`)}let P={connector:N,context:j,credentials:te,settings:S,logger:C,getHttpClient:b,getOlapClient:x};if(m===`action_id`){let{actionId:e}=T,a=ee(N,e);if((0,c.isMissing)(a))throw new U(j,`No matching action found`);let s=await Z({action:a,blockContext:j,queryParams:n,pathParams:t,body:r,headers:i,parseActionInputsFn:o,createBlockFn:l,createBlockParams:P,runStepActionFn:u});return s.statistics={startTime:M,endTime:new Date},$({block:s}),s}else if(m===`test_actions`){let e=p(N,E,D);if((0,c.isMissing)(e)||e.length===0){let e=await ht(l,P);return e.statistics={startTime:M,endTime:new Date},$({block:e}),e}j.actionType=`test`;for(let t of e){let e=await l({...P,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){C?.error({code:`TestActionFailed`,message:`Test action "${t.action.id}" failed with error: ${r?.response?.message}`});let e=await Q(l,P);return $({block:e}),e}}let t=await ht(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 action found`);let t=await Z({action:e.action,blockContext:j,queryParams:n,pathParams:e.params,body:r,headers:i,parseActionInputsFn:o,createBlockFn:l,createBlockParams:P,runStepActionFn: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 action found`);let s=await Z({action:a.action,blockContext:j,queryParams:n,pathParams:a.params,body:r,headers:i,parseActionInputsFn:o,createBlockFn:l,createBlockParams:P,runStepActionFn: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{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=gt(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch{throw new Fe(n,`Error while parsing action inputs`)}let p=await c({...l,inputs:f,action:t,nextCursor:d});return await u({block:p})},ht=async(e,t)=>{let n=await e({...t,inputs:void 0,action:void 0,nextCursor:void 0});return{...n,response:{successful:!0,statusCode:200}}},Q=async(e,t)=>{let n=await e({...t,inputs:void 0,action:void 0,nextCursor:void 0});return{...n,response:{successful:!1,statusCode:500}}},gt=(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 Ie(t,`Invalid cursor.`);return r},$=({block:e})=>{let t=e.olapClient;if((0,c.isMissing)(t?.recordAction))return;let n=ot(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)},_t=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=I,parseActionInputsFn:d=R,createBlockContextFn:f=W,createBlockFn:p=g,runStepActionFn:m=J})=>X({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}),vt=`stackone://internal//`,yt=`${vt}refresh_token`,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=I,getActionFromUrlFn:d=_,getActionForRefreshAuthenticationFn:f=B,parseActionInputsFn:p=R,createBlockContextFn:m=W,createBlockFn:h=g,runStepActionFn:v=J})=>{let y=xt(r),b=y?await X({mode:`refresh_authentication`,account:e,connector:t,getActionForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:v}):await X({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},xt=e=>e===yt,St=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=I,getTestActionsFn:a=Be,createBlockContextFn:o=W,createBlockFn:s=g,runStepActionFn:c=J})=>{let l=await X({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=H,exports.applyReleaseStageToConnector=ke,exports.createBlock=g,exports.executeStepFunction=ze,exports.getActionFromUrl=_,exports.getActionsMeta=Le,exports.getActionsMetaFromConnectors=Re,exports.getRefreshTokenExpiresIn=De,exports.getTokenExpiresIn=Ee,exports.isConnectorReleased=Oe,exports.loadConnector=x,exports.parseActionInputs=R,exports.parseYamlConnector=I,exports.runAction=X,exports.runConnectorActionById=_t,exports.runConnectorActionByPath=bt,exports.runStepAction=J,exports.runTestActions=St,exports.supportsRefreshAuthentication=Te,exports.validateYamlConnector=je;
|
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{
|
|
2
|
-
`),r=
|
|
3
|
-
`)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},
|
|
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},
|
|
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{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,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}`}},ue=class extends N{line;constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},de=class extends N{issues;constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},fe=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}},pe=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 me=25,he=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}`)}},ge=()=>{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},_e={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()},P=o.discriminatedUnion(`type`,[s({..._e,type:o.enum([`text`,`password`])}),s({..._e,type:o.literal(`select`),options:s({value:o.string(),label:o.string()}).array()})]),F=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(()=>F).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({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: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:F.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(),action:L.extend({actionType: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:P.array().optional(),setupFields:P.array().optional(),refreshAuthentication:ve.optional(),testActions:s({action:o.string().or(L),condition:o.string().optional(),required:o.boolean().default(!0)}).array().optional()})).array().optional(),actions: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.actions=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 N)throw e;let t=e.message,n=t.match(/at line (\d+)/),r=n?parseInt(n[1],10):1;throw new ue(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,testActions: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.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})}},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,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},Ee=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,De=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,Oe=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},ke=e=>{if(!(e.actionType===`refresh_token`||t(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},Ae=e=>{let t={success:he(e.actionType),errors:ge()},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.actions?.reduce((n,r)=>{let i=Ee(r),a=De(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=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,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: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.actionId,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 fe(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.actionType===`list`,n=e.cursor??{enabled:t,pageSize:me};return{enabled:n.enabled&&t,pageSize:n.pageSize}},Ie=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}},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 de(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 pe(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?.action;if(a(r))return{action: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=[])=>H(t,e.releaseStage),Ge=(e,t=[])=>{if(!We(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}},Ke=e=>e??`ga`,H=(e=[],t)=>{let n=Ke(t);return e.includes(n)},qe=e=>{try{let t=R(e);return{success:!0,connector:t}}catch(n){if(n instanceof de){let r=n.issues,i=[];return r.forEach(n=>{let r=n?.keys?.[0],a=t(r)?n.path:[...n.path,r],o=Je(a,e);i.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(n instanceof ue)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 fe){let t=Ye(n.actionId,n.stepId,n.functionName,!1,e);return{success:!1,errors:[{line:t,message:n.message,field:void 0}]}}else if(n instanceof pe){let r=n.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=t(a)?r.path:[...r.path,a],s=Ye(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}]}},Je=(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},Ye=(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}`}},Xe=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`}},Qe=class extends U{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const $e=(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}},et=(e,t)=>e.map(e=>$e(e,t)),tt=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()}),nt=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions,rt=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`))lt(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)}},it=(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}},at=(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]})},ot=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},st=(e,t,n,r,i)=>{n.every(ot)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},ct=(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})},lt=(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}=it(o,t,r,i);at(n,t,s,a),st(n,t,s,c,a)}catch(e){ct(e,t,i)}},q=`remote_`,ut=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=>dt(e,n)):dt(i,n);return{...e,outputs:{...e.outputs??{},[r]:a}}},dt=(e,t)=>{let n=ft(e,t),i=J(n);return{...e,...r(i)?i:{}}},ft=(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}},pt=e=>e===`id`||/.+_id(s)?$/.test(e),mt=e=>Array.isArray(e)&&e.every(e=>i(e)&&e.length>0),ht=(e,t)=>S(e)||t.startsWith(q),gt=(e,t)=>{try{return b({key:e,value:t},{version:m})}catch{return t}},_t=(e,t,n)=>{let r=t.map(t=>i(t)&&t.length>0&&!S(t)?gt(e,t):t);n[e]=r,n[`${q}${e}`]=t},vt=(e,t,n)=>{if(ht(t,e))return;let r=b({key:e,value:t},{version:m});n[e]=r,n[`remote_${e}`]=t},yt=(e,t,n)=>{mt(t)?_t(e,t,n):i(t)&&t.length>0&&vt(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)),pt(n)&&yt(n,i,t);return t},bt=(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},xt=(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}},St=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=xt,encodeResultCompositeIds:r=ut,decodeInputCompositeIds:i=rt})=>{let a=i(e),o=await Ot({block:a,buildStepFunction:t,virtualPaginateResultFn:n});return r(o)},Ct=(e,t)=>e.condition?!E(e.condition,t):!1,wt=(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??{}},Tt=(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},Et=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(Ct(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=wt(o,r,t),u=await c({block:r,params:l});if(u.successful===!1)return Tt(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})},Dt=(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`}}},Ot=async({block:e,buildStepFunction:t=v.build,virtualPaginateResultFn:n=xt})=>{let r=e.action?.steps||{},i={...e},a=Object.keys(r),o=bt(e,me),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 Et(t,e,r,i,s,c),At({block:i,stepId:t,startTime:n,endTime:new Date})}let l=e.action?.result?kt(e.action.result,i):void 0,u=e.action?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return Dt(e,i,s,l,u)},kt=(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}}}),At=({block:e,stepId:n,startTime:r,endTime:i})=>{let a=e.olapClient;if(t(a?.recordStep))return;let o=St(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=V,getTestActionsFn:h=nt,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 Xe(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 jt(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 Mt(d,M);return $({block:e}),e}}let n=await jt(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 Mt(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=Nt(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})},jt=async(e,t)=>{let n=await e({...t,inputs:void 0,action:void 0,nextCursor:void 0});return{...n,response:{successful:!0,statusCode:200}}},Mt=async(e,t)=>{let n=await e({...t,inputs:void 0,action:void 0,nextCursor:void 0});return{...n,response:{successful:!1,statusCode:500}}},Nt=(e,t)=>{let n=e?.next,r=a(n)&&t.actionType===`list`?x(n):void 0;if(r===null)throw new Qe(t,`Invalid cursor.`);return r},$=({block:e})=>{let n=e.olapClient;if(t(n?.recordAction))return;let r=St(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)},Pt=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}),Ft=`stackone://internal//`,It=`${Ft}refresh_token`,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,getActionFromUrlFn:d=k,getActionForRefreshAuthenticationFn:f=V,parseActionInputsFn:p=B,createBlockContextFn:m=G,createBlockFn:h=O,runStepActionFn:g=Y})=>{let _=Rt(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},Rt=e=>e===It,zt=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=R,getTestActionsFn:a=nt,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,Ge as applyReleaseStageToConnector,O as createBlock,tt as executeStepFunction,k as getActionFromUrl,$e as getActionsMeta,et as getActionsMetaFromConnectors,Ue as getRefreshTokenExpiresIn,He as getTokenExpiresIn,We as isConnectorReleased,oe as loadConnector,B as parseActionInputs,R as parseYamlConnector,Z as runAction,Pt as runConnectorActionById,Lt as runConnectorActionByPath,Y as runStepAction,zt as runTestActions,Ve as supportsRefreshAuthentication,qe as validateYamlConnector};
|