@superblocksteam/shared 0.9576.2 → 0.9577.1
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.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins/templates/adls.d.ts.map +1 -1
- package/dist/plugins/templates/adls.js +2 -1
- package/dist/plugins/templates/adls.js.map +1 -1
- package/dist/plugins/templates/googleAnalytics.d.ts.map +1 -1
- package/dist/plugins/templates/googleAnalytics.js +2 -0
- package/dist/plugins/templates/googleAnalytics.js.map +1 -1
- package/dist/plugins/templates/googleDrive.d.ts.map +1 -1
- package/dist/plugins/templates/googleDrive.js +2 -0
- package/dist/plugins/templates/googleDrive.js.map +1 -1
- package/dist/plugins/templates/gsheets.d.ts.map +1 -1
- package/dist/plugins/templates/gsheets.js +3 -2
- package/dist/plugins/templates/gsheets.js.map +1 -1
- package/dist/plugins/templates/javascript.js +1 -1
- package/dist/plugins/templates/kafka.d.ts.map +1 -1
- package/dist/plugins/templates/kafka.js +9 -4
- package/dist/plugins/templates/kafka.js.map +1 -1
- package/dist/plugins/templates/kinesis.d.ts.map +1 -1
- package/dist/plugins/templates/kinesis.js +2 -1
- package/dist/plugins/templates/kinesis.js.map +1 -1
- package/dist/plugins/templates/openai_v2.d.ts.map +1 -1
- package/dist/plugins/templates/openai_v2.js +1 -0
- package/dist/plugins/templates/openai_v2.js.map +1 -1
- package/dist/plugins/templates/redis.d.ts.map +1 -1
- package/dist/plugins/templates/redis.js +2 -2
- package/dist/plugins/templates/redis.js.map +1 -1
- package/dist/plugins/templates/restApi.js +1 -1
- package/dist/plugins/templates/restApi.js.map +1 -1
- package/dist/plugins/templates/restApiIntegration.js +1 -1
- package/dist/plugins/templates/restApiIntegration.js.map +1 -1
- package/dist/plugins/templates/secrets/akeylessSecretsManager.js +1 -1
- package/dist/plugins/templates/secrets/akeylessSecretsManager.js.map +1 -1
- package/dist/plugins/templates/secrets/awsSecretsManager.js +1 -1
- package/dist/plugins/templates/secrets/awsSecretsManager.js.map +1 -1
- package/dist/plugins/templates/secrets/gcpSecretsManager.js +1 -1
- package/dist/plugins/templates/secrets/gcpSecretsManager.js.map +1 -1
- package/dist/plugins/templates/secrets/hashicorpVault.js +1 -1
- package/dist/plugins/templates/secrets/hashicorpVault.js.map +1 -1
- package/dist/plugins/templates/shared/auth.js +4 -4
- package/dist/plugins/templates/shared/auth.js.map +1 -1
- package/dist/plugins/templates/smtp.d.ts.map +1 -1
- package/dist/plugins/templates/smtp.js +2 -1
- package/dist/plugins/templates/smtp.js.map +1 -1
- package/dist/plugins/templates/snowflakecortex.d.ts.map +1 -1
- package/dist/plugins/templates/snowflakecortex.js +1 -0
- package/dist/plugins/templates/snowflakecortex.js.map +1 -1
- package/dist/plugins/templates/snowflakepostgres.js +1 -1
- package/dist/plugins/templates/snowflakepostgres.js.map +1 -1
- package/dist/plugins/templates/superblocks-ocr.d.ts.map +1 -1
- package/dist/plugins/templates/superblocks-ocr.js +2 -1
- package/dist/plugins/templates/superblocks-ocr.js.map +1 -1
- package/dist/types/ai/quota-paywall.d.ts +2 -2
- package/dist/types/ai/quota-paywall.d.ts.map +1 -1
- package/dist/types/ai/quota-paywall.js +10 -6
- package/dist/types/ai/quota-paywall.js.map +1 -1
- package/dist/types/audit/audit.d.ts +2 -1
- package/dist/types/audit/audit.d.ts.map +1 -1
- package/dist/types/audit/audit.js +1 -0
- package/dist/types/audit/audit.js.map +1 -1
- package/dist/types/audit/ocsf.js +1 -1
- package/dist/types/audit/ocsf.js.map +1 -1
- package/dist/types/billing/billing.d.ts +2 -0
- package/dist/types/billing/billing.d.ts.map +1 -1
- package/dist/types/billing/billing.js +15 -0
- package/dist/types/billing/billing.js.map +1 -1
- package/dist/types/datasource/index.d.ts +1 -0
- package/dist/types/datasource/index.d.ts.map +1 -1
- package/dist/types/datasource/index.js.map +1 -1
- package/dist/types/repository/index.d.ts +2 -1
- package/dist/types/repository/index.d.ts.map +1 -1
- package/dist/types/repository/index.js +8 -0
- package/dist/types/repository/index.js.map +1 -1
- package/dist/utils/azure-devops-workflow.d.ts +4 -0
- package/dist/utils/azure-devops-workflow.d.ts.map +1 -0
- package/dist/utils/azure-devops-workflow.js +37 -0
- package/dist/utils/azure-devops-workflow.js.map +1 -0
- package/dist/utils/git-url.d.ts +3 -0
- package/dist/utils/git-url.d.ts.map +1 -1
- package/dist/utils/git-url.js +43 -9
- package/dist/utils/git-url.js.map +1 -1
- package/dist/utils/git-url.test.js +9 -1
- package/dist/utils/git-url.test.js.map +1 -1
- package/dist/utils/pageFixtures/v6/nested_modal.js +3 -3
- package/dist/utils/pageFixtures/v6/nested_modal.js.map +1 -1
- package/dist/utils/pageFixtures/v6/with_2_modals.js +6 -6
- package/dist/utils/pageFixtures/v6/with_2_modals.js.map +1 -1
- package/dist/utils/pageFixtures/v6/with_slideouts.js +1 -1
- package/dist/utils/pageFixtures/v6/with_slideouts.js.map +1 -1
- package/dist/utils/pageFixtures/v7/canvases.js +2 -2
- package/dist/utils/pageFixtures/v7/canvases.js.map +1 -1
- package/dist-esm/index.d.ts +1 -0
- package/dist-esm/index.d.ts.map +1 -1
- package/dist-esm/index.js +1 -0
- package/dist-esm/index.js.map +1 -1
- package/dist-esm/plugins/templates/adls.d.ts.map +1 -1
- package/dist-esm/plugins/templates/adls.js +3 -2
- package/dist-esm/plugins/templates/adls.js.map +1 -1
- package/dist-esm/plugins/templates/googleAnalytics.d.ts.map +1 -1
- package/dist-esm/plugins/templates/googleAnalytics.js +2 -0
- package/dist-esm/plugins/templates/googleAnalytics.js.map +1 -1
- package/dist-esm/plugins/templates/googleDrive.d.ts.map +1 -1
- package/dist-esm/plugins/templates/googleDrive.js +2 -0
- package/dist-esm/plugins/templates/googleDrive.js.map +1 -1
- package/dist-esm/plugins/templates/gsheets.d.ts.map +1 -1
- package/dist-esm/plugins/templates/gsheets.js +4 -3
- package/dist-esm/plugins/templates/gsheets.js.map +1 -1
- package/dist-esm/plugins/templates/javascript.js +1 -1
- package/dist-esm/plugins/templates/kafka.d.ts.map +1 -1
- package/dist-esm/plugins/templates/kafka.js +10 -5
- package/dist-esm/plugins/templates/kafka.js.map +1 -1
- package/dist-esm/plugins/templates/kinesis.d.ts.map +1 -1
- package/dist-esm/plugins/templates/kinesis.js +3 -2
- package/dist-esm/plugins/templates/kinesis.js.map +1 -1
- package/dist-esm/plugins/templates/openai_v2.d.ts.map +1 -1
- package/dist-esm/plugins/templates/openai_v2.js +2 -1
- package/dist-esm/plugins/templates/openai_v2.js.map +1 -1
- package/dist-esm/plugins/templates/redis.d.ts.map +1 -1
- package/dist-esm/plugins/templates/redis.js +3 -3
- package/dist-esm/plugins/templates/redis.js.map +1 -1
- package/dist-esm/plugins/templates/restApi.js +1 -1
- package/dist-esm/plugins/templates/restApi.js.map +1 -1
- package/dist-esm/plugins/templates/restApiIntegration.js +1 -1
- package/dist-esm/plugins/templates/restApiIntegration.js.map +1 -1
- package/dist-esm/plugins/templates/secrets/akeylessSecretsManager.js +1 -1
- package/dist-esm/plugins/templates/secrets/akeylessSecretsManager.js.map +1 -1
- package/dist-esm/plugins/templates/secrets/awsSecretsManager.js +1 -1
- package/dist-esm/plugins/templates/secrets/awsSecretsManager.js.map +1 -1
- package/dist-esm/plugins/templates/secrets/gcpSecretsManager.js +1 -1
- package/dist-esm/plugins/templates/secrets/gcpSecretsManager.js.map +1 -1
- package/dist-esm/plugins/templates/secrets/hashicorpVault.js +1 -1
- package/dist-esm/plugins/templates/secrets/hashicorpVault.js.map +1 -1
- package/dist-esm/plugins/templates/shared/auth.js +4 -4
- package/dist-esm/plugins/templates/shared/auth.js.map +1 -1
- package/dist-esm/plugins/templates/smtp.d.ts.map +1 -1
- package/dist-esm/plugins/templates/smtp.js +3 -2
- package/dist-esm/plugins/templates/smtp.js.map +1 -1
- package/dist-esm/plugins/templates/snowflakecortex.d.ts.map +1 -1
- package/dist-esm/plugins/templates/snowflakecortex.js +2 -1
- package/dist-esm/plugins/templates/snowflakecortex.js.map +1 -1
- package/dist-esm/plugins/templates/snowflakepostgres.js +1 -1
- package/dist-esm/plugins/templates/snowflakepostgres.js.map +1 -1
- package/dist-esm/plugins/templates/superblocks-ocr.d.ts.map +1 -1
- package/dist-esm/plugins/templates/superblocks-ocr.js +3 -2
- package/dist-esm/plugins/templates/superblocks-ocr.js.map +1 -1
- package/dist-esm/types/ai/quota-paywall.d.ts +2 -2
- package/dist-esm/types/ai/quota-paywall.d.ts.map +1 -1
- package/dist-esm/types/ai/quota-paywall.js +9 -5
- package/dist-esm/types/ai/quota-paywall.js.map +1 -1
- package/dist-esm/types/audit/audit.d.ts +2 -1
- package/dist-esm/types/audit/audit.d.ts.map +1 -1
- package/dist-esm/types/audit/audit.js +1 -0
- package/dist-esm/types/audit/audit.js.map +1 -1
- package/dist-esm/types/audit/ocsf.js +1 -1
- package/dist-esm/types/audit/ocsf.js.map +1 -1
- package/dist-esm/types/billing/billing.d.ts +2 -0
- package/dist-esm/types/billing/billing.d.ts.map +1 -1
- package/dist-esm/types/billing/billing.js +13 -0
- package/dist-esm/types/billing/billing.js.map +1 -1
- package/dist-esm/types/datasource/index.d.ts +1 -0
- package/dist-esm/types/datasource/index.d.ts.map +1 -1
- package/dist-esm/types/datasource/index.js.map +1 -1
- package/dist-esm/types/repository/index.d.ts +2 -1
- package/dist-esm/types/repository/index.d.ts.map +1 -1
- package/dist-esm/types/repository/index.js +8 -0
- package/dist-esm/types/repository/index.js.map +1 -1
- package/dist-esm/utils/azure-devops-workflow.d.ts +4 -0
- package/dist-esm/utils/azure-devops-workflow.d.ts.map +1 -0
- package/dist-esm/utils/azure-devops-workflow.js +32 -0
- package/dist-esm/utils/azure-devops-workflow.js.map +1 -0
- package/dist-esm/utils/git-url.d.ts +3 -0
- package/dist-esm/utils/git-url.d.ts.map +1 -1
- package/dist-esm/utils/git-url.js +40 -7
- package/dist-esm/utils/git-url.js.map +1 -1
- package/dist-esm/utils/git-url.test.js +9 -1
- package/dist-esm/utils/git-url.test.js.map +1 -1
- package/dist-esm/utils/pageFixtures/v6/nested_modal.js +3 -3
- package/dist-esm/utils/pageFixtures/v6/nested_modal.js.map +1 -1
- package/dist-esm/utils/pageFixtures/v6/with_2_modals.js +6 -6
- package/dist-esm/utils/pageFixtures/v6/with_2_modals.js.map +1 -1
- package/dist-esm/utils/pageFixtures/v6/with_slideouts.js +1 -1
- package/dist-esm/utils/pageFixtures/v6/with_slideouts.js.map +1 -1
- package/dist-esm/utils/pageFixtures/v7/canvases.js +2 -2
- package/dist-esm/utils/pageFixtures/v7/canvases.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/pageMigrations/migrations/v6to7/__snapshots__/v6to7.test.ts.snap +10 -10
- package/src/plugins/templates/adls.ts +3 -2
- package/src/plugins/templates/googleAnalytics.ts +2 -0
- package/src/plugins/templates/googleDrive.ts +2 -0
- package/src/plugins/templates/gsheets.ts +4 -3
- package/src/plugins/templates/javascript.ts +1 -1
- package/src/plugins/templates/kafka.ts +11 -6
- package/src/plugins/templates/kinesis.ts +3 -2
- package/src/plugins/templates/openai_v2.ts +2 -1
- package/src/plugins/templates/redis.ts +4 -5
- package/src/plugins/templates/restApi.ts +1 -1
- package/src/plugins/templates/restApiIntegration.ts +1 -1
- package/src/plugins/templates/secrets/akeylessSecretsManager.ts +1 -1
- package/src/plugins/templates/secrets/awsSecretsManager.ts +1 -1
- package/src/plugins/templates/secrets/gcpSecretsManager.ts +1 -1
- package/src/plugins/templates/secrets/hashicorpVault.ts +1 -1
- package/src/plugins/templates/shared/auth.ts +4 -4
- package/src/plugins/templates/smtp.ts +3 -2
- package/src/plugins/templates/snowflakecortex.ts +2 -1
- package/src/plugins/templates/snowflakepostgres.ts +1 -1
- package/src/plugins/templates/superblocks-ocr.ts +3 -2
- package/src/types/ai/quota-paywall.ts +16 -6
- package/src/types/audit/audit.ts +2 -1
- package/src/types/audit/ocsf.ts +1 -1
- package/src/types/billing/billing.ts +17 -0
- package/src/types/datasource/index.ts +1 -0
- package/src/types/repository/index.ts +9 -1
- package/src/utils/azure-devops-workflow.ts +36 -0
- package/src/utils/git-url.test.ts +12 -1
- package/src/utils/git-url.ts +41 -8
- package/src/utils/pageFixtures/v6/nested_modal.ts +3 -3
- package/src/utils/pageFixtures/v6/with_2_modals.ts +6 -6
- package/src/utils/pageFixtures/v6/with_slideouts.ts +1 -1
- package/src/utils/pageFixtures/v7/canvases.ts +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormItem, EditorLanguage, FormComponentType, InputDataType, Plugin, PluginResponseType, PluginType } from '../../types/index.js';
|
|
2
|
-
import { PUBLIC_INTEGRATIONS_LOGO_URL
|
|
2
|
+
import { PUBLIC_INTEGRATIONS_LOGO_URL } from './constants.js';
|
|
3
3
|
|
|
4
4
|
const KinesisPluginVersions = {
|
|
5
5
|
V1: '0.0.1'
|
|
@@ -108,7 +108,8 @@ export const KinesisPlugin: Plugin = {
|
|
|
108
108
|
moduleName: KINESIS_MODULE_NAME,
|
|
109
109
|
modulePath: 'plugins/kinesis/KinesisPlugin',
|
|
110
110
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/kinesis.png`,
|
|
111
|
-
|
|
111
|
+
// TODO(docs-v2): no kinesis page exists in docs-v2; add one or remove this line
|
|
112
|
+
docsUrl: undefined,
|
|
112
113
|
type: PluginType.API,
|
|
113
114
|
responseType: PluginResponseType.JSON,
|
|
114
115
|
hasRawRequest: false,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ExtendedIntegrationPluginId, Plugin } from '../../types/index.js';
|
|
2
|
-
import {
|
|
2
|
+
import { DOCS_BASE_URL, PUBLIC_INTEGRATIONS_CDN_URL, PUBLIC_INTEGRATIONS_LOGO_URL } from './constants.js';
|
|
3
3
|
import { getNativeOpenApiPlugin } from './shared/index.js';
|
|
4
4
|
|
|
5
5
|
export const OpenaiV2Plugin: Plugin = getNativeOpenApiPlugin({
|
|
6
6
|
name: 'OpenAI',
|
|
7
7
|
id: ExtendedIntegrationPluginId.OPENAI_V2,
|
|
8
|
+
docsURL: `${DOCS_BASE_URL}/openai`,
|
|
8
9
|
openApiSpecURL: `${PUBLIC_INTEGRATIONS_CDN_URL}/openapi/openai.yaml`,
|
|
9
10
|
logoURL: `${PUBLIC_INTEGRATIONS_LOGO_URL}/openai_logo.png`,
|
|
10
11
|
authMethods: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormComponentType, InputDataType, Plugin, PluginResponseType, PluginType } from '../../types/index.js';
|
|
2
|
-
import { PUBLIC_INTEGRATIONS_LOGO_URL
|
|
2
|
+
import { PUBLIC_INTEGRATIONS_LOGO_URL } from './constants.js';
|
|
3
3
|
|
|
4
4
|
const RedisPluginVersions = {
|
|
5
5
|
V1: '0.0.1'
|
|
@@ -75,11 +75,10 @@ const makeDropdownItem = (value: string, displayName?: string, subText?: string)
|
|
|
75
75
|
};
|
|
76
76
|
};
|
|
77
77
|
|
|
78
|
-
//
|
|
78
|
+
// TODO(docs-v2): no redis page exists in docs-v2; add one and restore docsUrl
|
|
79
|
+
export const RedisPlugin = generateRedisPlugin('redis', 'Redis', `${PUBLIC_INTEGRATIONS_LOGO_URL}/redis.png`);
|
|
79
80
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
function generateRedisPlugin(id: string, name: string, iconLocation: string, docsUrl: string): Plugin {
|
|
81
|
+
function generateRedisPlugin(id: string, name: string, iconLocation: string, docsUrl?: string): Plugin {
|
|
83
82
|
return {
|
|
84
83
|
id,
|
|
85
84
|
name,
|
|
@@ -30,7 +30,7 @@ export const RestApiPlugin: Plugin = {
|
|
|
30
30
|
moduleName: 'RestApiPlugin',
|
|
31
31
|
modulePath: 'plugins/restApi/RestApiPlugin',
|
|
32
32
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/restapi.png`,
|
|
33
|
-
docsUrl: `${DOCS_BASE_URL}/rest-
|
|
33
|
+
docsUrl: `${DOCS_BASE_URL}/rest-api`,
|
|
34
34
|
isStreamable: true,
|
|
35
35
|
type: PluginType.API,
|
|
36
36
|
responseType: PluginResponseType.JSON,
|
|
@@ -27,7 +27,7 @@ export const RestApiIntegrationPlugin: Plugin = {
|
|
|
27
27
|
moduleName: 'RestApiIntegrationPlugin',
|
|
28
28
|
modulePath: 'plugins/restApiIntegration/RestApiIntegrationPlugin',
|
|
29
29
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/restapi.png`,
|
|
30
|
-
docsUrl: `${DOCS_BASE_URL}/rest-
|
|
30
|
+
docsUrl: `${DOCS_BASE_URL}/rest-api`,
|
|
31
31
|
isStreamable: true,
|
|
32
32
|
type: PluginType.API,
|
|
33
33
|
responseType: PluginResponseType.JSON,
|
|
@@ -11,7 +11,7 @@ export const AkeylessSecretsManagerPlugin: Plugin = {
|
|
|
11
11
|
moduleName: 'AkeylessSecretsManagerPlugin',
|
|
12
12
|
modulePath: '',
|
|
13
13
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/akeyless.png`,
|
|
14
|
-
docsUrl: 'https://docs.superblocks.com/development-lifecycle/secrets/akeyless-secrets-manager',
|
|
14
|
+
docsUrl: 'https://docs-legacy.superblocks.com/development-lifecycle/secrets/akeyless-secrets-manager',
|
|
15
15
|
type: PluginType.DB,
|
|
16
16
|
responseType: PluginResponseType.JSON,
|
|
17
17
|
hasRawRequest: false,
|
|
@@ -19,7 +19,7 @@ export const AWSSecretsManagerPlugin: Plugin = {
|
|
|
19
19
|
moduleName: 'AWSSecretsManagerPlugin',
|
|
20
20
|
modulePath: '',
|
|
21
21
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/aws_secrets_manager.psd.png`,
|
|
22
|
-
docsUrl: 'https://docs.superblocks.com/development-lifecycle/secrets/aws-secrets-manager',
|
|
22
|
+
docsUrl: 'https://docs-legacy.superblocks.com/development-lifecycle/secrets/aws-secrets-manager',
|
|
23
23
|
type: PluginType.DB,
|
|
24
24
|
responseType: PluginResponseType.JSON,
|
|
25
25
|
hasRawRequest: false,
|
|
@@ -20,7 +20,7 @@ export const GCPSecretsManagerPlugin: Plugin = {
|
|
|
20
20
|
moduleName: 'GCPSecretsManagerPlugin',
|
|
21
21
|
modulePath: '',
|
|
22
22
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/secret_manager_1.png`,
|
|
23
|
-
docsUrl: 'https://docs.superblocks.com/development-lifecycle/secrets/google-secrets-manager',
|
|
23
|
+
docsUrl: 'https://docs-legacy.superblocks.com/development-lifecycle/secrets/google-secrets-manager',
|
|
24
24
|
type: PluginType.DB,
|
|
25
25
|
responseType: PluginResponseType.JSON,
|
|
26
26
|
hasRawRequest: false,
|
|
@@ -11,7 +11,7 @@ export const HashicorpVaultPlugin: Plugin = {
|
|
|
11
11
|
moduleName: 'HashicorpVaultPlugin',
|
|
12
12
|
modulePath: '',
|
|
13
13
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/hashicorpvault.png`,
|
|
14
|
-
docsUrl: 'https://docs.superblocks.com/development-lifecycle/secrets/hashicorp-vault',
|
|
14
|
+
docsUrl: 'https://docs-legacy.superblocks.com/development-lifecycle/secrets/hashicorp-vault',
|
|
15
15
|
type: PluginType.DB,
|
|
16
16
|
responseType: PluginResponseType.JSON,
|
|
17
17
|
hasRawRequest: false,
|
|
@@ -246,7 +246,7 @@ export const authSections = ({
|
|
|
246
246
|
{
|
|
247
247
|
label: '',
|
|
248
248
|
messageTemplate: `The authorization header will be automatically generated when you send requests.
|
|
249
|
-
Learn more about [Basic Auth](https://docs.superblocks.com/integrations/authentication
|
|
249
|
+
Learn more about [Basic Auth](https://docs.superblocks.com/integrations/auth/authentication-types) authorization.`,
|
|
250
250
|
name: 'HTTPBasicAlert',
|
|
251
251
|
startVersion: startVersion,
|
|
252
252
|
componentType: FormComponentType.ALERT,
|
|
@@ -496,7 +496,7 @@ export const authSections = ({
|
|
|
496
496
|
[
|
|
497
497
|
{
|
|
498
498
|
label: '',
|
|
499
|
-
messageTemplate: `**Where do I get my firebase credentials and allow access to Superblocks?** [Superblocks - Firebase Docs](https://docs.superblocks.com/integrations/
|
|
499
|
+
messageTemplate: `**Where do I get my firebase credentials and allow access to Superblocks?** [Superblocks - Firebase Docs](https://docs.superblocks.com/integrations/auth/firebase)\\
|
|
500
500
|
Note: REST APIs authenticated with firebase cannot be used in Superblocks Workflows & Scheduled Jobs since both can be called headlessly without user interaction.`,
|
|
501
501
|
name: 'FirebaseAlert',
|
|
502
502
|
startVersion: startVersion,
|
|
@@ -561,7 +561,7 @@ export const authSections = ({
|
|
|
561
561
|
messageTemplate: `Use **{{firebase.token}}** below to refer to the firebase
|
|
562
562
|
authentication token & use **{{firebase.userId}}** to refer to the
|
|
563
563
|
currently authenticated user's ID.`,
|
|
564
|
-
name: '
|
|
564
|
+
name: 'FirebaseAlertToken',
|
|
565
565
|
startVersion: startVersion,
|
|
566
566
|
componentType: FormComponentType.ALERT,
|
|
567
567
|
display: {
|
|
@@ -939,7 +939,7 @@ export const authSections = ({
|
|
|
939
939
|
{
|
|
940
940
|
label: '',
|
|
941
941
|
messageTemplate: `Send your token to requests by adding it to a header or parameter using **\`{{ oauth.token }}\`**.
|
|
942
|
-
Learn more in our docs on [using OAuth2.0 in Superblocks](https://docs.superblocks.com/integrations/
|
|
942
|
+
Learn more in our docs on [using OAuth2.0 in Superblocks](https://docs.superblocks.com/integrations/auth/oauth-20).`,
|
|
943
943
|
name: 'OAuth2PasswordAlert',
|
|
944
944
|
startVersion,
|
|
945
945
|
componentType: FormComponentType.ALERT,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormComponentType, FormItem, InputDataType, Plugin, PluginResponseType, PluginType } from '../../types/index.js';
|
|
2
|
-
import { PUBLIC_INTEGRATIONS_LOGO_URL
|
|
2
|
+
import { PUBLIC_INTEGRATIONS_LOGO_URL } from './constants.js';
|
|
3
3
|
|
|
4
4
|
// TODO (jason) change these constant values as these are pulled from Sendgrid
|
|
5
5
|
// superblocksmail is set up as a verified domain in Sendgrid under a different account than superblockshq.com.
|
|
@@ -117,7 +117,8 @@ export const SmtpPlugin: Plugin = {
|
|
|
117
117
|
moduleName: 'SmtpPlugin',
|
|
118
118
|
modulePath: 'plugins/smtp/SmtpPlugin',
|
|
119
119
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/smtp.png`,
|
|
120
|
-
|
|
120
|
+
// TODO(docs-v2): no smtp page exists in docs-v2; add one or remove this line
|
|
121
|
+
docsUrl: undefined,
|
|
121
122
|
type: PluginType.API,
|
|
122
123
|
responseType: PluginResponseType.JSON,
|
|
123
124
|
hasRawRequest: true,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ExtendedIntegrationPluginId, Plugin } from '../../types/index.js';
|
|
2
|
-
import { PUBLIC_INTEGRATIONS_CDN_URL, PUBLIC_INTEGRATIONS_LOGO_URL } from './constants.js';
|
|
2
|
+
import { DOCS_BASE_URL, PUBLIC_INTEGRATIONS_CDN_URL, PUBLIC_INTEGRATIONS_LOGO_URL } from './constants.js';
|
|
3
3
|
import { getNativeOpenApiPlugin } from './shared/index.js';
|
|
4
4
|
|
|
5
5
|
export const SnowflakeCortexPlugin: Plugin = getNativeOpenApiPlugin({
|
|
6
6
|
name: 'Snowflake Cortex',
|
|
7
7
|
id: ExtendedIntegrationPluginId.SNOWFLAKE_CORTEX,
|
|
8
|
+
docsURL: `${DOCS_BASE_URL}/snowflake-cortex`,
|
|
8
9
|
openApiSpecURL: `${PUBLIC_INTEGRATIONS_CDN_URL}/openapi/snowflake-cortex.yaml`,
|
|
9
10
|
logoURL: `${PUBLIC_INTEGRATIONS_LOGO_URL}/snowflake.png`,
|
|
10
11
|
authMethods: {
|
|
@@ -103,7 +103,7 @@ export const SnowflakePostgresPlugin: Plugin = {
|
|
|
103
103
|
moduleName: 'SnowflakePostgresPlugin',
|
|
104
104
|
modulePath: 'plugins/snowflakepostgres/SnowflakePostgresPlugin',
|
|
105
105
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/snowflake.png`,
|
|
106
|
-
docsUrl: `${DOCS_BASE_URL}/
|
|
106
|
+
docsUrl: `${DOCS_BASE_URL}/snowflake-postgres`,
|
|
107
107
|
type: PluginType.DB,
|
|
108
108
|
responseType: PluginResponseType.TABLE,
|
|
109
109
|
hasRawRequest: true,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormComponentType, Plugin, PluginResponseType, PluginType } from '../../types/index.js';
|
|
2
|
-
import { PUBLIC_INTEGRATIONS_LOGO_URL
|
|
2
|
+
import { PUBLIC_INTEGRATIONS_LOGO_URL } from './constants.js';
|
|
3
3
|
|
|
4
4
|
const SuperblocksOcrPluginVersions = {
|
|
5
5
|
V1: '0.0.1'
|
|
@@ -28,7 +28,8 @@ export const SuperblocksOcrPlugin: Plugin = {
|
|
|
28
28
|
moduleName: 'SuperblocksOcrPlugin',
|
|
29
29
|
modulePath: 'plugins/superblocks-ocr/SuperblocksOcrPlugin',
|
|
30
30
|
iconLocation: `${PUBLIC_INTEGRATIONS_LOGO_URL}/ocr_logo.png`,
|
|
31
|
-
|
|
31
|
+
// TODO(docs-v2): no superblocks-ocr page exists in docs-v2; add one or remove this line
|
|
32
|
+
docsUrl: undefined,
|
|
32
33
|
type: PluginType.API,
|
|
33
34
|
responseType: PluginResponseType.JSON,
|
|
34
35
|
hasRawRequest: true,
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
export type AiQuotaPaywallReason =
|
|
1
|
+
export type AiQuotaPaywallReason =
|
|
2
|
+
| 'credit_limit_exceeded'
|
|
3
|
+
| 'deploy_quota_exceeded'
|
|
4
|
+
| 'no_seat_assigned'
|
|
5
|
+
| 'token_limit_exceeded'
|
|
6
|
+
| 'trial_expired';
|
|
2
7
|
|
|
3
8
|
export const getAiQuotaPaywallReasonFromMessage = (message: string): AiQuotaPaywallReason | undefined => {
|
|
4
9
|
const normalizedMessage = message.toLowerCase();
|
|
@@ -28,6 +33,10 @@ export const getAiQuotaPaywallReasonFromMessage = (message: string): AiQuotaPayw
|
|
|
28
33
|
return 'token_limit_exceeded';
|
|
29
34
|
}
|
|
30
35
|
|
|
36
|
+
if (normalizedMessage.includes('deploy_quota_exceeded')) {
|
|
37
|
+
return 'deploy_quota_exceeded';
|
|
38
|
+
}
|
|
39
|
+
|
|
31
40
|
if (normalizedMessage.includes('credit_limit_exceeded') || normalizedMessage.includes('organization has reached its ai usage limit')) {
|
|
32
41
|
return 'credit_limit_exceeded';
|
|
33
42
|
}
|
|
@@ -43,10 +52,7 @@ export const AI_QUOTA_PAYWALL_STRIPE_CHECKOUT_URL = 'https://buy.stripe.com/7sYe
|
|
|
43
52
|
|
|
44
53
|
export const AI_QUOTA_PAYWALL_CONTACT_SALES_EMAIL = 'sales@superblockshq.com';
|
|
45
54
|
|
|
46
|
-
|
|
47
|
-
// Surface the specific reason (buy a seat vs. increase org credits) so the
|
|
48
|
-
// email to the admin is actionable rather than generic.
|
|
49
|
-
export const AI_QUOTA_PAYWALL_CONTACT_SALES_MAILTO = 'mailto:sales@superblockshq.com?subject=Enterprise%20inquiry';
|
|
55
|
+
export const AI_QUOTA_PAYWALL_CONTACT_SALES_URL = 'https://www.superblocks.com/book-a-demo';
|
|
50
56
|
|
|
51
57
|
export const AI_QUOTA_PAYWALL_REASON_CONFIG: Record<AiQuotaPaywallReason, { title: string; subtitle: string }> = {
|
|
52
58
|
credit_limit_exceeded: {
|
|
@@ -64,6 +70,10 @@ export const AI_QUOTA_PAYWALL_REASON_CONFIG: Record<AiQuotaPaywallReason, { titl
|
|
|
64
70
|
trial_expired: {
|
|
65
71
|
title: 'Your free trial has ended',
|
|
66
72
|
subtitle: 'Upgrade to keep building with AI.'
|
|
73
|
+
},
|
|
74
|
+
deploy_quota_exceeded: {
|
|
75
|
+
title: 'Deploy limit reached',
|
|
76
|
+
subtitle: 'Your organization has reached its deployed app limit. Add more deployed apps to continue.'
|
|
67
77
|
}
|
|
68
78
|
};
|
|
69
79
|
|
|
@@ -90,7 +100,7 @@ export const AI_QUOTA_PAYWALL_ENTERPRISE_FEATURES = [
|
|
|
90
100
|
'Custom app hosting'
|
|
91
101
|
];
|
|
92
102
|
|
|
93
|
-
export const AI_QUOTA_PAYWALL_TEAMS_PLATFORM_FEATURES = ['Staging and production environments', '1
|
|
103
|
+
export const AI_QUOTA_PAYWALL_TEAMS_PLATFORM_FEATURES = ['Staging and production environments', '1 deployed app per team'];
|
|
94
104
|
|
|
95
105
|
export const AI_QUOTA_PAYWALL_ENTERPRISE_PLATFORM_FEATURES = [
|
|
96
106
|
'Deploy in your VPC (Hybrid or Cloud Prem)',
|
package/src/types/audit/audit.ts
CHANGED
|
@@ -59,7 +59,8 @@ export const ABANDONED_EXECUTION_THRESH_MINUTES = 30;
|
|
|
59
59
|
|
|
60
60
|
/** @deprecated Use OCSFClassUid / OCSFActivityId instead. */
|
|
61
61
|
export enum AuditLogEventType {
|
|
62
|
-
API_RUN
|
|
62
|
+
API_RUN,
|
|
63
|
+
INTEGRATION_QUERY
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
/** @deprecated Use OCSFAuditEvent instead. */
|
package/src/types/audit/ocsf.ts
CHANGED
|
@@ -212,7 +212,7 @@ export const AUDIT_EVENT_TYPE_CATALOG: AuditEventTypeEntry[] = [
|
|
|
212
212
|
category_uid: OCSFCategoryUid.APPLICATION_ACTIVITY,
|
|
213
213
|
category_name: 'APPLICATION_ACTIVITY',
|
|
214
214
|
resource_type: 'Integration',
|
|
215
|
-
operations: ['integration.create', 'integration.delete', 'integration.update']
|
|
215
|
+
operations: ['integration.create', 'integration.delete', 'integration.secret.view', 'integration.update']
|
|
216
216
|
},
|
|
217
217
|
{
|
|
218
218
|
class_uid: OCSFClassUid.ENTITY_MANAGEMENT,
|
|
@@ -11,6 +11,23 @@ export enum BillingPlan {
|
|
|
11
11
|
POC = 'POC'
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
const ENTERPRISE_LIKE_PLANS: ReadonlySet<BillingPlan> = new Set([
|
|
15
|
+
BillingPlan.ENTERPRISE,
|
|
16
|
+
BillingPlan.PRO,
|
|
17
|
+
BillingPlan.STARTER,
|
|
18
|
+
BillingPlan.POC
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
const TRIAL_LIKE_PLANS: ReadonlySet<BillingPlan> = new Set([BillingPlan.TRIAL, BillingPlan.FREE]);
|
|
22
|
+
|
|
23
|
+
export function isEnterpriseLikePlan(plan: BillingPlan | undefined | null): boolean {
|
|
24
|
+
return plan != null && ENTERPRISE_LIKE_PLANS.has(plan);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function isTrialLikePlan(plan: BillingPlan | undefined | null): boolean {
|
|
28
|
+
return plan != null && TRIAL_LIKE_PLANS.has(plan);
|
|
29
|
+
}
|
|
30
|
+
|
|
14
31
|
export type Billing = {
|
|
15
32
|
plan: BillingPlan;
|
|
16
33
|
isExpired: boolean;
|
|
@@ -341,6 +341,7 @@ export type RestApiDatasourceConfiguration = AuthenticatedHttpDatasourceConfig &
|
|
|
341
341
|
// This is part of the in-memory form, not persisted
|
|
342
342
|
AuthCodeExplanation?: string;
|
|
343
343
|
FirebaseAlert?: string;
|
|
344
|
+
FirebaseAlertToken?: string;
|
|
344
345
|
HTTPBasicAlert?: string;
|
|
345
346
|
'oauth-callback-alert'?: string;
|
|
346
347
|
'oauth-connect-button'?: string;
|
|
@@ -47,7 +47,8 @@ export type GitToken = {
|
|
|
47
47
|
|
|
48
48
|
export enum VcsProvider {
|
|
49
49
|
GITHUB = 'github',
|
|
50
|
-
GITLAB = 'gitlab'
|
|
50
|
+
GITLAB = 'gitlab',
|
|
51
|
+
AZURE_DEVOPS = 'azure_devops'
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
export type GitLabInstanceType = 'cloud' | 'self-hosted';
|
|
@@ -68,6 +69,9 @@ export const getGitProviderBaseUrl = (provider?: VcsProvider, token?: GitToken)
|
|
|
68
69
|
if (token?.instanceUrl) return token.instanceUrl;
|
|
69
70
|
return 'https://gitlab.com';
|
|
70
71
|
}
|
|
72
|
+
case VcsProvider.AZURE_DEVOPS: {
|
|
73
|
+
return 'https://dev.azure.com';
|
|
74
|
+
}
|
|
71
75
|
case VcsProvider.GITHUB:
|
|
72
76
|
default: {
|
|
73
77
|
return 'https://github.com';
|
|
@@ -77,5 +81,9 @@ export const getGitProviderBaseUrl = (provider?: VcsProvider, token?: GitToken)
|
|
|
77
81
|
|
|
78
82
|
export const getRepositoryUrl = (repository: RepositoryDto, token?: GitToken) => {
|
|
79
83
|
const baseUrl = getGitProviderBaseUrl(repository.provider, token);
|
|
84
|
+
if (repository.provider === VcsProvider.AZURE_DEVOPS) {
|
|
85
|
+
// Azure DevOps URL format: https://dev.azure.com/{organization}/{project}/_git/{repo}
|
|
86
|
+
return `${baseUrl}/${repository.owner}/_git/${repository.name}`;
|
|
87
|
+
}
|
|
80
88
|
return `${baseUrl}/${repository.owner}/${repository.name}`;
|
|
81
89
|
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DEFAULT_SUPERBLOCKS_DOMAIN, getSuperblocksDomainFromBaseUrl } from './github-workflow.js';
|
|
2
|
+
|
|
3
|
+
export function isAzureDevOpsRemoteUrl(remoteUrl: string): boolean {
|
|
4
|
+
return /(^git@ssh\.dev\.azure\.com:)|(^https?:\/\/([^@]+@)?dev\.azure\.com\/)|(^ssh:\/\/git@ssh\.dev\.azure\.com\/)/.test(
|
|
5
|
+
remoteUrl.trim()
|
|
6
|
+
);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function buildAzureDevOpsSuperblocksSyncPipeline(domain: string = DEFAULT_SUPERBLOCKS_DOMAIN): string {
|
|
10
|
+
return `trigger:
|
|
11
|
+
branches:
|
|
12
|
+
include:
|
|
13
|
+
- main
|
|
14
|
+
|
|
15
|
+
pool:
|
|
16
|
+
vmImage: ubuntu-latest
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- checkout: self
|
|
20
|
+
fetchDepth: 0
|
|
21
|
+
persistCredentials: false
|
|
22
|
+
|
|
23
|
+
- task: Bash@3
|
|
24
|
+
displayName: Sync to Superblocks
|
|
25
|
+
env:
|
|
26
|
+
SUPERBLOCKS_TOKEN: $(SUPERBLOCKS_TOKEN)
|
|
27
|
+
inputs:
|
|
28
|
+
targetType: inline
|
|
29
|
+
script: |
|
|
30
|
+
npx @superblocksteam/cli sync --token "$SUPERBLOCKS_TOKEN" --domain ${domain} --path . --sha $(Build.SourceVersion)
|
|
31
|
+
`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function buildAzureDevOpsSuperblocksSyncPipelineFromBaseUrl(superblocksBaseUrl: string): string {
|
|
35
|
+
return buildAzureDevOpsSuperblocksSyncPipeline(getSuperblocksDomainFromBaseUrl(superblocksBaseUrl));
|
|
36
|
+
}
|
|
@@ -48,11 +48,22 @@ describe('gitRemoteUrlToWeb', () => {
|
|
|
48
48
|
['https://github.com/org/repo', 'https://github.com/org/repo'],
|
|
49
49
|
['http://gitlab.com/org/repo.git', 'http://gitlab.com/org/repo'],
|
|
50
50
|
['git@github.com:org/repo.git', 'https://github.com/org/repo'],
|
|
51
|
-
['git@gitlab.com:group/sub/repo.git', 'https://gitlab.com/group/sub/repo']
|
|
51
|
+
['git@gitlab.com:group/sub/repo.git', 'https://gitlab.com/group/sub/repo'],
|
|
52
|
+
// Azure DevOps HTTPS with userinfo (clone URL default format)
|
|
53
|
+
['https://myorg@dev.azure.com/myorg/myproject/_git/myrepo', 'https://dev.azure.com/myorg/myproject/_git/myrepo'],
|
|
54
|
+
// Azure DevOps SSH formats
|
|
55
|
+
['git@ssh.dev.azure.com:v3/myorg/myproject/myrepo', 'https://dev.azure.com/myorg/myproject/_git/myrepo'],
|
|
56
|
+
['ssh://git@ssh.dev.azure.com/v3/myorg/myproject/myrepo', 'https://dev.azure.com/myorg/myproject/_git/myrepo']
|
|
52
57
|
])('converts %s → %s', (input, expected) => {
|
|
53
58
|
expect(gitRemoteUrlToWeb(input)).toBe(expected);
|
|
54
59
|
});
|
|
55
60
|
|
|
61
|
+
it('strips userinfo from HTTPS URLs', () => {
|
|
62
|
+
expect(gitRemoteUrlToWeb('https://myorg@dev.azure.com/myorg/myproject/_git/myrepo')).toBe(
|
|
63
|
+
'https://dev.azure.com/myorg/myproject/_git/myrepo'
|
|
64
|
+
);
|
|
65
|
+
});
|
|
66
|
+
|
|
56
67
|
it('returns null for unconvertible URLs', () => {
|
|
57
68
|
expect(gitRemoteUrlToWeb('not-a-url')).toBeNull();
|
|
58
69
|
});
|
package/src/utils/git-url.ts
CHANGED
|
@@ -5,14 +5,16 @@
|
|
|
5
5
|
* Used by both the UI and the vite-plugin-file-sync AI agent tooling.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
const HTTPS_GIT_URL_RE = /^https?:\/\/[^\s/$.?#]
|
|
8
|
+
const HTTPS_GIT_URL_RE = /^https?:\/\/[^\s/$.?#]+(?:\.[^\s/$.?#]+)+\/[^\s/$.?#]+(\/[^\s/$.?#]+)+(\.git)?\/?$/i;
|
|
9
9
|
const SSH_GIT_URL_RE = /^[\w-]+@[\w.-]+:[\w./-]+(\.git)?$/;
|
|
10
|
+
// ssh:// protocol format: ssh://git@host/path
|
|
11
|
+
const SSH_PROTOCOL_RE = /^ssh:\/\/[\w-]+@[\w.-]+(\/[\w./-]+)+(\.git)?\/?$/i;
|
|
10
12
|
|
|
11
13
|
export const GITHUB_PAT_SETTINGS_URL = 'https://github.com/settings/tokens';
|
|
12
14
|
|
|
13
15
|
export function isValidGitUrl(url: string): boolean {
|
|
14
16
|
const trimmed = url.trim();
|
|
15
|
-
return HTTPS_GIT_URL_RE.test(trimmed) || SSH_GIT_URL_RE.test(trimmed);
|
|
17
|
+
return HTTPS_GIT_URL_RE.test(trimmed) || SSH_GIT_URL_RE.test(trimmed) || SSH_PROTOCOL_RE.test(trimmed);
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
export function isGitHubUrl(url: string): boolean {
|
|
@@ -44,15 +46,43 @@ export function gitRemoteUrlToWeb(url: string): string | null {
|
|
|
44
46
|
try {
|
|
45
47
|
const parsed = new URL(trimmed);
|
|
46
48
|
if (parsed.protocol === 'https:' || parsed.protocol === 'http:') {
|
|
47
|
-
|
|
49
|
+
// Strip userinfo (e.g. "org@" in Azure DevOps clone URLs) so the
|
|
50
|
+
// result is a plain browser-friendly URL.
|
|
51
|
+
parsed.username = '';
|
|
52
|
+
parsed.password = '';
|
|
53
|
+
return parsed.href.replace(/\/+$/, '').replace(/\.git\s*$/, '');
|
|
54
|
+
}
|
|
55
|
+
// ssh:// protocol format: ssh://git@host/path
|
|
56
|
+
if (parsed.protocol === 'ssh:') {
|
|
57
|
+
const host = parsed.hostname;
|
|
58
|
+
const path = parsed.pathname.replace(/\.git\s*$/, '');
|
|
59
|
+
// Azure DevOps SSH: ssh://git@ssh.dev.azure.com/v3/org/project/repo
|
|
60
|
+
if (host === 'ssh.dev.azure.com') {
|
|
61
|
+
const azureMatch = path.match(/^\/v3\/([^/]+)\/([^/]+)\/(.+?)$/);
|
|
62
|
+
if (azureMatch) {
|
|
63
|
+
return `https://dev.azure.com/${azureMatch[1]}/${azureMatch[2]}/_git/${azureMatch[3]}`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Generic ssh:// → https:// (GitHub, GitLab, etc.)
|
|
67
|
+
return `https://${host}${path}`;
|
|
48
68
|
}
|
|
49
69
|
} catch {
|
|
50
70
|
// Not a standard URL — try SSH
|
|
51
71
|
}
|
|
52
72
|
|
|
73
|
+
// SCP-style SSH: git@host:org/repo.git → https://host/org/repo
|
|
53
74
|
const sshMatch = trimmed.match(/^[\w-]+@([\w.-]+):(.+?)(?:\.git)?\s*$/);
|
|
54
75
|
if (sshMatch?.[1] && sshMatch[2]) {
|
|
55
|
-
|
|
76
|
+
const host = sshMatch[1];
|
|
77
|
+
const path = sshMatch[2];
|
|
78
|
+
// Azure DevOps SSH: git@ssh.dev.azure.com:v3/org/project/repo → https://dev.azure.com/org/project/_git/repo
|
|
79
|
+
if (host === 'ssh.dev.azure.com') {
|
|
80
|
+
const azureMatch = path.match(/^v3\/([^/]+)\/([^/]+)\/(.+)$/);
|
|
81
|
+
if (azureMatch) {
|
|
82
|
+
return `https://dev.azure.com/${azureMatch[1]}/${azureMatch[2]}/_git/${azureMatch[3]}`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return `https://${host}/${path}`;
|
|
56
86
|
}
|
|
57
87
|
|
|
58
88
|
return null;
|
|
@@ -90,15 +120,17 @@ export function getGitHubCompareUrl({
|
|
|
90
120
|
return `${base}?${params.toString()}`;
|
|
91
121
|
}
|
|
92
122
|
|
|
93
|
-
type GitProvider = 'github' | 'gitlab' | 'bitbucket' | 'unknown';
|
|
123
|
+
export type GitProvider = 'github' | 'gitlab' | 'bitbucket' | 'azure_devops' | 'unknown';
|
|
94
124
|
|
|
95
|
-
const HOST_TO_PROVIDER: Record<string, GitProvider> = {
|
|
125
|
+
export const HOST_TO_PROVIDER: Record<string, GitProvider> = {
|
|
96
126
|
'bitbucket.org': 'bitbucket',
|
|
127
|
+
'dev.azure.com': 'azure_devops',
|
|
97
128
|
'github.com': 'github',
|
|
98
|
-
'gitlab.com': 'gitlab'
|
|
129
|
+
'gitlab.com': 'gitlab',
|
|
130
|
+
'ssh.dev.azure.com': 'azure_devops'
|
|
99
131
|
};
|
|
100
132
|
|
|
101
|
-
function detectGitProvider(url: string): GitProvider {
|
|
133
|
+
export function detectGitProvider(url: string): GitProvider {
|
|
102
134
|
const trimmed = url.trim();
|
|
103
135
|
|
|
104
136
|
try {
|
|
@@ -123,6 +155,7 @@ function getCommitPathForProvider(params: { hash: string; provider: GitProvider
|
|
|
123
155
|
return `/commits/${hash}`;
|
|
124
156
|
case 'gitlab':
|
|
125
157
|
return `/-/commit/${hash}`;
|
|
158
|
+
case 'azure_devops':
|
|
126
159
|
case 'github':
|
|
127
160
|
case 'unknown':
|
|
128
161
|
return `/commit/${hash}`;
|
|
@@ -58,7 +58,7 @@ export default Object.freeze({
|
|
|
58
58
|
isVisible: true,
|
|
59
59
|
animateLoading: true,
|
|
60
60
|
isDefaultClickDisabled: true,
|
|
61
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
61
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
62
62
|
type: 'BUTTON_WIDGET',
|
|
63
63
|
widgetId: 'bbwoxnsscs',
|
|
64
64
|
isLoading: false,
|
|
@@ -90,7 +90,7 @@ export default Object.freeze({
|
|
|
90
90
|
isVisible: true,
|
|
91
91
|
animateLoading: true,
|
|
92
92
|
isDefaultClickDisabled: true,
|
|
93
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
93
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
94
94
|
type: 'BUTTON_WIDGET',
|
|
95
95
|
widgetId: '29zprbh4ka',
|
|
96
96
|
isLoading: false,
|
|
@@ -153,7 +153,7 @@ export default Object.freeze({
|
|
|
153
153
|
isVisible: true,
|
|
154
154
|
animateLoading: true,
|
|
155
155
|
isDefaultClickDisabled: true,
|
|
156
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
156
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
157
157
|
dynamicTriggerPathList: [
|
|
158
158
|
{
|
|
159
159
|
key: 'onClick'
|
|
@@ -46,7 +46,7 @@ export default Object.freeze({
|
|
|
46
46
|
isVisible: true,
|
|
47
47
|
animateLoading: true,
|
|
48
48
|
isDefaultClickDisabled: true,
|
|
49
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
49
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
50
50
|
type: 'BUTTON_WIDGET',
|
|
51
51
|
widgetId: 'h6ixkdhufq',
|
|
52
52
|
isLoading: false,
|
|
@@ -78,7 +78,7 @@ export default Object.freeze({
|
|
|
78
78
|
isVisible: true,
|
|
79
79
|
animateLoading: true,
|
|
80
80
|
isDefaultClickDisabled: true,
|
|
81
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
81
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
82
82
|
type: 'BUTTON_WIDGET',
|
|
83
83
|
widgetId: 'nd41xermdw',
|
|
84
84
|
isLoading: false,
|
|
@@ -141,7 +141,7 @@ export default Object.freeze({
|
|
|
141
141
|
isVisible: true,
|
|
142
142
|
animateLoading: true,
|
|
143
143
|
isDefaultClickDisabled: true,
|
|
144
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
144
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
145
145
|
dynamicTriggerPathList: [
|
|
146
146
|
{
|
|
147
147
|
key: 'onClick'
|
|
@@ -208,7 +208,7 @@ export default Object.freeze({
|
|
|
208
208
|
isVisible: true,
|
|
209
209
|
animateLoading: true,
|
|
210
210
|
isDefaultClickDisabled: true,
|
|
211
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
211
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
212
212
|
type: 'BUTTON_WIDGET',
|
|
213
213
|
widgetId: 'x5qbntpl1n',
|
|
214
214
|
isLoading: false,
|
|
@@ -240,7 +240,7 @@ export default Object.freeze({
|
|
|
240
240
|
isVisible: true,
|
|
241
241
|
animateLoading: true,
|
|
242
242
|
isDefaultClickDisabled: true,
|
|
243
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
243
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
244
244
|
type: 'BUTTON_WIDGET',
|
|
245
245
|
widgetId: '4f3izb5tna',
|
|
246
246
|
isLoading: false,
|
|
@@ -303,7 +303,7 @@ export default Object.freeze({
|
|
|
303
303
|
isVisible: true,
|
|
304
304
|
animateLoading: true,
|
|
305
305
|
isDefaultClickDisabled: true,
|
|
306
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
306
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
307
307
|
dynamicTriggerPathList: [
|
|
308
308
|
{
|
|
309
309
|
key: 'onClick'
|
|
@@ -164,7 +164,7 @@ export default Object.freeze({
|
|
|
164
164
|
isVisible: true,
|
|
165
165
|
animateLoading: true,
|
|
166
166
|
isDefaultClickDisabled: true,
|
|
167
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
167
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
168
168
|
dynamicTriggerPathList: [
|
|
169
169
|
{
|
|
170
170
|
key: 'onClick'
|
|
@@ -219,7 +219,7 @@ export default Object.freeze({
|
|
|
219
219
|
mode: 'gridUnit',
|
|
220
220
|
value: 3
|
|
221
221
|
},
|
|
222
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
222
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
223
223
|
onClick: [
|
|
224
224
|
{
|
|
225
225
|
id: 'b17e1cgp85',
|
|
@@ -263,7 +263,7 @@ export default Object.freeze({
|
|
|
263
263
|
mode: 'gridUnit',
|
|
264
264
|
value: 3
|
|
265
265
|
},
|
|
266
|
-
docsUrl: 'https://docs.superblocks.com/components/button',
|
|
266
|
+
docsUrl: 'https://docs-legacy.superblocks.com/components/button',
|
|
267
267
|
parentId: 'mbp6dkndpg',
|
|
268
268
|
widgetId: 'usn4tzfc45',
|
|
269
269
|
isLoading: false,
|