@acorex-platform/extension-gitlab-client 0.0.21

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.
@@ -0,0 +1,194 @@
1
+ import { AXP_INTEGRATION_CONNECTION_STATUS, AXP_INTEGRATION_AUTH_METHOD_TYPE } from '@acorex-platform/framework-shared/core';
2
+ import { AXMIntegrationConnectionManager, hasConfiguredIntegrationCredentials, AXP_INTEGRATION_CREDENTIAL_MASK, isMaskedIntegrationCredential, toSafeIntegrationConnectionDto } from '@acorex-platform/module-integration-management-client';
3
+ import { AXPLayoutBuilderService, resolveLayoutBuilderDialogResult } from '@acorex-platform/framework-client/layout/builder';
4
+ import { AXTranslationService } from '@acorex/core/translation';
5
+ import * as i0 from '@angular/core';
6
+ import { inject, Injectable } from '@angular/core';
7
+ import { trim, defaultTo } from 'lodash-es';
8
+ import { RootConfig } from '@acorex-platform/extension-gitlab-client/contracts';
9
+
10
+ //#region ----- GitLab instance URL validation -----
11
+ const GITLAB_CLOUD_URL = 'https://gitlab.com';
12
+ /** Normalizes and validates a GitLab instance (build) URL. */
13
+ function normalizeGitLabInstanceUrl(raw) {
14
+ return raw.trim().replace(/\/+$/, '');
15
+ }
16
+ /** Rejects common misconfiguration for GitLab self-hosted / cloud URLs. */
17
+ function validateGitLabInstanceUrl(raw) {
18
+ const instanceUrl = normalizeGitLabInstanceUrl(raw);
19
+ if (!instanceUrl) {
20
+ return 'GitLab instance URL is required.';
21
+ }
22
+ if (instanceUrl.includes('/-/user_settings/') || instanceUrl.includes('/user_settings/')) {
23
+ return 'Use your GitLab site URL (e.g. https://gitlab.com or https://gitlab.example.com), not the access-token settings page.';
24
+ }
25
+ try {
26
+ const parsed = new URL(instanceUrl);
27
+ if (!['http:', 'https:'].includes(parsed.protocol)) {
28
+ return 'Instance URL must use http or https.';
29
+ }
30
+ if (!parsed.hostname) {
31
+ return 'Instance URL must be a valid URL.';
32
+ }
33
+ }
34
+ catch {
35
+ return 'Instance URL must be a valid URL (e.g. https://gitlab.com).';
36
+ }
37
+ return null;
38
+ }
39
+ function defaultGitLabInstanceUrl() {
40
+ return GITLAB_CLOUD_URL;
41
+ }
42
+ //#endregion
43
+
44
+ //#endregion
45
+ //#region ----- Command -----
46
+ /** GitLab connect: instance URL (cloud or self-hosted) + personal access token. */
47
+ class ConnectGitLabCommand {
48
+ constructor() {
49
+ //#region ----- Services & Dependencies -----
50
+ this.connectionManager = inject(AXMIntegrationConnectionManager);
51
+ this.layoutBuilder = inject(AXPLayoutBuilderService);
52
+ this.translationService = inject(AXTranslationService);
53
+ }
54
+ //#endregion
55
+ //#region ----- Execute -----
56
+ async execute(input = {}) {
57
+ try {
58
+ const providerId = input.providerId ?? 'gitlab';
59
+ const connectionScope = input.connectionScope ?? 'tenant';
60
+ const existing = await this.connectionManager.findByUniqueKey({
61
+ providerId,
62
+ connectionScope,
63
+ connectionKey: 'default',
64
+ });
65
+ const isReconfigure = hasConfiguredIntegrationCredentials(existing);
66
+ const title = await this.translationService.translateAsync(isReconfigure
67
+ ? '@extensions-gitlab:integration.connect.dialog.reconfigure-title'
68
+ : '@extensions-gitlab:integration.connect.dialog.title');
69
+ const form = await this.openConnectDialog({
70
+ title: title ?? 'Connect GitLab',
71
+ context: {
72
+ displayName: existing?.displayName ?? 'GitLab',
73
+ instanceUrl: existing?.instanceUrl ?? defaultGitLabInstanceUrl(),
74
+ token: isReconfigure ? AXP_INTEGRATION_CREDENTIAL_MASK : '',
75
+ },
76
+ existing,
77
+ isReconfigure,
78
+ });
79
+ if (!form) {
80
+ return { success: true, kind: 'object', data: { outcome: 'cancelled' } };
81
+ }
82
+ let token = trim(form.token);
83
+ if (isMaskedIntegrationCredential(token) && existing) {
84
+ const config = (existing.config ?? {});
85
+ token = trim(config.token ?? '');
86
+ }
87
+ if (!token) {
88
+ const message = await this.translationService.translateAsync('@extensions-gitlab:integration.connect.messages.token-required');
89
+ return { success: false, message: { text: message ?? 'Personal access token is required.' } };
90
+ }
91
+ const connection = await this.connectionManager.upsertConnection({
92
+ providerId,
93
+ authMethodType: AXP_INTEGRATION_AUTH_METHOD_TYPE.Pat,
94
+ connectionScope,
95
+ connectionKey: 'default',
96
+ displayName: defaultTo(trim(form.displayName), 'GitLab'),
97
+ instanceUrl: form.instanceUrl,
98
+ externalAccountName: AXP_INTEGRATION_CREDENTIAL_MASK,
99
+ config: { token },
100
+ status: AXP_INTEGRATION_CONNECTION_STATUS.Connected,
101
+ isRevoked: false,
102
+ isDisabled: false,
103
+ });
104
+ return {
105
+ success: true,
106
+ kind: 'object',
107
+ data: { outcome: 'connected', connection: toSafeIntegrationConnectionDto(connection) },
108
+ };
109
+ }
110
+ catch (error) {
111
+ const message = error instanceof Error ? error.message : 'Failed to connect GitLab.';
112
+ return { success: false, message: { text: message } };
113
+ }
114
+ }
115
+ //#endregion
116
+ //#region ----- Dialog -----
117
+ async openConnectDialog(input) {
118
+ const I18N = `@${RootConfig.config.i18n}:integration.connect`;
119
+ const result = await this.layoutBuilder
120
+ .create()
121
+ .dialog((dialog) => {
122
+ dialog
123
+ .setTitle(input.title)
124
+ .setSize('md')
125
+ .setCloseButton(true)
126
+ .setContext({ ...input.context })
127
+ .content((flex) => {
128
+ flex
129
+ .setDirection('column')
130
+ .setGap('12px')
131
+ .customWidget('text-block-layout', { content: `${I18N}.instructions` })
132
+ .formField(`${I18N}.fields.display-name`, (field) => {
133
+ field.path('displayName');
134
+ field.textBox({ placeholder: `${I18N}.placeholders.display-name` });
135
+ })
136
+ .formField('@extensions-gitlab:integration.auth.pat.instance-url.label', (field) => {
137
+ field.path('instanceUrl');
138
+ field.textBox({
139
+ placeholder: '@extensions-gitlab:integration.auth.pat.instance-url.placeholder',
140
+ validations: [{ rule: 'required' }],
141
+ });
142
+ })
143
+ .formField('@extensions-gitlab:integration.auth.pat.token.label', (field) => {
144
+ field.path('token');
145
+ field.passwordBox({
146
+ placeholder: '@extensions-gitlab:integration.auth.pat.token.placeholder',
147
+ revealToggle: true,
148
+ validations: input.isReconfigure ? [] : [{ rule: 'required' }],
149
+ });
150
+ });
151
+ })
152
+ .setActions((actions) => {
153
+ actions
154
+ .cancel('@general:actions.cancel.title')
155
+ .submit(`${I18N}.actions.save`);
156
+ })
157
+ .onAction(async (ref) => {
158
+ if (ref.action() === 'cancel') {
159
+ return null;
160
+ }
161
+ const ctx = ref.context();
162
+ const instanceUrl = normalizeGitLabInstanceUrl(ctx.instanceUrl);
163
+ const instanceUrlError = validateGitLabInstanceUrl(instanceUrl);
164
+ if (instanceUrlError) {
165
+ throw new Error(instanceUrlError);
166
+ }
167
+ let token = trim(ctx.token);
168
+ if (isMaskedIntegrationCredential(token) && input.existing) {
169
+ const config = (input.existing.config ?? {});
170
+ token = trim(config.token ?? '');
171
+ }
172
+ if (!token) {
173
+ throw new Error('Personal access token is required.');
174
+ }
175
+ return {
176
+ displayName: trim(ctx.displayName) || 'GitLab',
177
+ instanceUrl,
178
+ token,
179
+ };
180
+ });
181
+ })
182
+ .show();
183
+ return resolveLayoutBuilderDialogResult(result);
184
+ }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ConnectGitLabCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
186
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ConnectGitLabCommand, providedIn: 'root' }); }
187
+ }
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ConnectGitLabCommand, decorators: [{
189
+ type: Injectable,
190
+ args: [{ providedIn: 'root' }]
191
+ }] });
192
+
193
+ export { ConnectGitLabCommand };
194
+ //# sourceMappingURL=acorex-platform-extension-gitlab-client-connect-gitlab.command-DwW8vwoC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-extension-gitlab-client-connect-gitlab.command-DwW8vwoC.mjs","sources":["../../../../libs/extensions/gitlab/client/src/lib/features/connect/gitlab-instance-url.util.ts","../../../../libs/extensions/gitlab/client/src/lib/features/connect/connect-gitlab.command.ts"],"sourcesContent":["//#region ----- GitLab instance URL validation -----\n\nconst GITLAB_CLOUD_URL = 'https://gitlab.com';\n\n/** Normalizes and validates a GitLab instance (build) URL. */\nexport function normalizeGitLabInstanceUrl(raw: string): string {\n return raw.trim().replace(/\\/+$/, '');\n}\n\n/** Rejects common misconfiguration for GitLab self-hosted / cloud URLs. */\nexport function validateGitLabInstanceUrl(raw: string): string | null {\n const instanceUrl = normalizeGitLabInstanceUrl(raw);\n if (!instanceUrl) {\n return 'GitLab instance URL is required.';\n }\n\n if (instanceUrl.includes('/-/user_settings/') || instanceUrl.includes('/user_settings/')) {\n return 'Use your GitLab site URL (e.g. https://gitlab.com or https://gitlab.example.com), not the access-token settings page.';\n }\n\n try {\n const parsed = new URL(instanceUrl);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n return 'Instance URL must use http or https.';\n }\n if (!parsed.hostname) {\n return 'Instance URL must be a valid URL.';\n }\n } catch {\n return 'Instance URL must be a valid URL (e.g. https://gitlab.com).';\n }\n\n return null;\n}\n\nexport function defaultGitLabInstanceUrl(): string {\n return GITLAB_CLOUD_URL;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXP_INTEGRATION_AUTH_METHOD_TYPE,\n AXP_INTEGRATION_CONNECTION_STATUS,\n type AXPIntegrationConnectionScope,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXMIntegrationConnectionManager,\n AXP_INTEGRATION_CREDENTIAL_MASK,\n hasConfiguredIntegrationCredentials,\n isMaskedIntegrationCredential,\n toSafeIntegrationConnectionDto,\n type ConnectCommandResult,\n} from '@acorex-platform/module-integration-management-client';\nimport type { AXMIntegrationManagementIntegrationConnectionEntityModel } from '@acorex-platform/module-integration-management-client/contracts';\nimport {\n AXPLayoutBuilderService,\n resolveLayoutBuilderDialogResult,\n type AXPDialogRef,\n type IActionBuilder,\n type IDialogBuilder,\n type IFlexContainerBuilder,\n type IFormFieldBuilder,\n} from '@acorex-platform/framework-client/layout/builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, trim } from 'lodash-es';\nimport { RootConfig } from '@acorex-platform/extension-gitlab-client/contracts';\nimport {\n defaultGitLabInstanceUrl,\n normalizeGitLabInstanceUrl,\n validateGitLabInstanceUrl,\n} from './gitlab-instance-url.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface ConnectGitLabCommandInput {\n providerId?: string;\n connectionScope?: AXPIntegrationConnectionScope;\n}\n\ninterface GitLabConnectFormContext {\n displayName: string;\n instanceUrl: string;\n token: string;\n}\n\ninterface GitLabConnectFormResult {\n displayName: string;\n instanceUrl: string;\n token: string;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** GitLab connect: instance URL (cloud or self-hosted) + personal access token. */\n@Injectable({ providedIn: 'root' })\nexport class ConnectGitLabCommand implements AXPCommand<ConnectGitLabCommandInput, ConnectCommandResult> {\n //#region ----- Services & Dependencies -----\n\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Execute -----\n\n async execute(input: ConnectGitLabCommandInput = {}): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n try {\n const providerId = input.providerId ?? 'gitlab';\n const connectionScope = input.connectionScope ?? 'tenant';\n const existing = await this.connectionManager.findByUniqueKey({\n providerId,\n connectionScope,\n connectionKey: 'default',\n });\n const isReconfigure = hasConfiguredIntegrationCredentials(existing);\n\n const title = await this.translationService.translateAsync(\n isReconfigure\n ? '@extensions-gitlab:integration.connect.dialog.reconfigure-title'\n : '@extensions-gitlab:integration.connect.dialog.title',\n );\n\n const form = await this.openConnectDialog({\n title: title ?? 'Connect GitLab',\n context: {\n displayName: existing?.displayName ?? 'GitLab',\n instanceUrl: existing?.instanceUrl ?? defaultGitLabInstanceUrl(),\n token: isReconfigure ? AXP_INTEGRATION_CREDENTIAL_MASK : '',\n },\n existing,\n isReconfigure,\n });\n\n if (!form) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n let token = trim(form.token);\n if (isMaskedIntegrationCredential(token) && existing) {\n const config = (existing.config ?? {}) as { token?: string };\n token = trim(config.token ?? '');\n }\n if (!token) {\n const message = await this.translationService.translateAsync(\n '@extensions-gitlab:integration.connect.messages.token-required',\n );\n return { success: false, message: { text: message ?? 'Personal access token is required.' } };\n }\n\n const connection = await this.connectionManager.upsertConnection({\n providerId,\n authMethodType: AXP_INTEGRATION_AUTH_METHOD_TYPE.Pat,\n connectionScope,\n connectionKey: 'default',\n displayName: defaultTo(trim(form.displayName), 'GitLab'),\n instanceUrl: form.instanceUrl,\n externalAccountName: AXP_INTEGRATION_CREDENTIAL_MASK,\n config: { token },\n status: AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n isRevoked: false,\n isDisabled: false,\n });\n\n return {\n success: true,\n kind: 'object',\n data: { outcome: 'connected', connection: toSafeIntegrationConnectionDto(connection) },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to connect GitLab.';\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ----- Dialog -----\n\n private async openConnectDialog(input: {\n title: string;\n context: GitLabConnectFormContext;\n existing: AXMIntegrationManagementIntegrationConnectionEntityModel | null;\n isReconfigure: boolean;\n }): Promise<GitLabConnectFormResult | null> {\n const I18N = `@${RootConfig.config.i18n}:integration.connect`;\n\n const result = await this.layoutBuilder\n .create()\n .dialog<GitLabConnectFormResult | null>((dialog: IDialogBuilder<GitLabConnectFormResult | null>) => {\n dialog\n .setTitle(input.title)\n .setSize('md')\n .setCloseButton(true)\n .setContext({ ...input.context })\n .content((flex: IFlexContainerBuilder) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .customWidget('text-block-layout', { content: `${I18N}.instructions` })\n .formField(`${I18N}.fields.display-name`, (field: IFormFieldBuilder) => {\n field.path('displayName');\n field.textBox({ placeholder: `${I18N}.placeholders.display-name` });\n })\n .formField('@extensions-gitlab:integration.auth.pat.instance-url.label', (field) => {\n field.path('instanceUrl');\n field.textBox({\n placeholder: '@extensions-gitlab:integration.auth.pat.instance-url.placeholder',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@extensions-gitlab:integration.auth.pat.token.label', (field) => {\n field.path('token');\n field.passwordBox({\n placeholder: '@extensions-gitlab:integration.auth.pat.token.placeholder',\n revealToggle: true,\n validations: input.isReconfigure ? [] : [{ rule: 'required' }],\n });\n });\n })\n .setActions((actions: IActionBuilder) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit(`${I18N}.actions.save`);\n })\n .onAction(async (ref: AXPDialogRef) => {\n if (ref.action() === 'cancel') {\n return null;\n }\n\n const ctx = ref.context() as GitLabConnectFormContext;\n const instanceUrl = normalizeGitLabInstanceUrl(ctx.instanceUrl);\n const instanceUrlError = validateGitLabInstanceUrl(instanceUrl);\n if (instanceUrlError) {\n throw new Error(instanceUrlError);\n }\n\n let token = trim(ctx.token);\n if (isMaskedIntegrationCredential(token) && input.existing) {\n const config = (input.existing.config ?? {}) as { token?: string };\n token = trim(config.token ?? '');\n }\n if (!token) {\n throw new Error('Personal access token is required.');\n }\n\n return {\n displayName: trim(ctx.displayName) || 'GitLab',\n instanceUrl,\n token,\n };\n });\n })\n .show();\n\n return resolveLayoutBuilderDialogResult<GitLabConnectFormResult>(result);\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ //#region ---- Module Config ----
2
+ const config = {
3
+ i18n: 'extensions-gitlab',
4
+ };
5
+ /** Logical module name (PascalCase) — matches entity-storage / command keys and edition feature lists. */
6
+ const MODULE_NAME = 'GitLabExtension';
7
+ const RootConfig = {
8
+ config,
9
+ module: {
10
+ name: MODULE_NAME,
11
+ icon: 'fa-brands fa-gitlab',
12
+ },
13
+ entities: {
14
+ gitlabInstance: {
15
+ name: 'GitLabInstance',
16
+ title: `@${config.i18n}:instances.entities.instance.title`,
17
+ titlePlural: `@${config.i18n}:instances.entities.instance.plural`,
18
+ icon: 'fa-light fa-server',
19
+ },
20
+ },
21
+ };
22
+ //#endregion
23
+
24
+ //#region ---- Command Keys ----
25
+ const AXEGitLabCommandKeys = {
26
+ ConnectionConnect: 'GitLabExtension.Connection:Connect',
27
+ };
28
+ //#endregion
29
+
30
+ //#region ----- GitLab query keys -----
31
+ const AXEGitLabQueryKeys = {
32
+ RepoSearch: 'GitLabExtension.Repo:Search',
33
+ ListBranches: 'GitLabExtension.Repo:ListBranches',
34
+ ListCommits: 'GitLabExtension.Repo:ListCommits',
35
+ };
36
+ //#endregion
37
+
38
+ /**
39
+ * Generated bundle index. Do not edit.
40
+ */
41
+
42
+ export { AXEGitLabCommandKeys, AXEGitLabQueryKeys, RootConfig };
43
+ //# sourceMappingURL=acorex-platform-extension-gitlab-client-contracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-extension-gitlab-client-contracts.mjs","sources":["../../../../libs/extensions/gitlab/contracts/src/root-config.ts","../../../../libs/extensions/gitlab/contracts/src/commands.keys.ts","../../../../libs/extensions/gitlab/contracts/src/queries.keys.ts","../../../../libs/extensions/gitlab/contracts/src/acorex-platform-extension-gitlab-client-contracts.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'extensions-gitlab',\n};\n\n/** Logical module name (PascalCase) — matches entity-storage / command keys and edition feature lists. */\nconst MODULE_NAME = 'GitLabExtension';\n\nexport const RootConfig = {\n config,\n module: {\n name: MODULE_NAME,\n icon: 'fa-brands fa-gitlab',\n },\n entities: {\n gitlabInstance: {\n name: 'GitLabInstance',\n title: `@${config.i18n}:instances.entities.instance.title`,\n titlePlural: `@${config.i18n}:instances.entities.instance.plural`,\n icon: 'fa-light fa-server',\n },\n },\n};\n\n//#endregion\n","//#region ---- Command Keys ----\n\nexport const AXEGitLabCommandKeys = {\n ConnectionConnect: 'GitLabExtension.Connection:Connect',\n} as const;\n\n//#endregion\n","//#region ----- GitLab query keys -----\n\nexport const AXEGitLabQueryKeys = {\n RepoSearch: 'GitLabExtension.Repo:Search',\n ListBranches: 'GitLabExtension.Repo:ListBranches',\n ListCommits: 'GitLabExtension.Repo:ListCommits',\n} as const;\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,mBAAmB;CAC1B;AAED;AACA,MAAM,WAAW,GAAG,iBAAiB;AAE9B,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,IAAI,EAAE,qBAAqB;AAC5B,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,cAAc,EAAE;AACd,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,KAAK,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,kCAAA,CAAoC;AAC1D,YAAA,WAAW,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,mCAAA,CAAqC;AACjE,YAAA,IAAI,EAAE,oBAAoB;AAC3B,SAAA;AACF,KAAA;;AAGH;;ACzBA;AAEO,MAAM,oBAAoB,GAAG;AAClC,IAAA,iBAAiB,EAAE,oCAAoC;;AAGzD;;ACNA;AAEO,MAAM,kBAAkB,GAAG;AAChC,IAAA,UAAU,EAAE,6BAA6B;AACzC,IAAA,YAAY,EAAE,mCAAmC;AACjD,IAAA,WAAW,EAAE,kCAAkC;;AAGjD;;ACRA;;AAEG;;;;"}
@@ -0,0 +1,211 @@
1
+ import { AXMIntegrationManagementModule } from '@acorex-platform/module-integration-management-client';
2
+ import { AXP_INTEGRATION_SECRET_STORE, AXP_INTEGRATION_PROVIDER, AXP_INTEGRATION_RUNTIME_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';
3
+ import { AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';
4
+ import { provideCommandSetups } from '@acorex-platform/framework-client/runtime';
5
+ import { RootConfig, AXEGitLabCommandKeys } from '@acorex-platform/extension-gitlab-client/contracts';
6
+ import * as i0 from '@angular/core';
7
+ import { Injectable, inject, NgModule } from '@angular/core';
8
+ import { AXPWidgetsList, AXP_INTEGRATION_AUTH_METHOD_TYPE, AXP_INTEGRATION_CONNECTION_SCOPE, AXP_INTEGRATION_CAPABILITY, AXP_INTEGRATION_CATEGORY, AXP_INTEGRATION_CONNECTION_STATUS } from '@acorex-platform/framework-shared/core';
9
+ import { trim, defaultTo } from 'lodash-es';
10
+
11
+ //#region ---- Imports ----
12
+ //#endregion
13
+ //#region ---- Provider ----
14
+ class AXEGitLabIntegrationProvider {
15
+ async provide(context) {
16
+ const I18N = `@${RootConfig.config.i18n}:integration`;
17
+ context.register({
18
+ domainId: AXP_INTEGRATION_CATEGORY.SourceControl,
19
+ id: 'gitlab',
20
+ module: RootConfig.module.name,
21
+ displayName: `${I18N}.display-name`,
22
+ description: `${I18N}.description`,
23
+ icon: RootConfig.module.icon,
24
+ capabilities: [AXP_INTEGRATION_CAPABILITY.Sync, AXP_INTEGRATION_CAPABILITY.Import],
25
+ connectionScopes: [AXP_INTEGRATION_CONNECTION_SCOPE.Tenant],
26
+ allowMultipleConnections: false,
27
+ defaultConnectionKey: 'default',
28
+ connectCommandKey: AXEGitLabCommandKeys.ConnectionConnect,
29
+ authMethods: [
30
+ {
31
+ type: AXP_INTEGRATION_AUTH_METHOD_TYPE.Pat,
32
+ label: `${I18N}.auth.pat.label`,
33
+ instructions: `${I18N}.auth.pat.instructions`,
34
+ supportsValidation: true,
35
+ fields: [
36
+ {
37
+ type: AXPWidgetsList.Editors.TextBox,
38
+ path: 'instanceUrl',
39
+ options: { placeholder: `${I18N}.auth.pat.instance-url.placeholder` },
40
+ },
41
+ {
42
+ type: AXPWidgetsList.Editors.PasswordBox,
43
+ path: 'token',
44
+ options: { placeholder: `${I18N}.auth.pat.token.placeholder` },
45
+ },
46
+ ],
47
+ },
48
+ ],
49
+ });
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabIntegrationProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
52
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabIntegrationProvider }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabIntegrationProvider, decorators: [{
55
+ type: Injectable
56
+ }] });
57
+
58
+ //#region ---- Imports ----
59
+ //#endregion
60
+ //#region ---- Runtime Provider ----
61
+ class AXEGitLabIntegrationRuntimeProvider {
62
+ constructor() {
63
+ this.providerId = 'gitlab';
64
+ this.secretStore = inject(AXP_INTEGRATION_SECRET_STORE, { optional: true });
65
+ }
66
+ async getHooks() {
67
+ return {
68
+ validateConnection: (ctx) => this.validateConnection(ctx),
69
+ createClient: (ctx) => this.createClient(ctx),
70
+ };
71
+ }
72
+ async validateConnection(ctx) {
73
+ if (!this.secretStore) {
74
+ return { valid: false, status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid, errorMessage: 'Secret store unavailable.' };
75
+ }
76
+ try {
77
+ const credentials = await this.secretStore.resolve(ctx.secretRef, ctx);
78
+ const token = trim(defaultTo(credentials.token, ''));
79
+ if (!token) {
80
+ return {
81
+ valid: false,
82
+ status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,
83
+ errorMessage: 'No personal access token available for GitLab connection.',
84
+ };
85
+ }
86
+ return {
87
+ valid: true,
88
+ status: AXP_INTEGRATION_CONNECTION_STATUS.Connected,
89
+ externalAccountName: defaultTo(ctx.instanceUrl, 'GitLab'),
90
+ };
91
+ }
92
+ catch {
93
+ return {
94
+ valid: false,
95
+ status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,
96
+ errorMessage: 'Failed to validate GitLab credentials.',
97
+ };
98
+ }
99
+ }
100
+ async createClient(ctx) {
101
+ if (!this.secretStore) {
102
+ throw new Error('Secret store unavailable.');
103
+ }
104
+ const credentials = await this.secretStore.resolve(ctx.secretRef, ctx);
105
+ const token = trim(defaultTo(credentials.token, ''));
106
+ if (!token) {
107
+ throw new Error('GitLab connection has no usable personal access token.');
108
+ }
109
+ return {
110
+ token,
111
+ baseUrl: defaultTo(ctx.instanceUrl, undefined),
112
+ };
113
+ }
114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabIntegrationRuntimeProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
115
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabIntegrationRuntimeProvider }); }
116
+ }
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabIntegrationRuntimeProvider, decorators: [{
118
+ type: Injectable
119
+ }] });
120
+
121
+ const GitLabExtensionManifest = {
122
+ name: RootConfig.module.name,
123
+ version: '1.0.0',
124
+ title: `@${RootConfig.config.i18n}:integration.display-name`,
125
+ icon: RootConfig.module.icon,
126
+ i18n: RootConfig.config.i18n,
127
+ type: 'integration',
128
+ domain: 'source-control',
129
+ dependencies: [],
130
+ };
131
+
132
+ //#endregion
133
+ //#region ----- Settings Provider -----
134
+ /** Tenant GitLab connections are managed on Administration → Integrations. */
135
+ class AXEGitLabSettingsProvider {
136
+ async provide(_context) { }
137
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabSettingsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
138
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabSettingsProvider }); }
139
+ }
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabSettingsProvider, decorators: [{
141
+ type: Injectable
142
+ }] });
143
+
144
+ //#region ---- Imports ----
145
+ //#endregion
146
+ //#region ---- Module ----
147
+ class AXEGitLabExtensionModule {
148
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabExtensionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
149
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabExtensionModule, imports: [AXMIntegrationManagementModule] }); }
150
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabExtensionModule, providers: [
151
+ { provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: GitLabExtensionManifest, multi: true },
152
+ {
153
+ provide: AXP_INTEGRATION_PROVIDER,
154
+ useClass: AXEGitLabIntegrationProvider,
155
+ multi: true,
156
+ },
157
+ {
158
+ provide: AXP_INTEGRATION_RUNTIME_PROVIDER,
159
+ useClass: AXEGitLabIntegrationRuntimeProvider,
160
+ multi: true,
161
+ },
162
+ {
163
+ provide: AXP_SETTING_DEFINITION_PROVIDER,
164
+ useClass: AXEGitLabSettingsProvider,
165
+ multi: true,
166
+ },
167
+ provideCommandSetups([
168
+ {
169
+ key: AXEGitLabCommandKeys.ConnectionConnect,
170
+ command: () => import('./acorex-platform-extension-gitlab-client-connect-gitlab.command-DwW8vwoC.mjs').then((c) => c.ConnectGitLabCommand),
171
+ },
172
+ ]),
173
+ ], imports: [AXMIntegrationManagementModule] }); }
174
+ }
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGitLabExtensionModule, decorators: [{
176
+ type: NgModule,
177
+ args: [{
178
+ imports: [AXMIntegrationManagementModule],
179
+ providers: [
180
+ { provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: GitLabExtensionManifest, multi: true },
181
+ {
182
+ provide: AXP_INTEGRATION_PROVIDER,
183
+ useClass: AXEGitLabIntegrationProvider,
184
+ multi: true,
185
+ },
186
+ {
187
+ provide: AXP_INTEGRATION_RUNTIME_PROVIDER,
188
+ useClass: AXEGitLabIntegrationRuntimeProvider,
189
+ multi: true,
190
+ },
191
+ {
192
+ provide: AXP_SETTING_DEFINITION_PROVIDER,
193
+ useClass: AXEGitLabSettingsProvider,
194
+ multi: true,
195
+ },
196
+ provideCommandSetups([
197
+ {
198
+ key: AXEGitLabCommandKeys.ConnectionConnect,
199
+ command: () => import('./acorex-platform-extension-gitlab-client-connect-gitlab.command-DwW8vwoC.mjs').then((c) => c.ConnectGitLabCommand),
200
+ },
201
+ ]),
202
+ ],
203
+ }]
204
+ }] });
205
+
206
+ /**
207
+ * Generated bundle index. Do not edit.
208
+ */
209
+
210
+ export { AXEGitLabExtensionModule };
211
+ //# sourceMappingURL=acorex-platform-extension-gitlab-client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-extension-gitlab-client.mjs","sources":["../../../../libs/extensions/gitlab/client/src/lib/integration/gitlab.integration.provider.ts","../../../../libs/extensions/gitlab/client/src/lib/integration/gitlab.integration-runtime.provider.ts","../../../../libs/extensions/gitlab/client/src/lib/manifest.ts","../../../../libs/extensions/gitlab/client/src/lib/settings/gitlab.settings.provider.ts","../../../../libs/extensions/gitlab/client/src/lib/gitlab-extension.module.ts","../../../../libs/extensions/gitlab/client/src/acorex-platform-extension-gitlab-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport {\n AXP_INTEGRATION_AUTH_METHOD_TYPE,\n AXP_INTEGRATION_CAPABILITY,\n AXP_INTEGRATION_CATEGORY,\n AXP_INTEGRATION_CONNECTION_SCOPE,\n AXPWidgetsList,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPIntegrationProvider, AXPIntegrationProviderContext } from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport { AXEGitLabCommandKeys, RootConfig } from '@acorex-platform/extension-gitlab-client/contracts';\n\n//#endregion\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXEGitLabIntegrationProvider implements AXPIntegrationProvider {\n async provide(context: AXPIntegrationProviderContext): Promise<void> {\n const I18N = `@${RootConfig.config.i18n}:integration`;\n\n context.register({\n domainId: AXP_INTEGRATION_CATEGORY.SourceControl,\n id: 'gitlab',\n module: RootConfig.module.name,\n displayName: `${I18N}.display-name`,\n description: `${I18N}.description`,\n icon: RootConfig.module.icon,\n capabilities: [AXP_INTEGRATION_CAPABILITY.Sync, AXP_INTEGRATION_CAPABILITY.Import],\n connectionScopes: [AXP_INTEGRATION_CONNECTION_SCOPE.Tenant],\n allowMultipleConnections: false,\n defaultConnectionKey: 'default',\n connectCommandKey: AXEGitLabCommandKeys.ConnectionConnect,\n authMethods: [\n {\n type: AXP_INTEGRATION_AUTH_METHOD_TYPE.Pat,\n label: `${I18N}.auth.pat.label`,\n instructions: `${I18N}.auth.pat.instructions`,\n supportsValidation: true,\n fields: [\n {\n type: AXPWidgetsList.Editors.TextBox,\n path: 'instanceUrl',\n options: { placeholder: `${I18N}.auth.pat.instance-url.placeholder` },\n },\n {\n type: AXPWidgetsList.Editors.PasswordBox,\n path: 'token',\n options: { placeholder: `${I18N}.auth.pat.token.placeholder` },\n },\n ],\n },\n ],\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_INTEGRATION_CONNECTION_STATUS, type AXPIntegrationProviderRuntimeHooks, type AXPIntegrationRuntimeContext, type AXPIntegrationValidationResult } from '@acorex-platform/framework-shared/core';\nimport { AXP_INTEGRATION_SECRET_STORE, type AXPIntegrationRuntimeProvider } from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, trim } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXEGitLabIntegrationClient {\n token: string;\n baseUrl?: string;\n}\n\n//#endregion\n\n//#region ---- Runtime Provider ----\n\n@Injectable()\nexport class AXEGitLabIntegrationRuntimeProvider implements AXPIntegrationRuntimeProvider {\n readonly providerId = 'gitlab';\n\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE, { optional: true });\n\n async getHooks(): Promise<AXPIntegrationProviderRuntimeHooks> {\n return {\n validateConnection: (ctx) => this.validateConnection(ctx),\n createClient: (ctx) => this.createClient(ctx),\n };\n }\n\n private async validateConnection(ctx: AXPIntegrationRuntimeContext): Promise<AXPIntegrationValidationResult> {\n if (!this.secretStore) {\n return { valid: false, status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid, errorMessage: 'Secret store unavailable.' };\n }\n\n try {\n const credentials = await this.secretStore.resolve(ctx.secretRef, ctx);\n const token = trim(defaultTo(credentials.token, ''));\n\n if (!token) {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'No personal access token available for GitLab connection.',\n };\n }\n\n return {\n valid: true,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n externalAccountName: defaultTo(ctx.instanceUrl, 'GitLab'),\n };\n } catch {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'Failed to validate GitLab credentials.',\n };\n }\n }\n\n private async createClient(ctx: AXPIntegrationRuntimeContext): Promise<AXEGitLabIntegrationClient> {\n if (!this.secretStore) {\n throw new Error('Secret store unavailable.');\n }\n\n const credentials = await this.secretStore.resolve(ctx.secretRef, ctx);\n const token = trim(defaultTo(credentials.token, ''));\n\n if (!token) {\n throw new Error('GitLab connection has no usable personal access token.');\n }\n\n return {\n token,\n baseUrl: defaultTo(ctx.instanceUrl, undefined),\n };\n }\n}\n\n//#endregion\n","import { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/extension-gitlab-client/contracts';\n\nexport const GitLabExtensionManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: `@${RootConfig.config.i18n}:integration.display-name`,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'integration',\n domain: 'source-control',\n dependencies: [],\n};","//#region ----- Imports -----\n\nimport {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Settings Provider -----\n\n/** Tenant GitLab connections are managed on Administration → Integrations. */\n@Injectable()\nexport class AXEGitLabSettingsProvider implements AXPSettingDefinitionProvider {\n async provide(_context: AXPSettingDefinitionProviderContext): Promise<void> {}\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXMIntegrationManagementModule } from '@acorex-platform/module-integration-management-client';\nimport {\n AXP_INTEGRATION_PROVIDER,\n AXP_INTEGRATION_RUNTIME_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n} from '@acorex-platform/framework-client/common';\nimport { AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { AXEGitLabCommandKeys } from '@acorex-platform/extension-gitlab-client/contracts';\nimport { NgModule } from '@angular/core';\nimport { AXEGitLabIntegrationProvider } from './integration/gitlab.integration.provider';\nimport { AXEGitLabIntegrationRuntimeProvider } from './integration/gitlab.integration-runtime.provider';\nimport { GitLabExtensionManifest } from './manifest';\nimport { AXEGitLabSettingsProvider } from './settings/gitlab.settings.provider';\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [AXMIntegrationManagementModule],\n providers: [\n { provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: GitLabExtensionManifest, multi: true },\n {\n provide: AXP_INTEGRATION_PROVIDER,\n useClass: AXEGitLabIntegrationProvider,\n multi: true,\n },\n {\n provide: AXP_INTEGRATION_RUNTIME_PROVIDER,\n useClass: AXEGitLabIntegrationRuntimeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXEGitLabSettingsProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: AXEGitLabCommandKeys.ConnectionConnect,\n command: () => import('./features/connect/connect-gitlab.command').then((c) => c.ConnectGitLabCommand),\n },\n ]),\n ],\n})\nexport class AXEGitLabExtensionModule {}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@acorex-platform/extension-gitlab-client",
3
+ "version": "0.0.21",
4
+ "sideEffects": false,
5
+ "peerDependencies": {
6
+ "@angular/common": "^21.0.0",
7
+ "@angular/core": "^21.0.0"
8
+ },
9
+ "dependencies": {
10
+ "tslib": "^2.3.0"
11
+ },
12
+ "module": "fesm2022/acorex-platform-extension-gitlab-client.mjs",
13
+ "typings": "types/acorex-platform-extension-gitlab-client.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./types/acorex-platform-extension-gitlab-client.d.ts",
20
+ "default": "./fesm2022/acorex-platform-extension-gitlab-client.mjs"
21
+ },
22
+ "./contracts": {
23
+ "types": "./types/acorex-platform-extension-gitlab-client-contracts.d.ts",
24
+ "default": "./fesm2022/acorex-platform-extension-gitlab-client-contracts.mjs"
25
+ }
26
+ },
27
+ "type": "module"
28
+ }
@@ -0,0 +1,29 @@
1
+ declare const RootConfig: {
2
+ config: {
3
+ i18n: string;
4
+ };
5
+ module: {
6
+ name: string;
7
+ icon: string;
8
+ };
9
+ entities: {
10
+ gitlabInstance: {
11
+ name: string;
12
+ title: string;
13
+ titlePlural: string;
14
+ icon: string;
15
+ };
16
+ };
17
+ };
18
+
19
+ declare const AXEGitLabCommandKeys: {
20
+ readonly ConnectionConnect: "GitLabExtension.Connection:Connect";
21
+ };
22
+
23
+ declare const AXEGitLabQueryKeys: {
24
+ readonly RepoSearch: "GitLabExtension.Repo:Search";
25
+ readonly ListBranches: "GitLabExtension.Repo:ListBranches";
26
+ readonly ListCommits: "GitLabExtension.Repo:ListCommits";
27
+ };
28
+
29
+ export { AXEGitLabCommandKeys, AXEGitLabQueryKeys, RootConfig };
@@ -0,0 +1,10 @@
1
+ import * as i0 from '@angular/core';
2
+ import * as i1 from '@acorex-platform/module-integration-management-client';
3
+
4
+ declare class AXEGitLabExtensionModule {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXEGitLabExtensionModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXEGitLabExtensionModule, never, [typeof i1.AXMIntegrationManagementModule], never>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<AXEGitLabExtensionModule>;
8
+ }
9
+
10
+ export { AXEGitLabExtensionModule };