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