@agent-deck/shared 1.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.
Files changed (85) hide show
  1. package/dist/constants/card-colors.d.ts +9 -0
  2. package/dist/constants/card-colors.d.ts.map +1 -0
  3. package/dist/constants/card-colors.js +15 -0
  4. package/dist/constants/card-colors.js.map +1 -0
  5. package/dist/constants/client-scope.d.ts +11 -0
  6. package/dist/constants/client-scope.d.ts.map +1 -0
  7. package/dist/constants/client-scope.js +14 -0
  8. package/dist/constants/client-scope.js.map +1 -0
  9. package/dist/index.d.ts +13 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +47 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/schemas/credential.d.ts +214 -0
  14. package/dist/schemas/credential.d.ts.map +1 -0
  15. package/dist/schemas/credential.js +93 -0
  16. package/dist/schemas/credential.js.map +1 -0
  17. package/dist/schemas/deck.d.ts +490 -0
  18. package/dist/schemas/deck.d.ts.map +1 -0
  19. package/dist/schemas/deck.js +43 -0
  20. package/dist/schemas/deck.js.map +1 -0
  21. package/dist/schemas/oauth.d.ts +81 -0
  22. package/dist/schemas/oauth.d.ts.map +1 -0
  23. package/dist/schemas/oauth.js +33 -0
  24. package/dist/schemas/oauth.js.map +1 -0
  25. package/dist/schemas/playbook.d.ts +284 -0
  26. package/dist/schemas/playbook.d.ts.map +1 -0
  27. package/dist/schemas/playbook.js +58 -0
  28. package/dist/schemas/playbook.js.map +1 -0
  29. package/dist/schemas/repo-deck.d.ts +15 -0
  30. package/dist/schemas/repo-deck.d.ts.map +1 -0
  31. package/dist/schemas/repo-deck.js +11 -0
  32. package/dist/schemas/repo-deck.js.map +1 -0
  33. package/dist/schemas/service.d.ts +413 -0
  34. package/dist/schemas/service.d.ts.map +1 -0
  35. package/dist/schemas/service.js +96 -0
  36. package/dist/schemas/service.js.map +1 -0
  37. package/dist/types/api.d.ts +31 -0
  38. package/dist/types/api.d.ts.map +1 -0
  39. package/dist/types/api.js +3 -0
  40. package/dist/types/api.js.map +1 -0
  41. package/dist/types/deck.d.ts +39 -0
  42. package/dist/types/deck.d.ts.map +1 -0
  43. package/dist/types/deck.js +3 -0
  44. package/dist/types/deck.js.map +1 -0
  45. package/dist/types/oauth.d.ts +34 -0
  46. package/dist/types/oauth.d.ts.map +1 -0
  47. package/dist/types/oauth.js +3 -0
  48. package/dist/types/oauth.js.map +1 -0
  49. package/dist/types/service.d.ts +80 -0
  50. package/dist/types/service.d.ts.map +1 -0
  51. package/dist/types/service.js +4 -0
  52. package/dist/types/service.js.map +1 -0
  53. package/dist/utils/collection-warnings.d.ts +32 -0
  54. package/dist/utils/collection-warnings.d.ts.map +1 -0
  55. package/dist/utils/collection-warnings.js +151 -0
  56. package/dist/utils/collection-warnings.js.map +1 -0
  57. package/dist/utils/credential.d.ts +12 -0
  58. package/dist/utils/credential.d.ts.map +1 -0
  59. package/dist/utils/credential.js +39 -0
  60. package/dist/utils/credential.js.map +1 -0
  61. package/dist/utils/database.d.ts +7 -0
  62. package/dist/utils/database.d.ts.map +1 -0
  63. package/dist/utils/database.js +64 -0
  64. package/dist/utils/database.js.map +1 -0
  65. package/dist/utils/id.d.ts +4 -0
  66. package/dist/utils/id.d.ts.map +1 -0
  67. package/dist/utils/id.js +17 -0
  68. package/dist/utils/id.js.map +1 -0
  69. package/dist/utils/index.d.ts +8 -0
  70. package/dist/utils/index.d.ts.map +1 -0
  71. package/dist/utils/index.js +24 -0
  72. package/dist/utils/index.js.map +1 -0
  73. package/dist/utils/playbook-dependencies.d.ts +27 -0
  74. package/dist/utils/playbook-dependencies.d.ts.map +1 -0
  75. package/dist/utils/playbook-dependencies.js +70 -0
  76. package/dist/utils/playbook-dependencies.js.map +1 -0
  77. package/dist/utils/playbook.d.ts +8 -0
  78. package/dist/utils/playbook.d.ts.map +1 -0
  79. package/dist/utils/playbook.js +26 -0
  80. package/dist/utils/playbook.js.map +1 -0
  81. package/dist/utils/validation.d.ts +6 -0
  82. package/dist/utils/validation.d.ts.map +1 -0
  83. package/dist/utils/validation.js +31 -0
  84. package/dist/utils/validation.js.map +1 -0
  85. package/package.json +33 -0
@@ -0,0 +1,80 @@
1
+ export interface Service {
2
+ id: string;
3
+ name: string;
4
+ type: 'mcp' | 'a2a' | 'local-mcp';
5
+ url: string;
6
+ health: 'unknown' | 'healthy' | 'unhealthy';
7
+ description?: string;
8
+ cardColor: string;
9
+ isConnected: boolean;
10
+ lastPing?: string;
11
+ registeredAt: string;
12
+ updatedAt: string;
13
+ headers?: Record<string, string>;
14
+ oauthClientId?: string;
15
+ oauthClientSecret?: string;
16
+ oauthAuthorizationUrl?: string;
17
+ oauthTokenUrl?: string;
18
+ oauthRedirectUri?: string;
19
+ oauthScope?: string;
20
+ oauthAccessToken?: string;
21
+ oauthRefreshToken?: string;
22
+ oauthTokenExpiresAt?: string;
23
+ oauthState?: string;
24
+ localCommand?: string;
25
+ localArgs?: string[];
26
+ localWorkingDir?: string;
27
+ localEnv?: Record<string, string>;
28
+ }
29
+ export interface CreateServiceInput {
30
+ name: string;
31
+ type: 'mcp' | 'a2a' | 'local-mcp';
32
+ url: string;
33
+ description?: string;
34
+ cardColor?: string;
35
+ headers?: Record<string, string>;
36
+ oauthClientId?: string;
37
+ oauthClientSecret?: string;
38
+ oauthAuthorizationUrl?: string;
39
+ oauthTokenUrl?: string;
40
+ oauthRedirectUri?: string;
41
+ oauthScope?: string;
42
+ localCommand?: string;
43
+ localArgs?: string[];
44
+ localWorkingDir?: string;
45
+ localEnv?: Record<string, string>;
46
+ }
47
+ export interface UpdateServiceInput {
48
+ name?: string;
49
+ description?: string;
50
+ cardColor?: string;
51
+ headers?: Record<string, string>;
52
+ oauthClientId?: string;
53
+ oauthClientSecret?: string;
54
+ oauthAuthorizationUrl?: string;
55
+ oauthTokenUrl?: string;
56
+ oauthRedirectUri?: string;
57
+ oauthScope?: string;
58
+ localCommand?: string;
59
+ localArgs?: string[];
60
+ localWorkingDir?: string;
61
+ localEnv?: Record<string, string>;
62
+ }
63
+ export interface ServiceTool {
64
+ name: string;
65
+ description: string;
66
+ inputSchema: Record<string, any>;
67
+ }
68
+ export interface ServiceCallInput {
69
+ serviceId: string;
70
+ toolName: string;
71
+ arguments: Record<string, any>;
72
+ }
73
+ export interface ServiceCallResult {
74
+ success: boolean;
75
+ result?: any;
76
+ error?: string;
77
+ serviceName?: string;
78
+ toolName?: string;
79
+ }
80
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/types/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // Local MCP server types are now defined in schemas/service.ts
4
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/types/service.ts"],"names":[],"mappings":";;AAiGA,+DAA+D"}
@@ -0,0 +1,32 @@
1
+ import type { Credential } from '../schemas/credential';
2
+ import type { Playbook } from '../schemas/playbook';
3
+ import type { Service } from '../schemas/service';
4
+ export type CollectionCardKind = 'service' | 'credential' | 'playbook';
5
+ export type CollectionWarningKind = 'oauth_required' | 'oauth_expired' | 'service_unhealthy' | 'credential_missing_secret' | 'playbook_missing_deps';
6
+ export type CollectionCardWarning = {
7
+ kind: CollectionWarningKind;
8
+ message: string;
9
+ severity: 'warning' | 'error';
10
+ };
11
+ export type CollectionCatalog = {
12
+ credentialIds: Set<string>;
13
+ serviceIds: Set<string>;
14
+ };
15
+ export declare function isOAuthTokenExpiringSoon(expiresAt?: string): boolean;
16
+ export type ServiceWarningContext = {
17
+ /** Live MCP discovery — OAuth required even before client credentials are stored. */
18
+ oauthRequired?: boolean;
19
+ };
20
+ export declare function getServiceWarnings(service: Service, context?: ServiceWarningContext): CollectionCardWarning[];
21
+ export declare function getCredentialWarnings(credential: Credential): CollectionCardWarning[];
22
+ export declare function getPlaybookWarnings(playbook: Playbook, catalog: CollectionCatalog): CollectionCardWarning[];
23
+ export declare function buildCollectionCatalog(credentials: Credential[], services: Service[]): CollectionCatalog;
24
+ export declare function summarizeCollectionWarnings(services: Service[], credentials: Credential[], playbooks: Playbook[], serviceWarningContext?: Record<string, ServiceWarningContext>): {
25
+ total: number;
26
+ byKind: Record<CollectionWarningKind, number>;
27
+ serviceWarnings: Map<string, CollectionCardWarning[]>;
28
+ credentialWarnings: Map<string, CollectionCardWarning[]>;
29
+ playbookWarnings: Map<string, CollectionCardWarning[]>;
30
+ };
31
+ export declare function primaryCollectionWarning(warnings: CollectionCardWarning[] | undefined): CollectionCardWarning | undefined;
32
+ //# sourceMappingURL=collection-warnings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-warnings.d.ts","sourceRoot":"","sources":["../../src/utils/collection-warnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;AAEvE,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,2BAA2B,GAC3B,uBAAuB,CAAC;AAE5B,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB,CAAC;AAIF,wBAAgB,wBAAwB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAKpE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,qFAAqF;IACrF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAgBF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,qBAA0B,GAClC,qBAAqB,EAAE,CA6CzB;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,qBAAqB,EAAE,CAYrF;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,iBAAiB,GACzB,qBAAqB,EAAE,CAkBzB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,OAAO,EAAE,GAClB,iBAAiB,CAKnB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,UAAU,EAAE,EACzB,SAAS,EAAE,QAAQ,EAAE,EACrB,qBAAqB,GAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAM,GAChE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC9C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IACtD,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IACzD,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;CACxD,CAkDA;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,qBAAqB,EAAE,GAAG,SAAS,GAC5C,qBAAqB,GAAG,SAAS,CAKnC"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isOAuthTokenExpiringSoon = isOAuthTokenExpiringSoon;
4
+ exports.getServiceWarnings = getServiceWarnings;
5
+ exports.getCredentialWarnings = getCredentialWarnings;
6
+ exports.getPlaybookWarnings = getPlaybookWarnings;
7
+ exports.buildCollectionCatalog = buildCollectionCatalog;
8
+ exports.summarizeCollectionWarnings = summarizeCollectionWarnings;
9
+ exports.primaryCollectionWarning = primaryCollectionWarning;
10
+ const OAUTH_EXPIRY_BUFFER_MS = 5 * 60 * 1000;
11
+ function isOAuthTokenExpiringSoon(expiresAt) {
12
+ if (!expiresAt) {
13
+ return false;
14
+ }
15
+ return new Date(expiresAt).getTime() <= Date.now() + OAUTH_EXPIRY_BUFFER_MS;
16
+ }
17
+ function mcpHasOAuthConfig(service) {
18
+ return Boolean(service.oauthClientId ||
19
+ service.oauthAuthorizationUrl ||
20
+ service.oauthTokenUrl);
21
+ }
22
+ function mcpHasValidOAuthSession(service) {
23
+ const hasToken = Boolean(service.oauthAccessToken);
24
+ const hasAuthHeader = Boolean(service.headers?.Authorization);
25
+ return hasToken && hasAuthHeader && !isOAuthTokenExpiringSoon(service.oauthTokenExpiresAt);
26
+ }
27
+ function getServiceWarnings(service, context = {}) {
28
+ const warnings = [];
29
+ if (service.health === 'unhealthy') {
30
+ warnings.push({
31
+ kind: 'service_unhealthy',
32
+ message: 'Service reported unhealthy',
33
+ severity: 'warning',
34
+ });
35
+ }
36
+ if (service.type !== 'mcp') {
37
+ return warnings;
38
+ }
39
+ if (mcpHasValidOAuthSession(service)) {
40
+ return warnings;
41
+ }
42
+ const oauthLikely = context.oauthRequired === true || mcpHasOAuthConfig(service);
43
+ if (!oauthLikely) {
44
+ return warnings;
45
+ }
46
+ const hasToken = Boolean(service.oauthAccessToken);
47
+ const hasAuthHeader = Boolean(service.headers?.Authorization);
48
+ if (!hasToken || !hasAuthHeader) {
49
+ warnings.push({
50
+ kind: 'oauth_required',
51
+ message: 'OAuth authentication required',
52
+ severity: 'error',
53
+ });
54
+ return warnings;
55
+ }
56
+ if (isOAuthTokenExpiringSoon(service.oauthTokenExpiresAt)) {
57
+ warnings.push({
58
+ kind: 'oauth_expired',
59
+ message: 'OAuth token expired — re-authenticate',
60
+ severity: 'error',
61
+ });
62
+ }
63
+ return warnings;
64
+ }
65
+ function getCredentialWarnings(credential) {
66
+ if (credential.hasSecret) {
67
+ return [];
68
+ }
69
+ return [
70
+ {
71
+ kind: 'credential_missing_secret',
72
+ message: 'Key missing from vault — open to add or rotate',
73
+ severity: 'error',
74
+ },
75
+ ];
76
+ }
77
+ function getPlaybookWarnings(playbook, catalog) {
78
+ const missingCredentials = playbook.dependsOnCredentialIds.filter((id) => !catalog.credentialIds.has(id));
79
+ const missingServices = playbook.dependsOnServiceIds.filter((id) => !catalog.serviceIds.has(id));
80
+ const missingCount = missingCredentials.length + missingServices.length;
81
+ if (missingCount === 0) {
82
+ return [];
83
+ }
84
+ return [
85
+ {
86
+ kind: 'playbook_missing_deps',
87
+ message: `${missingCount} missing dependency reference${missingCount === 1 ? '' : 's'}`,
88
+ severity: 'warning',
89
+ },
90
+ ];
91
+ }
92
+ function buildCollectionCatalog(credentials, services) {
93
+ return {
94
+ credentialIds: new Set(credentials.map((item) => item.id)),
95
+ serviceIds: new Set(services.map((item) => item.id)),
96
+ };
97
+ }
98
+ function summarizeCollectionWarnings(services, credentials, playbooks, serviceWarningContext = {}) {
99
+ const catalog = buildCollectionCatalog(credentials, services);
100
+ const serviceWarnings = new Map();
101
+ const credentialWarnings = new Map();
102
+ const playbookWarnings = new Map();
103
+ const byKind = {
104
+ oauth_required: 0,
105
+ oauth_expired: 0,
106
+ service_unhealthy: 0,
107
+ credential_missing_secret: 0,
108
+ playbook_missing_deps: 0,
109
+ };
110
+ for (const service of services) {
111
+ const warnings = getServiceWarnings(service, serviceWarningContext[service.id]);
112
+ if (warnings.length > 0) {
113
+ serviceWarnings.set(service.id, warnings);
114
+ for (const warning of warnings) {
115
+ byKind[warning.kind] += 1;
116
+ }
117
+ }
118
+ }
119
+ for (const credential of credentials) {
120
+ const warnings = getCredentialWarnings(credential);
121
+ if (warnings.length > 0) {
122
+ credentialWarnings.set(credential.id, warnings);
123
+ for (const warning of warnings) {
124
+ byKind[warning.kind] += 1;
125
+ }
126
+ }
127
+ }
128
+ for (const playbook of playbooks) {
129
+ const warnings = getPlaybookWarnings(playbook, catalog);
130
+ if (warnings.length > 0) {
131
+ playbookWarnings.set(playbook.id, warnings);
132
+ for (const warning of warnings) {
133
+ byKind[warning.kind] += 1;
134
+ }
135
+ }
136
+ }
137
+ return {
138
+ total: serviceWarnings.size + credentialWarnings.size + playbookWarnings.size,
139
+ byKind,
140
+ serviceWarnings,
141
+ credentialWarnings,
142
+ playbookWarnings,
143
+ };
144
+ }
145
+ function primaryCollectionWarning(warnings) {
146
+ if (!warnings?.length) {
147
+ return undefined;
148
+ }
149
+ return warnings.find((warning) => warning.severity === 'error') ?? warnings[0];
150
+ }
151
+ //# sourceMappingURL=collection-warnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-warnings.js","sourceRoot":"","sources":["../../src/utils/collection-warnings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare function slugifyCredentialLabel(label: string): string;
2
+ export declare function deriveEnvNameFromLabel(label: string): string;
3
+ export declare function deriveCredentialIdFromLabel(label: string): string;
4
+ export type CredentialDefaults = {
5
+ id: string;
6
+ label: string;
7
+ scheme: 'bearer' | 'header' | 'http_basic_user';
8
+ envName: string;
9
+ tags: string[];
10
+ };
11
+ export declare function deriveCredentialDefaults(label: string, overrides?: Partial<CredentialDefaults>): CredentialDefaults;
12
+ //# sourceMappingURL=credential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/utils/credential.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS5D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS5D;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACtC,kBAAkB,CASpB"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.slugifyCredentialLabel = slugifyCredentialLabel;
4
+ exports.deriveEnvNameFromLabel = deriveEnvNameFromLabel;
5
+ exports.deriveCredentialIdFromLabel = deriveCredentialIdFromLabel;
6
+ exports.deriveCredentialDefaults = deriveCredentialDefaults;
7
+ function slugifyCredentialLabel(label) {
8
+ const slug = label
9
+ .trim()
10
+ .toLowerCase()
11
+ .replace(/[^a-z0-9]+/g, '_')
12
+ .replace(/^_+|_+$/g, '')
13
+ .slice(0, 40);
14
+ return slug || 'connection';
15
+ }
16
+ function deriveEnvNameFromLabel(label) {
17
+ let slug = slugifyCredentialLabel(label).toUpperCase();
18
+ if (slug.endsWith('_API_KEY')) {
19
+ return slug;
20
+ }
21
+ if (slug.endsWith('_API')) {
22
+ slug = slug.slice(0, -4);
23
+ }
24
+ return `${slug}_API_KEY`;
25
+ }
26
+ function deriveCredentialIdFromLabel(label) {
27
+ return `cred_${slugifyCredentialLabel(label)}`;
28
+ }
29
+ function deriveCredentialDefaults(label, overrides) {
30
+ const trimmed = label.trim();
31
+ return {
32
+ id: overrides?.id ?? deriveCredentialIdFromLabel(trimmed),
33
+ label: trimmed,
34
+ scheme: overrides?.scheme ?? 'bearer',
35
+ envName: overrides?.envName ?? deriveEnvNameFromLabel(trimmed),
36
+ tags: overrides?.tags ?? [],
37
+ };
38
+ }
39
+ //# sourceMappingURL=credential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential.js","sourceRoot":"","sources":["../../src/utils/credential.ts"],"names":[],"mappings":";;AAAA,wDASC;AAED,wDASC;AAED,kEAEC;AAUD,4DAYC;AA9CD,SAAgB,sBAAsB,CAAC,KAAa;IAClD,MAAM,IAAI,GAAG,KAAK;SACf,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,OAAO,IAAI,IAAI,YAAY,CAAC;AAC9B,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAa;IAClD,IAAI,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,GAAG,IAAI,UAAU,CAAC;AAC3B,CAAC;AAED,SAAgB,2BAA2B,CAAC,KAAa;IACvD,OAAO,QAAQ,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;AACjD,CAAC;AAUD,SAAgB,wBAAwB,CACtC,KAAa,EACb,SAAuC;IAEvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO;QACL,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,2BAA2B,CAAC,OAAO,CAAC;QACzD,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,QAAQ;QACrC,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC;QAC9D,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function toSnakeCase(str: string): string;
2
+ export declare function toCamelCase(str: string): string;
3
+ export declare function convertToSnakeCase(obj: Record<string, any>): Record<string, any>;
4
+ export declare function convertToCamelCase(obj: Record<string, any>): Record<string, any>;
5
+ export declare function serializeForDatabase(obj: Record<string, any>): Record<string, any>;
6
+ export declare function deserializeFromDatabase(obj: Record<string, any>): Record<string, any>;
7
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAShF;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAShF;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAgBlF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkBrF"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toSnakeCase = toSnakeCase;
4
+ exports.toCamelCase = toCamelCase;
5
+ exports.convertToSnakeCase = convertToSnakeCase;
6
+ exports.convertToCamelCase = convertToCamelCase;
7
+ exports.serializeForDatabase = serializeForDatabase;
8
+ exports.deserializeFromDatabase = deserializeFromDatabase;
9
+ function toSnakeCase(str) {
10
+ return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
11
+ }
12
+ function toCamelCase(str) {
13
+ return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
14
+ }
15
+ function convertToSnakeCase(obj) {
16
+ const result = {};
17
+ for (const [key, value] of Object.entries(obj)) {
18
+ const snakeKey = toSnakeCase(key);
19
+ result[snakeKey] = value;
20
+ }
21
+ return result;
22
+ }
23
+ function convertToCamelCase(obj) {
24
+ const result = {};
25
+ for (const [key, value] of Object.entries(obj)) {
26
+ const camelKey = toCamelCase(key);
27
+ result[camelKey] = value;
28
+ }
29
+ return result;
30
+ }
31
+ function serializeForDatabase(obj) {
32
+ const result = {};
33
+ for (const [key, value] of Object.entries(obj)) {
34
+ if (value === undefined || value === null) {
35
+ continue;
36
+ }
37
+ if (typeof value === 'object' && !Array.isArray(value)) {
38
+ result[toSnakeCase(key)] = JSON.stringify(value);
39
+ }
40
+ else {
41
+ result[toSnakeCase(key)] = value;
42
+ }
43
+ }
44
+ return result;
45
+ }
46
+ function deserializeFromDatabase(obj) {
47
+ const result = {};
48
+ for (const [key, value] of Object.entries(obj)) {
49
+ const camelKey = toCamelCase(key);
50
+ if (typeof value === 'string' && (value.startsWith('{') || value.startsWith('['))) {
51
+ try {
52
+ result[camelKey] = JSON.parse(value);
53
+ }
54
+ catch {
55
+ result[camelKey] = value;
56
+ }
57
+ }
58
+ else {
59
+ result[camelKey] = value;
60
+ }
61
+ }
62
+ return result;
63
+ }
64
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function generateId(): string;
2
+ export declare function generateShortId(): string;
3
+ export declare function isValidUUID(id: string): boolean;
4
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAG/C"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateId = generateId;
4
+ exports.generateShortId = generateShortId;
5
+ exports.isValidUUID = isValidUUID;
6
+ const crypto_1 = require("crypto");
7
+ function generateId() {
8
+ return (0, crypto_1.randomUUID)();
9
+ }
10
+ function generateShortId() {
11
+ return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
12
+ }
13
+ function isValidUUID(id) {
14
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
15
+ return uuidRegex.test(id);
16
+ }
17
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":";;AAEA,gCAEC;AAED,0CAEC;AAED,kCAGC;AAbD,mCAAoC;AAEpC,SAAgB,UAAU;IACxB,OAAO,IAAA,mBAAU,GAAE,CAAC;AACtB,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnG,CAAC;AAED,SAAgB,WAAW,CAAC,EAAU;IACpC,MAAM,SAAS,GAAG,4EAA4E,CAAC;IAC/F,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './id';
2
+ export * from './validation';
3
+ export * from './database';
4
+ export * from './credential';
5
+ export * from './playbook';
6
+ export * from './playbook-dependencies';
7
+ export * from './collection-warnings';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./id"), exports);
18
+ __exportStar(require("./validation"), exports);
19
+ __exportStar(require("./database"), exports);
20
+ __exportStar(require("./credential"), exports);
21
+ __exportStar(require("./playbook"), exports);
22
+ __exportStar(require("./playbook-dependencies"), exports);
23
+ __exportStar(require("./collection-warnings"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAqB;AACrB,+CAA6B;AAC7B,6CAA2B;AAC3B,+CAA6B;AAC7B,6CAA2B;AAC3B,0DAAwC;AACxC,wDAAsC"}
@@ -0,0 +1,27 @@
1
+ export type PlaybookDependencyCatalog = {
2
+ credentials: Array<{
3
+ id: string;
4
+ label: string;
5
+ envName: string;
6
+ }>;
7
+ services: Array<{
8
+ id: string;
9
+ name: string;
10
+ }>;
11
+ };
12
+ export type PlaybookDependencyText = {
13
+ title?: string;
14
+ body?: string;
15
+ exec?: string;
16
+ skill?: string;
17
+ triggers?: string[];
18
+ };
19
+ export declare function buildPlaybookSearchText(parts: PlaybookDependencyText): string;
20
+ export declare function detectPlaybookDependencies(text: string, catalog: PlaybookDependencyCatalog, explicit?: {
21
+ credentialIds?: string[];
22
+ serviceIds?: string[];
23
+ }): {
24
+ dependsOnCredentialIds: string[];
25
+ dependsOnServiceIds: string[];
26
+ };
27
+ //# sourceMappingURL=playbook-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook-dependencies.d.ts","sourceRoot":"","sources":["../../src/utils/playbook-dependencies.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAmBF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAQ7E;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,yBAAyB,EAClC,QAAQ,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACjE;IAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC;IAAC,mBAAmB,EAAE,MAAM,EAAE,CAAA;CAAE,CAkDrE"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPlaybookSearchText = buildPlaybookSearchText;
4
+ exports.detectPlaybookDependencies = detectPlaybookDependencies;
5
+ const CREDENTIAL_ID_PATTERN = /\bcred_[a-z0-9_]+\b/g;
6
+ const UUID_PATTERN = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi;
7
+ const CONNECTIONS_FLAG_PATTERN = /--connections(?:=|\s+)([^\s]+)/g;
8
+ function escapeRegex(value) {
9
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
10
+ }
11
+ function matchesWholeWord(text, word) {
12
+ const trimmed = word.trim();
13
+ if (!trimmed) {
14
+ return false;
15
+ }
16
+ return new RegExp(`\\b${escapeRegex(trimmed)}\\b`, 'i').test(text);
17
+ }
18
+ function buildPlaybookSearchText(parts) {
19
+ return [
20
+ parts.title ?? '',
21
+ parts.body ?? '',
22
+ parts.exec ?? '',
23
+ parts.skill ?? '',
24
+ ...(parts.triggers ?? []),
25
+ ].join('\n');
26
+ }
27
+ function detectPlaybookDependencies(text, catalog, explicit = {}) {
28
+ const credentialIds = new Set(explicit.credentialIds ?? []);
29
+ const serviceIds = new Set(explicit.serviceIds ?? []);
30
+ const knownCredentialIds = new Set(catalog.credentials.map((item) => item.id));
31
+ const servicesById = new Map(catalog.services.map((service) => [service.id.toLowerCase(), service.id]));
32
+ for (const match of text.matchAll(CREDENTIAL_ID_PATTERN)) {
33
+ const id = match[0];
34
+ if (knownCredentialIds.has(id)) {
35
+ credentialIds.add(id);
36
+ }
37
+ }
38
+ for (const match of text.matchAll(CONNECTIONS_FLAG_PATTERN)) {
39
+ for (const token of match[1].split(',')) {
40
+ const id = token.trim();
41
+ if (knownCredentialIds.has(id)) {
42
+ credentialIds.add(id);
43
+ }
44
+ }
45
+ }
46
+ for (const credential of catalog.credentials) {
47
+ if (credential.envName && text.includes(credential.envName)) {
48
+ credentialIds.add(credential.id);
49
+ }
50
+ if (matchesWholeWord(text, credential.label)) {
51
+ credentialIds.add(credential.id);
52
+ }
53
+ }
54
+ for (const match of text.matchAll(UUID_PATTERN)) {
55
+ const resolved = servicesById.get(match[0].toLowerCase());
56
+ if (resolved) {
57
+ serviceIds.add(resolved);
58
+ }
59
+ }
60
+ for (const service of catalog.services) {
61
+ if (matchesWholeWord(text, service.name)) {
62
+ serviceIds.add(service.id);
63
+ }
64
+ }
65
+ return {
66
+ dependsOnCredentialIds: [...credentialIds].sort(),
67
+ dependsOnServiceIds: [...serviceIds].sort(),
68
+ };
69
+ }
70
+ //# sourceMappingURL=playbook-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook-dependencies.js","sourceRoot":"","sources":["../../src/utils/playbook-dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function slugifyPlaybookTitle(title: string): string;
2
+ export declare function derivePlaybookIdFromTitle(title: string): string;
3
+ export type PlaybookDefaults = {
4
+ id: string;
5
+ title: string;
6
+ };
7
+ export declare function derivePlaybookDefaults(title: string, overrides?: Partial<PlaybookDefaults>): PlaybookDefaults;
8
+ //# sourceMappingURL=playbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook.d.ts","sourceRoot":"","sources":["../../src/utils/playbook.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ1D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACpC,gBAAgB,CAMlB"}