@linktr.ee/linkapp 0.0.38 → 0.0.39

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 (80) hide show
  1. package/dist/cli.js +1 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/add.d.ts.map +1 -1
  4. package/dist/commands/add.js +84 -59
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/build.d.ts.map +1 -1
  7. package/dist/commands/build.js +66 -84
  8. package/dist/commands/build.js.map +1 -1
  9. package/dist/commands/deploy.d.ts +15 -10
  10. package/dist/commands/deploy.d.ts.map +1 -1
  11. package/dist/commands/deploy.js +26 -199
  12. package/dist/commands/deploy.js.map +1 -1
  13. package/dist/lib/config/resolve-config-path.d.ts +19 -0
  14. package/dist/lib/config/resolve-config-path.d.ts.map +1 -0
  15. package/dist/lib/config/resolve-config-path.js +54 -0
  16. package/dist/lib/config/resolve-config-path.js.map +1 -0
  17. package/dist/lib/deploy/artifacts.d.ts +21 -0
  18. package/dist/lib/deploy/artifacts.d.ts.map +1 -0
  19. package/dist/lib/deploy/artifacts.js +35 -0
  20. package/dist/lib/deploy/artifacts.js.map +1 -0
  21. package/dist/lib/deploy/confirmation.d.ts +12 -0
  22. package/dist/lib/deploy/confirmation.d.ts.map +1 -0
  23. package/dist/lib/deploy/confirmation.js +30 -0
  24. package/dist/lib/deploy/confirmation.js.map +1 -0
  25. package/dist/lib/deploy/context.d.ts +44 -0
  26. package/dist/lib/deploy/context.d.ts.map +1 -0
  27. package/dist/lib/deploy/context.js +39 -0
  28. package/dist/lib/deploy/context.js.map +1 -0
  29. package/dist/lib/deploy/deploy-output.d.ts +10 -0
  30. package/dist/lib/deploy/deploy-output.d.ts.map +1 -0
  31. package/dist/lib/deploy/deploy-output.js +79 -0
  32. package/dist/lib/deploy/deploy-output.js.map +1 -0
  33. package/dist/lib/deploy/deploy-phases.d.ts +41 -0
  34. package/dist/lib/deploy/deploy-phases.d.ts.map +1 -0
  35. package/dist/lib/deploy/deploy-phases.js +116 -0
  36. package/dist/lib/deploy/deploy-phases.js.map +1 -0
  37. package/dist/lib/deploy/deploy-utils.d.ts +53 -0
  38. package/dist/lib/deploy/deploy-utils.d.ts.map +1 -0
  39. package/dist/lib/deploy/deploy-utils.js +149 -0
  40. package/dist/lib/deploy/deploy-utils.js.map +1 -0
  41. package/dist/lib/deploy/execution.d.ts +24 -0
  42. package/dist/lib/deploy/execution.d.ts.map +1 -0
  43. package/dist/lib/deploy/execution.js +29 -0
  44. package/dist/lib/deploy/execution.js.map +1 -0
  45. package/dist/lib/deploy/output.d.ts +16 -0
  46. package/dist/lib/deploy/output.d.ts.map +1 -0
  47. package/dist/lib/deploy/output.js +115 -0
  48. package/dist/lib/deploy/output.js.map +1 -0
  49. package/dist/lib/deploy/pack-project.js +2 -2
  50. package/dist/lib/deploy/pack-project.js.map +1 -1
  51. package/dist/lib/deploy/preflight.d.ts +9 -0
  52. package/dist/lib/deploy/preflight.d.ts.map +1 -0
  53. package/dist/lib/deploy/preflight.js +59 -0
  54. package/dist/lib/deploy/preflight.js.map +1 -0
  55. package/dist/lib/deploy/validation.d.ts.map +1 -1
  56. package/dist/lib/deploy/validation.js +6 -8
  57. package/dist/lib/deploy/validation.js.map +1 -1
  58. package/dist/lib/utils/constants.d.ts +42 -0
  59. package/dist/lib/utils/constants.d.ts.map +1 -0
  60. package/dist/lib/utils/constants.js +42 -0
  61. package/dist/lib/utils/constants.js.map +1 -0
  62. package/dist/lib/utils/errors.d.ts +49 -0
  63. package/dist/lib/utils/errors.d.ts.map +1 -0
  64. package/dist/lib/utils/errors.js +70 -0
  65. package/dist/lib/utils/errors.js.map +1 -0
  66. package/dist/lib/utils/formatters.d.ts +34 -0
  67. package/dist/lib/utils/formatters.d.ts.map +1 -0
  68. package/dist/lib/utils/formatters.js +59 -0
  69. package/dist/lib/utils/formatters.js.map +1 -0
  70. package/dist/lib/utils/output.d.ts +46 -0
  71. package/dist/lib/utils/output.d.ts.map +1 -0
  72. package/dist/lib/utils/output.js +66 -0
  73. package/dist/lib/utils/output.js.map +1 -0
  74. package/dist/sdk/use-open-popup.d.ts +23 -0
  75. package/dist/sdk/use-open-popup.d.ts.map +1 -0
  76. package/dist/sdk/use-open-popup.js +29 -0
  77. package/dist/sdk/use-open-popup.js.map +1 -0
  78. package/package.json +1 -26
  79. package/runtime/index.html +0 -1
  80. /package/dev-server/preview/{preview.tsx → Preview.tsx} +0 -0
@@ -0,0 +1,79 @@
1
+ import pc from 'picocolors';
2
+ import { writeLine, writeSeparator, formatElapsedTime, formatTimestamp, isAPIError, DeploymentCancelledError, AuthenticationError, URLS, } from './deploy-utils.js';
3
+ /**
4
+ * Displays successful deployment results.
5
+ */
6
+ export function displayDeploymentSuccess(context, result) {
7
+ const totalTime = formatElapsedTime(Date.now() - context.startTime);
8
+ writeLine();
9
+ writeSeparator();
10
+ writeLine(pc.green(pc.bold('\n✓ Deployment successful!')));
11
+ writeLine(pc.dim(` Completed in ${totalTime}`));
12
+ writeLine();
13
+ writeLine(pc.bold('Details:'));
14
+ writeLine(pc.dim(` ID: ${result.linkType.linkTypeId}`));
15
+ writeLine(pc.dim(` Status: ${result.linkType.status}`));
16
+ const timestamp = formatTimestamp(result.linkType.updatedTimestamp);
17
+ if (timestamp) {
18
+ writeLine(pc.dim(` Updated: ${timestamp}`));
19
+ }
20
+ writeLine();
21
+ writeLine(pc.bold('Next steps:'));
22
+ if (result.build?.id) {
23
+ const buildUrl = URLS.buildStatus(result.linkType.linkTypeId, result.build.id);
24
+ writeLine(pc.cyan(' 1. Building your LinkApp (this may take a few minutes):'));
25
+ writeLine(pc.dim(` ${buildUrl}`));
26
+ writeLine();
27
+ }
28
+ const createUrl = context.env === 'qa'
29
+ ? URLS.adminCreateLink.qa(result.linkType.linkTypeId)
30
+ : URLS.adminCreateLink.production(result.linkType.linkTypeId);
31
+ writeLine(pc.cyan(' 2. Once the build completes, add it to your page:'));
32
+ writeLine(pc.dim(` ${createUrl}`));
33
+ writeLine();
34
+ }
35
+ /**
36
+ * Displays deployment error information.
37
+ */
38
+ export function displayDeploymentError(error) {
39
+ writeLine();
40
+ writeSeparator();
41
+ writeLine(pc.red(pc.bold('\n✗ Deployment failed')));
42
+ writeLine();
43
+ if (error instanceof DeploymentCancelledError) {
44
+ writeLine(pc.yellow('⚠ Deployment cancelled'));
45
+ writeLine();
46
+ return;
47
+ }
48
+ if (error instanceof AuthenticationError) {
49
+ writeLine(pc.dim(` ${error.userMessage ?? error.message}`));
50
+ writeLine();
51
+ return;
52
+ }
53
+ if (isAPIError(error)) {
54
+ writeLine(pc.bold('Error Details:'));
55
+ writeLine(pc.red(` Status: ${error.statusCode}`));
56
+ if (error.messages.length > 0) {
57
+ writeLine();
58
+ writeLine(pc.bold(' Validation Errors:'));
59
+ for (const msg of error.messages) {
60
+ writeLine(pc.red(` • ${msg}`));
61
+ }
62
+ }
63
+ if (error.responseData?.error) {
64
+ writeLine();
65
+ writeLine(pc.bold(' Error Type:'));
66
+ writeLine(pc.red(` ${error.responseData.error}`));
67
+ }
68
+ writeLine();
69
+ return;
70
+ }
71
+ if (error instanceof Error) {
72
+ writeLine(pc.dim(` ${error.message}`));
73
+ }
74
+ else {
75
+ writeLine(pc.dim(` ${String(error)}`));
76
+ }
77
+ writeLine();
78
+ }
79
+ //# sourceMappingURL=deploy-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-output.js","sourceRoot":"","sources":["../../../src/lib/deploy/deploy-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { AppConfig } from '../../types.js';
2
+ export type Environment = 'production' | 'qa';
3
+ export interface DeployOptions {
4
+ path?: string;
5
+ endpoint?: string;
6
+ qa?: boolean;
7
+ skipBuild?: boolean;
8
+ skipChecks?: boolean;
9
+ force?: boolean;
10
+ skipConfirm?: boolean;
11
+ }
12
+ export interface DeploymentContext {
13
+ env: Environment;
14
+ config: AppConfig;
15
+ projectPath: string;
16
+ linkAppId: string;
17
+ accessToken: string;
18
+ startTime: number;
19
+ options: DeployOptions;
20
+ }
21
+ export interface ArtifactPreparationResult {
22
+ packedFiles: string[];
23
+ exists: boolean;
24
+ apiUrl: string;
25
+ }
26
+ export interface UploadResult {
27
+ linkType: {
28
+ linkTypeId: string;
29
+ status: string;
30
+ updatedTimestamp?: number;
31
+ };
32
+ build?: {
33
+ id: string;
34
+ };
35
+ }
36
+ export declare function initializeDeployment(options: DeployOptions): Promise<DeploymentContext>;
37
+ export declare function runPreflightChecks(context: DeploymentContext): Promise<void>;
38
+ export declare function prepareDeploymentArtifacts(context: DeploymentContext): Promise<ArtifactPreparationResult>;
39
+ export declare function confirmDeployment(context: DeploymentContext, artifacts: ArtifactPreparationResult): Promise<void>;
40
+ export declare function executeDeployment(context: DeploymentContext, artifacts: ArtifactPreparationResult): Promise<UploadResult>;
41
+ //# sourceMappingURL=deploy-phases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-phases.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/deploy-phases.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAoB/C,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,IAAI,CAAA;AAE7C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,WAAW,CAAA;IAChB,MAAM,EAAE,SAAS,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,aAAa,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;IACD,KAAK,CAAC,EAAE;QACN,EAAE,EAAE,MAAM,CAAA;KACX,CAAA;CACF;AAMD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAwB5B;AAMD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBlF;AAMD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,yBAAyB,CAAC,CAiBpC;AAMD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,yBAAyB,GACnC,OAAO,CAAC,IAAI,CAAC,CAcf;AAMD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,yBAAyB,GACnC,OAAO,CAAC,YAAY,CAAC,CAmBvB"}
@@ -0,0 +1,116 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import pc from 'picocolors';
4
+ import * as p from '@clack/prompts';
5
+ import { getAppConfig } from '../auth/config.js';
6
+ import { getToken } from '../auth/token-storage.js';
7
+ import { buildCommand } from '../../commands/build.js';
8
+ import { validateProject, printValidationResults } from './validation.js';
9
+ import { generateManifestFiles } from './generate-manifest-files.js';
10
+ import { packProject } from './pack-project.js';
11
+ import { checkLinkAppExists, uploadAssets } from './upload.js';
12
+ import { resolveConfigPath, getLinkAppIdFromConfig, AuthenticationError, ValidationError, DeploymentCancelledError, writeLine, writeSection, formatElapsedTime, displayFileList, pluralize, } from './deploy-utils.js';
13
+ // ============================================================================
14
+ // PHASE 1: INITIALIZATION
15
+ // ============================================================================
16
+ export async function initializeDeployment(options) {
17
+ const env = options.qa ? 'qa' : 'production';
18
+ const config = await getAppConfig(env);
19
+ const projectPath = options.path ?? process.cwd();
20
+ const configPath = resolveConfigPath(projectPath);
21
+ const linkAppId = await getLinkAppIdFromConfig(configPath);
22
+ writeSection(`Deploying ${linkAppId} to ${env}`);
23
+ const accessToken = getToken(config.auth.audience);
24
+ if (!accessToken) {
25
+ throw new AuthenticationError(env);
26
+ }
27
+ return {
28
+ env,
29
+ config,
30
+ projectPath,
31
+ linkAppId,
32
+ accessToken,
33
+ startTime: Date.now(),
34
+ options,
35
+ };
36
+ }
37
+ // ============================================================================
38
+ // PHASE 2: PREFLIGHT CHECKS
39
+ // ============================================================================
40
+ export async function runPreflightChecks(context) {
41
+ // Ensure project is built
42
+ if (!context.options.skipBuild) {
43
+ const distPath = join(context.projectPath, 'dist');
44
+ if (!existsSync(distPath)) {
45
+ writeLine(pc.bold('Building project...'));
46
+ const buildStart = Date.now();
47
+ await buildCommand({ sourcemap: false });
48
+ writeLine(pc.dim(` Completed in ${formatElapsedTime(Date.now() - buildStart)}`));
49
+ writeLine();
50
+ }
51
+ }
52
+ // Run validation checks
53
+ if (!context.options.skipChecks) {
54
+ writeLine(pc.bold('Pre-deployment checks'));
55
+ const validationResult = await validateProject();
56
+ printValidationResults(validationResult);
57
+ if (!validationResult.success) {
58
+ writeLine();
59
+ throw new ValidationError('Validation failed');
60
+ }
61
+ writeLine();
62
+ }
63
+ }
64
+ // ============================================================================
65
+ // PHASE 3: PREPARE ARTIFACTS
66
+ // ============================================================================
67
+ export async function prepareDeploymentArtifacts(context) {
68
+ const s = p.spinner();
69
+ s.start('Generating manifest files');
70
+ await generateManifestFiles(context.projectPath);
71
+ s.stop('Manifest files generated');
72
+ s.start('Checking LinkApp status');
73
+ const apiUrl = context.options.endpoint ?? `${context.config.link_types_url}/link-types`;
74
+ const exists = await checkLinkAppExists(apiUrl, context.linkAppId, context.accessToken);
75
+ s.stop(exists ? 'Updating existing LinkApp' : 'Creating new LinkApp');
76
+ s.start('Packing project files');
77
+ const packedFiles = await packProject({ projectPath: context.projectPath });
78
+ s.stop(`Packed ${pluralize(packedFiles.length, 'item')}`);
79
+ return { packedFiles, exists, apiUrl };
80
+ }
81
+ // ============================================================================
82
+ // PHASE 4: CONFIRM DEPLOYMENT
83
+ // ============================================================================
84
+ export async function confirmDeployment(context, artifacts) {
85
+ if (context.options.skipConfirm)
86
+ return;
87
+ displayFileList(artifacts.packedFiles, 'Files to upload:');
88
+ writeLine();
89
+ const shouldDeploy = await p.confirm({
90
+ message: `Deploy to ${context.env}?`,
91
+ initialValue: true,
92
+ });
93
+ if (p.isCancel(shouldDeploy) || !shouldDeploy) {
94
+ throw new DeploymentCancelledError();
95
+ }
96
+ }
97
+ // ============================================================================
98
+ // PHASE 5: EXECUTE DEPLOYMENT
99
+ // ============================================================================
100
+ export async function executeDeployment(context, artifacts) {
101
+ writeLine();
102
+ const uploadStart = Date.now();
103
+ const s = p.spinner();
104
+ s.start('Uploading assets');
105
+ const result = await uploadAssets({
106
+ projectPath: context.projectPath,
107
+ apiUrl: artifacts.apiUrl,
108
+ linkAppId: context.linkAppId,
109
+ accessToken: context.accessToken,
110
+ isUpdate: artifacts.exists,
111
+ forceUpdate: context.options.force,
112
+ });
113
+ s.stop(`Assets uploaded (${formatElapsedTime(Date.now() - uploadStart)})`);
114
+ return result;
115
+ }
116
+ //# sourceMappingURL=deploy-phases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-phases.js","sourceRoot":"","sources":["../../../src/lib/deploy/deploy-phases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Resolves the path to linkapp.config.ts in a project.
3
+ */
4
+ export declare function resolveConfigPath(projectPath: string): string;
5
+ /**
6
+ * Extracts the LinkApp ID from a configuration file.
7
+ */
8
+ export declare function getLinkAppIdFromConfig(configPath: string): Promise<string>;
9
+ export declare function writeLine(message?: string): void;
10
+ export declare function writeSection(title: string, length?: number): void;
11
+ export declare function writeSeparator(length?: number): void;
12
+ export declare const DISPLAY: {
13
+ readonly FILE_PREVIEW_LIMIT: 8;
14
+ readonly SEPARATOR_LENGTH: 50;
15
+ };
16
+ export declare const TIMESTAMP: {
17
+ readonly SECONDS_TO_MS_THRESHOLD: 10000000000;
18
+ };
19
+ export declare const URLS: {
20
+ readonly buildStatus: (linkTypeId: string, buildId: string) => string;
21
+ readonly adminCreateLink: {
22
+ readonly production: (linkTypeId: string) => string;
23
+ readonly qa: (linkTypeId: string) => string;
24
+ };
25
+ };
26
+ export declare function formatTimestamp(timestamp: number | undefined): string | null;
27
+ export declare function formatElapsedTime(ms: number): string;
28
+ export declare function displayFileList(files: string[], title: string): void;
29
+ export declare function pluralize(count: number, singular: string, plural?: string): string;
30
+ export declare class DeploymentError extends Error {
31
+ readonly exitCode: number;
32
+ userMessage?: string;
33
+ constructor(message: string, exitCode?: number, userMessage?: string);
34
+ }
35
+ export declare class AuthenticationError extends DeploymentError {
36
+ readonly environment: 'production' | 'qa';
37
+ constructor(environment: 'production' | 'qa');
38
+ }
39
+ export declare class ValidationError extends DeploymentError {
40
+ constructor(message: string, details?: string[]);
41
+ }
42
+ export declare class DeploymentCancelledError extends DeploymentError {
43
+ constructor();
44
+ }
45
+ export interface APIError {
46
+ statusCode: number;
47
+ messages: string[];
48
+ responseData?: {
49
+ error?: string;
50
+ };
51
+ }
52
+ export declare function isAPIError(error: unknown): error is APIError;
53
+ //# sourceMappingURL=deploy-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/deploy-utils.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BhF;AAMD,wBAAgB,SAAS,CAAC,OAAO,SAAK,GAAG,IAAI,CAE5C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,IAAI,CAI7D;AAED,wBAAgB,cAAc,CAAC,MAAM,SAAK,GAAG,IAAI,CAEhD;AAMD,eAAO,MAAM,OAAO;;;CAGV,CAAA;AAEV,eAAO,MAAM,SAAS;;CAEZ,CAAA;AAEV,eAAO,MAAM,IAAI;uCACW,MAAM,WAAW,MAAM;;0CAGtB,MAAM;kCAEd,MAAM;;CAGjB,CAAA;AAMV,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO5E;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAYpE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlF;AAMD,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;gBAEf,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,WAAW,CAAC,EAAE,MAAM;CAQhE;AAED,qBAAa,mBAAoB,SAAQ,eAAe;aAC1B,WAAW,EAAE,YAAY,GAAG,IAAI;gBAAhC,WAAW,EAAE,YAAY,GAAG,IAAI;CAK7D;AAED,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE;CAOhD;AAED,qBAAa,wBAAyB,SAAQ,eAAe;;CAK5D;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,YAAY,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAQ5D"}
@@ -0,0 +1,149 @@
1
+ import pc from 'picocolors';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ // ============================================================================
5
+ // CONFIG PATH RESOLUTION
6
+ // ============================================================================
7
+ /**
8
+ * Resolves the path to linkapp.config.ts in a project.
9
+ */
10
+ export function resolveConfigPath(projectPath) {
11
+ const rootConfigPath = join(projectPath, 'linkapp.config.ts');
12
+ const nestedConfigPath = join(projectPath, '.config', 'linkapp.config.ts');
13
+ if (existsSync(rootConfigPath))
14
+ return rootConfigPath;
15
+ if (existsSync(nestedConfigPath))
16
+ return nestedConfigPath;
17
+ throw new Error('Configuration file not found. Expected linkapp.config.ts in project root or .config directory.');
18
+ }
19
+ /**
20
+ * Extracts the LinkApp ID from a configuration file.
21
+ */
22
+ export async function getLinkAppIdFromConfig(configPath) {
23
+ const { createJiti } = await import('jiti');
24
+ const jiti = createJiti(import.meta.url, {
25
+ interopDefault: true,
26
+ moduleCache: false,
27
+ });
28
+ try {
29
+ const config = jiti(configPath);
30
+ if (!config?.manifest?.name) {
31
+ throw new Error('manifest.name is required in linkapp.config.ts');
32
+ }
33
+ return config.manifest.name
34
+ .toLowerCase()
35
+ .replace(/[^a-z0-9]+/g, '-')
36
+ .replace(/^-+|-+$/g, '');
37
+ }
38
+ catch (error) {
39
+ if (error instanceof Error && error.message.includes('manifest.name is required')) {
40
+ throw error;
41
+ }
42
+ throw new Error(`Failed to load linkapp.config.ts: ${error instanceof Error ? error.message : String(error)}`);
43
+ }
44
+ }
45
+ // ============================================================================
46
+ // OUTPUT UTILITIES
47
+ // ============================================================================
48
+ export function writeLine(message = '') {
49
+ process.stdout.write(`${message}\n`);
50
+ }
51
+ export function writeSection(title, length = 50) {
52
+ writeLine(pc.bold(pc.cyan(`\n→ ${title}`)));
53
+ writeLine(pc.dim('─'.repeat(length)));
54
+ writeLine();
55
+ }
56
+ export function writeSeparator(length = 50) {
57
+ writeLine(pc.dim('─'.repeat(length)));
58
+ }
59
+ // ============================================================================
60
+ // CONSTANTS
61
+ // ============================================================================
62
+ export const DISPLAY = {
63
+ FILE_PREVIEW_LIMIT: 8,
64
+ SEPARATOR_LENGTH: 50,
65
+ };
66
+ export const TIMESTAMP = {
67
+ SECONDS_TO_MS_THRESHOLD: 10000000000,
68
+ };
69
+ export const URLS = {
70
+ buildStatus: (linkTypeId, buildId) => `https://linkapp-ci.replit.app/?linkTypeId=${linkTypeId}&buildId=${buildId}`,
71
+ adminCreateLink: {
72
+ production: (linkTypeId) => `https://linktr.ee/admin?action=create-link&linkType=${linkTypeId}`,
73
+ qa: (linkTypeId) => `https://qa.linktr.ee/admin?action=create-link&linkType=${linkTypeId}`,
74
+ },
75
+ };
76
+ // ============================================================================
77
+ // FORMATTERS
78
+ // ============================================================================
79
+ export function formatTimestamp(timestamp) {
80
+ if (!timestamp)
81
+ return null;
82
+ const timestampMs = timestamp < TIMESTAMP.SECONDS_TO_MS_THRESHOLD ? timestamp * 1000 : timestamp;
83
+ return new Date(timestampMs).toLocaleString();
84
+ }
85
+ export function formatElapsedTime(ms) {
86
+ return `${(ms / 1000).toFixed(1)}s`;
87
+ }
88
+ export function displayFileList(files, title) {
89
+ writeLine();
90
+ writeLine(pc.bold(title));
91
+ const filesToShow = files.slice(0, DISPLAY.FILE_PREVIEW_LIMIT);
92
+ for (const file of filesToShow) {
93
+ writeLine(pc.dim(` • ${file}`));
94
+ }
95
+ if (files.length > DISPLAY.FILE_PREVIEW_LIMIT) {
96
+ writeLine(pc.dim(` • ... and ${files.length - DISPLAY.FILE_PREVIEW_LIMIT} more files`));
97
+ }
98
+ }
99
+ export function pluralize(count, singular, plural) {
100
+ const word = count === 1 ? singular : plural ?? `${singular}s`;
101
+ return `${count} ${word}`;
102
+ }
103
+ // ============================================================================
104
+ // ERRORS
105
+ // ============================================================================
106
+ export class DeploymentError extends Error {
107
+ exitCode;
108
+ userMessage;
109
+ constructor(message, exitCode = 1, userMessage) {
110
+ super(message);
111
+ this.name = 'DeploymentError';
112
+ this.exitCode = exitCode;
113
+ if (userMessage !== undefined) {
114
+ this.userMessage = userMessage;
115
+ }
116
+ }
117
+ }
118
+ export class AuthenticationError extends DeploymentError {
119
+ environment;
120
+ constructor(environment) {
121
+ const envFlag = environment === 'qa' ? ' --qa' : '';
122
+ super('Not authenticated', 1, `Run: npx @linktr.ee/linkapp login${envFlag}`);
123
+ this.environment = environment;
124
+ this.name = 'AuthenticationError';
125
+ }
126
+ }
127
+ export class ValidationError extends DeploymentError {
128
+ constructor(message, details) {
129
+ super(message, 1);
130
+ this.name = 'ValidationError';
131
+ if (details) {
132
+ this.userMessage = details.join('\n');
133
+ }
134
+ }
135
+ }
136
+ export class DeploymentCancelledError extends DeploymentError {
137
+ constructor() {
138
+ super('Deployment cancelled by user', 0);
139
+ this.name = 'DeploymentCancelledError';
140
+ }
141
+ }
142
+ export function isAPIError(error) {
143
+ return (error !== null &&
144
+ typeof error === 'object' &&
145
+ 'statusCode' in error &&
146
+ 'messages' in error &&
147
+ Array.isArray(error.messages));
148
+ }
149
+ //# sourceMappingURL=deploy-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-utils.js","sourceRoot":"","sources":["../../../src/lib/deploy/deploy-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { DeploymentContext } from './context.js';
2
+ import type { ArtifactPreparationResult } from './artifacts.js';
3
+ /**
4
+ * Upload result from the LinkTypes API
5
+ */
6
+ export interface UploadResult {
7
+ linkType: {
8
+ linkTypeId: string;
9
+ status: string;
10
+ updatedTimestamp?: number;
11
+ };
12
+ build?: {
13
+ id: string;
14
+ };
15
+ }
16
+ /**
17
+ * Executes the deployment by uploading assets to the LinkTypes API.
18
+ *
19
+ * @param context - Deployment context
20
+ * @param artifacts - Prepared artifacts
21
+ * @returns Upload result from API
22
+ */
23
+ export declare function executeDeployment(context: DeploymentContext, artifacts: ArtifactPreparationResult): Promise<UploadResult>;
24
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/execution.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;IACD,KAAK,CAAC,EAAE;QACN,EAAE,EAAE,MAAM,CAAA;KACX,CAAA;CACF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,yBAAyB,GACnC,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
@@ -0,0 +1,29 @@
1
+ import * as p from '@clack/prompts';
2
+ import { uploadAssets } from './upload.js';
3
+ import { formatElapsedTime } from '../utils/formatters.js';
4
+ import { writeLine } from '../utils/output.js';
5
+ /**
6
+ * Executes the deployment by uploading assets to the LinkTypes API.
7
+ *
8
+ * @param context - Deployment context
9
+ * @param artifacts - Prepared artifacts
10
+ * @returns Upload result from API
11
+ */
12
+ export async function executeDeployment(context, artifacts) {
13
+ writeLine();
14
+ const uploadStart = Date.now();
15
+ const s = p.spinner();
16
+ s.start('Uploading assets');
17
+ const result = await uploadAssets({
18
+ projectPath: context.projectPath,
19
+ apiUrl: artifacts.apiUrl,
20
+ linkAppId: context.linkAppId,
21
+ accessToken: context.accessToken,
22
+ isUpdate: artifacts.exists,
23
+ forceUpdate: context.options.force,
24
+ });
25
+ const uploadTime = formatElapsedTime(Date.now() - uploadStart);
26
+ s.stop(`Assets uploaded (${uploadTime})`);
27
+ return result;
28
+ }
29
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../../src/lib/deploy/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAkB9C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA0B,EAC1B,SAAoC;IAEpC,SAAS,EAAE,CAAA;IACX,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;IAErB,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAE3B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,SAAS,CAAC,MAAM;QAC1B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;KACnC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,CAAA;IAC9D,CAAC,CAAC,IAAI,CAAC,oBAAoB,UAAU,GAAG,CAAC,CAAA;IAEzC,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { DeploymentContext } from './context.js';
2
+ import type { UploadResult } from './execution.js';
3
+ /**
4
+ * Displays the successful deployment results including details and next steps.
5
+ *
6
+ * @param context - Deployment context
7
+ * @param result - Upload result from API
8
+ */
9
+ export declare function displayDeploymentSuccess(context: DeploymentContext, result: UploadResult): void;
10
+ /**
11
+ * Displays deployment error information.
12
+ *
13
+ * @param error - Error that occurred during deployment
14
+ */
15
+ export declare function displayDeploymentError(error: unknown): void;
16
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/output.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,YAAY,GACnB,IAAI,CAmBN;AAuCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAiC3D"}