@linktr.ee/linkapp 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/bin/cli.js +6 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +52 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/add.d.ts +7 -0
  7. package/dist/commands/add.d.ts.map +1 -0
  8. package/dist/commands/add.js +141 -0
  9. package/dist/commands/add.js.map +1 -0
  10. package/dist/commands/build.d.ts +8 -0
  11. package/dist/commands/build.d.ts.map +1 -0
  12. package/dist/commands/build.js +84 -0
  13. package/dist/commands/build.js.map +1 -0
  14. package/dist/commands/deploy.d.ts +12 -0
  15. package/dist/commands/deploy.d.ts.map +1 -0
  16. package/dist/commands/deploy.js +158 -0
  17. package/dist/commands/deploy.js.map +1 -0
  18. package/dist/commands/dev.d.ts +7 -0
  19. package/dist/commands/dev.d.ts.map +1 -0
  20. package/dist/commands/dev.js +73 -0
  21. package/dist/commands/dev.js.map +1 -0
  22. package/dist/commands/login.d.ts +6 -0
  23. package/dist/commands/login.d.ts.map +1 -0
  24. package/dist/commands/login.js +77 -0
  25. package/dist/commands/login.js.map +1 -0
  26. package/dist/commands/logout.d.ts +6 -0
  27. package/dist/commands/logout.d.ts.map +1 -0
  28. package/dist/commands/logout.js +25 -0
  29. package/dist/commands/logout.js.map +1 -0
  30. package/dist/commands/test-url-match-rules.d.ts +7 -0
  31. package/dist/commands/test-url-match-rules.d.ts.map +1 -0
  32. package/dist/commands/test-url-match-rules.js +55 -0
  33. package/dist/commands/test-url-match-rules.js.map +1 -0
  34. package/dist/lib/auth/config.d.ts +3 -0
  35. package/dist/lib/auth/config.d.ts.map +1 -0
  36. package/dist/lib/auth/config.js +5 -0
  37. package/dist/lib/auth/config.js.map +1 -0
  38. package/dist/lib/auth/device-flow.d.ts +15 -0
  39. package/dist/lib/auth/device-flow.d.ts.map +1 -0
  40. package/dist/lib/auth/device-flow.js +28 -0
  41. package/dist/lib/auth/device-flow.js.map +1 -0
  42. package/dist/lib/auth/fetch-config.d.ts +3 -0
  43. package/dist/lib/auth/fetch-config.d.ts.map +1 -0
  44. package/dist/lib/auth/fetch-config.js +15 -0
  45. package/dist/lib/auth/fetch-config.js.map +1 -0
  46. package/dist/lib/auth/token-storage.d.ts +10 -0
  47. package/dist/lib/auth/token-storage.d.ts.map +1 -0
  48. package/dist/lib/auth/token-storage.js +79 -0
  49. package/dist/lib/auth/token-storage.js.map +1 -0
  50. package/dist/lib/build/detect-layouts.d.ts +22 -0
  51. package/dist/lib/build/detect-layouts.d.ts.map +1 -0
  52. package/dist/lib/build/detect-layouts.js +58 -0
  53. package/dist/lib/build/detect-layouts.js.map +1 -0
  54. package/dist/lib/deploy/generate-manifest-files.d.ts +2 -0
  55. package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -0
  56. package/dist/lib/deploy/generate-manifest-files.js +81 -0
  57. package/dist/lib/deploy/generate-manifest-files.js.map +1 -0
  58. package/dist/lib/deploy/pack-project.d.ts +7 -0
  59. package/dist/lib/deploy/pack-project.d.ts.map +1 -0
  60. package/dist/lib/deploy/pack-project.js +76 -0
  61. package/dist/lib/deploy/pack-project.js.map +1 -0
  62. package/dist/lib/deploy/test-url-match-rules.d.ts +6 -0
  63. package/dist/lib/deploy/test-url-match-rules.d.ts.map +1 -0
  64. package/dist/lib/deploy/test-url-match-rules.js +21 -0
  65. package/dist/lib/deploy/test-url-match-rules.js.map +1 -0
  66. package/dist/lib/deploy/upload.d.ts +12 -0
  67. package/dist/lib/deploy/upload.d.ts.map +1 -0
  68. package/dist/lib/deploy/upload.js +90 -0
  69. package/dist/lib/deploy/upload.js.map +1 -0
  70. package/dist/lib/deploy/validation.d.ts +9 -0
  71. package/dist/lib/deploy/validation.d.ts.map +1 -0
  72. package/dist/lib/deploy/validation.js +160 -0
  73. package/dist/lib/deploy/validation.js.map +1 -0
  74. package/dist/lib/utils/create-project.d.ts +8 -0
  75. package/dist/lib/utils/create-project.d.ts.map +1 -0
  76. package/dist/lib/utils/create-project.js +48 -0
  77. package/dist/lib/utils/create-project.js.map +1 -0
  78. package/dist/lib/utils/init-git.d.ts +2 -0
  79. package/dist/lib/utils/init-git.d.ts.map +1 -0
  80. package/dist/lib/utils/init-git.js +34 -0
  81. package/dist/lib/utils/init-git.js.map +1 -0
  82. package/dist/lib/utils/install-dependencies.d.ts +2 -0
  83. package/dist/lib/utils/install-dependencies.d.ts.map +1 -0
  84. package/dist/lib/utils/install-dependencies.js +20 -0
  85. package/dist/lib/utils/install-dependencies.js.map +1 -0
  86. package/dist/lib/utils/setup-runtime.d.ts +6 -0
  87. package/dist/lib/utils/setup-runtime.d.ts.map +1 -0
  88. package/dist/lib/utils/setup-runtime.js +103 -0
  89. package/dist/lib/utils/setup-runtime.js.map +1 -0
  90. package/dist/lib/vite/config-factory.d.ts +12 -0
  91. package/dist/lib/vite/config-factory.d.ts.map +1 -0
  92. package/dist/lib/vite/config-factory.js +55 -0
  93. package/dist/lib/vite/config-factory.js.map +1 -0
  94. package/dist/lib/vite/plugins/asset-versioning.d.ts +11 -0
  95. package/dist/lib/vite/plugins/asset-versioning.d.ts.map +1 -0
  96. package/dist/lib/vite/plugins/asset-versioning.js +50 -0
  97. package/dist/lib/vite/plugins/asset-versioning.js.map +1 -0
  98. package/dist/lib/vite/plugins/route-handler.d.ts +16 -0
  99. package/dist/lib/vite/plugins/route-handler.d.ts.map +1 -0
  100. package/dist/lib/vite/plugins/route-handler.js +108 -0
  101. package/dist/lib/vite/plugins/route-handler.js.map +1 -0
  102. package/dist/lib/vite/plugins/window-context.d.ts +7 -0
  103. package/dist/lib/vite/plugins/window-context.d.ts.map +1 -0
  104. package/dist/lib/vite/plugins/window-context.js +68 -0
  105. package/dist/lib/vite/plugins/window-context.js.map +1 -0
  106. package/dist/schema/config.schema.d.ts +229 -0
  107. package/dist/schema/config.schema.d.ts.map +1 -0
  108. package/dist/schema/config.schema.js +116 -0
  109. package/dist/schema/config.schema.js.map +1 -0
  110. package/dist/schema/index.d.ts +8 -0
  111. package/dist/schema/index.d.ts.map +1 -0
  112. package/dist/schema/index.js +8 -0
  113. package/dist/schema/index.js.map +1 -0
  114. package/dist/types.d.ts +140 -0
  115. package/dist/types.d.ts.map +1 -0
  116. package/dist/types.js +2 -0
  117. package/dist/types.js.map +1 -0
  118. package/package.json +70 -0
  119. package/runtime/index.html +12 -0
@@ -0,0 +1,229 @@
1
+ import { z } from 'zod';
2
+ declare const manifestSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ tagline: z.ZodString;
5
+ description: z.ZodArray<z.ZodString>;
6
+ manifestVersion: z.ZodString;
7
+ version: z.ZodString;
8
+ supportingLinks: z.ZodObject<{
9
+ termsOfService: z.ZodString;
10
+ privacyPolicy: z.ZodString;
11
+ documentation: z.ZodOptional<z.ZodString>;
12
+ website: z.ZodOptional<z.ZodString>;
13
+ }, z.core.$strip>;
14
+ category: z.ZodEnum<{
15
+ grow: "grow";
16
+ sell: "sell";
17
+ share: "share";
18
+ other: "other";
19
+ }>;
20
+ searchTerms: z.ZodArray<z.ZodString>;
21
+ author: z.ZodObject<{
22
+ name: z.ZodString;
23
+ accounts: z.ZodArray<z.ZodString>;
24
+ contact: z.ZodObject<{
25
+ url: z.ZodString;
26
+ email: z.ZodString;
27
+ }, z.core.$strip>;
28
+ }, z.core.$strip>;
29
+ }, z.core.$strip>;
30
+ declare const settingsElementSchema: z.ZodObject<{
31
+ id: z.ZodString;
32
+ inputType: z.ZodEnum<{
33
+ number: "number";
34
+ text: "text";
35
+ switch: "switch";
36
+ select: "select";
37
+ color: "color";
38
+ textarea: "textarea";
39
+ }>;
40
+ title: z.ZodString;
41
+ description: z.ZodOptional<z.ZodString>;
42
+ defaultValue: z.ZodOptional<z.ZodUnknown>;
43
+ label: z.ZodOptional<z.ZodString>;
44
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
45
+ label: z.ZodString;
46
+ value: z.ZodUnknown;
47
+ }, z.core.$strip>>>;
48
+ }, z.core.$strip>;
49
+ declare const settingsSchema: z.ZodObject<{
50
+ title: z.ZodString;
51
+ overview: z.ZodObject<{
52
+ title: z.ZodString;
53
+ description: z.ZodString;
54
+ supportLink: z.ZodString;
55
+ }, z.core.$strip>;
56
+ elements: z.ZodArray<z.ZodObject<{
57
+ id: z.ZodString;
58
+ inputType: z.ZodEnum<{
59
+ number: "number";
60
+ text: "text";
61
+ switch: "switch";
62
+ select: "select";
63
+ color: "color";
64
+ textarea: "textarea";
65
+ }>;
66
+ title: z.ZodString;
67
+ description: z.ZodOptional<z.ZodString>;
68
+ defaultValue: z.ZodOptional<z.ZodUnknown>;
69
+ label: z.ZodOptional<z.ZodString>;
70
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
71
+ label: z.ZodString;
72
+ value: z.ZodUnknown;
73
+ }, z.core.$strip>>>;
74
+ }, z.core.$strip>>;
75
+ }, z.core.$strip>;
76
+ declare const urlMatchRulesSchema: z.ZodObject<{
77
+ hostnames: z.ZodArray<z.ZodString>;
78
+ patterns: z.ZodOptional<z.ZodArray<z.ZodObject<{
79
+ pathname: z.ZodString;
80
+ }, z.core.$strip>>>;
81
+ notPatterns: z.ZodOptional<z.ZodArray<z.ZodObject<{
82
+ pathname: z.ZodString;
83
+ }, z.core.$strip>>>;
84
+ }, z.core.$strip>;
85
+ export declare const linkAppConfigSchema: z.ZodObject<{
86
+ id: z.ZodString;
87
+ manifest: z.ZodObject<{
88
+ name: z.ZodString;
89
+ tagline: z.ZodString;
90
+ description: z.ZodArray<z.ZodString>;
91
+ manifestVersion: z.ZodString;
92
+ version: z.ZodString;
93
+ supportingLinks: z.ZodObject<{
94
+ termsOfService: z.ZodString;
95
+ privacyPolicy: z.ZodString;
96
+ documentation: z.ZodOptional<z.ZodString>;
97
+ website: z.ZodOptional<z.ZodString>;
98
+ }, z.core.$strip>;
99
+ category: z.ZodEnum<{
100
+ grow: "grow";
101
+ sell: "sell";
102
+ share: "share";
103
+ other: "other";
104
+ }>;
105
+ searchTerms: z.ZodArray<z.ZodString>;
106
+ author: z.ZodObject<{
107
+ name: z.ZodString;
108
+ accounts: z.ZodArray<z.ZodString>;
109
+ contact: z.ZodObject<{
110
+ url: z.ZodString;
111
+ email: z.ZodString;
112
+ }, z.core.$strip>;
113
+ }, z.core.$strip>;
114
+ }, z.core.$strip>;
115
+ settings: z.ZodObject<{
116
+ title: z.ZodString;
117
+ overview: z.ZodObject<{
118
+ title: z.ZodString;
119
+ description: z.ZodString;
120
+ supportLink: z.ZodString;
121
+ }, z.core.$strip>;
122
+ elements: z.ZodArray<z.ZodObject<{
123
+ id: z.ZodString;
124
+ inputType: z.ZodEnum<{
125
+ number: "number";
126
+ text: "text";
127
+ switch: "switch";
128
+ select: "select";
129
+ color: "color";
130
+ textarea: "textarea";
131
+ }>;
132
+ title: z.ZodString;
133
+ description: z.ZodOptional<z.ZodString>;
134
+ defaultValue: z.ZodOptional<z.ZodUnknown>;
135
+ label: z.ZodOptional<z.ZodString>;
136
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
137
+ label: z.ZodString;
138
+ value: z.ZodUnknown;
139
+ }, z.core.$strip>>>;
140
+ }, z.core.$strip>>;
141
+ }, z.core.$strip>;
142
+ urlMatchRules: z.ZodOptional<z.ZodObject<{
143
+ hostnames: z.ZodArray<z.ZodString>;
144
+ patterns: z.ZodOptional<z.ZodArray<z.ZodObject<{
145
+ pathname: z.ZodString;
146
+ }, z.core.$strip>>>;
147
+ notPatterns: z.ZodOptional<z.ZodArray<z.ZodObject<{
148
+ pathname: z.ZodString;
149
+ }, z.core.$strip>>>;
150
+ }, z.core.$strip>>;
151
+ }, z.core.$strip>;
152
+ export type LinkAppConfig = z.infer<typeof linkAppConfigSchema>;
153
+ export type LinkAppManifest = z.infer<typeof manifestSchema>;
154
+ export type LinkAppSettings = z.infer<typeof settingsSchema>;
155
+ export type UrlMatchRules = z.infer<typeof urlMatchRulesSchema>;
156
+ export type SettingsElement = z.infer<typeof settingsElementSchema>;
157
+ /**
158
+ * Validates a LinkApp configuration object
159
+ * @param config - The configuration object to validate
160
+ * @returns Validated and typed configuration
161
+ * @throws ZodError with detailed validation errors
162
+ */
163
+ export declare function validateLinkAppConfig(config: unknown): LinkAppConfig;
164
+ /**
165
+ * Safely validates a LinkApp configuration object
166
+ * @param config - The configuration object to validate
167
+ * @returns Success object with data or error object with issues
168
+ */
169
+ export declare function safeLyValidateLinkAppConfig(config: unknown): z.ZodSafeParseResult<{
170
+ id: string;
171
+ manifest: {
172
+ name: string;
173
+ tagline: string;
174
+ description: string[];
175
+ manifestVersion: string;
176
+ version: string;
177
+ supportingLinks: {
178
+ termsOfService: string;
179
+ privacyPolicy: string;
180
+ documentation?: string | undefined;
181
+ website?: string | undefined;
182
+ };
183
+ category: "grow" | "sell" | "share" | "other";
184
+ searchTerms: string[];
185
+ author: {
186
+ name: string;
187
+ accounts: string[];
188
+ contact: {
189
+ url: string;
190
+ email: string;
191
+ };
192
+ };
193
+ };
194
+ settings: {
195
+ title: string;
196
+ overview: {
197
+ title: string;
198
+ description: string;
199
+ supportLink: string;
200
+ };
201
+ elements: {
202
+ id: string;
203
+ inputType: "number" | "text" | "switch" | "select" | "color" | "textarea";
204
+ title: string;
205
+ description?: string | undefined;
206
+ defaultValue?: unknown;
207
+ label?: string | undefined;
208
+ options?: {
209
+ label: string;
210
+ value: unknown;
211
+ }[] | undefined;
212
+ }[];
213
+ };
214
+ urlMatchRules?: {
215
+ hostnames: string[];
216
+ patterns?: {
217
+ pathname: string;
218
+ }[] | undefined;
219
+ notPatterns?: {
220
+ pathname: string;
221
+ }[] | undefined;
222
+ } | undefined;
223
+ }>;
224
+ /**
225
+ * Type guard to check if a value is a valid LinkAppConfig
226
+ */
227
+ export declare function isLinkAppConfig(value: unknown): value is LinkAppConfig;
228
+ export {};
229
+ //# sourceMappingURL=config.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/schema/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA8BvB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBlB,CAAA;AAGF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;iBAQzB,CAAA;AAGF,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQlB,CAAA;AAGF,QAAA,MAAM,mBAAmB;;;;;;;;iBAgBvB,CAAA;AAGF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS9B,CAAA;AAGF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE"}
@@ -0,0 +1,116 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schema for LinkApp configuration
4
+ * Based on manifest.schema.json with TypeScript-friendly camelCase naming
5
+ */
6
+ const urlSchema = z.string().url();
7
+ const emailSchema = z.string().email();
8
+ const versionSchema = z.string().regex(/^\d+\.\d+\.\d+$/, 'Must be semver format (e.g., 1.0.0)');
9
+ // Supporting Links Schema
10
+ const supportingLinksSchema = z.object({
11
+ termsOfService: urlSchema.describe('The URL of the terms of service'),
12
+ privacyPolicy: urlSchema.describe('The URL of the privacy policy'),
13
+ documentation: urlSchema.optional().describe('The URL of the documentation'),
14
+ website: urlSchema.optional().describe('The URL of the website'),
15
+ });
16
+ // Author Schema
17
+ const authorSchema = z.object({
18
+ name: z.string().min(1, 'Author name is required'),
19
+ accounts: z.array(z.string()).min(1, 'At least one account is required'),
20
+ contact: z.object({
21
+ url: urlSchema,
22
+ email: emailSchema,
23
+ }),
24
+ });
25
+ // Manifest Schema
26
+ const manifestSchema = z.object({
27
+ name: z
28
+ .string()
29
+ .min(3, 'Name must be at least 3 characters')
30
+ .max(50, 'Name must be at most 50 characters')
31
+ .describe('The name of the link type'),
32
+ tagline: z
33
+ .string()
34
+ .min(3, 'Tagline must be at least 3 characters')
35
+ .max(200, 'Tagline must be at most 200 characters')
36
+ .describe('A short tagline for the link type'),
37
+ description: z
38
+ .array(z.string())
39
+ .min(1, 'At least one description paragraph is required')
40
+ .describe('Array of description paragraphs'),
41
+ manifestVersion: versionSchema.describe('The manifest schema version'),
42
+ version: versionSchema.describe('The version of the linkapp'),
43
+ supportingLinks: supportingLinksSchema,
44
+ category: z.enum(['grow', 'sell', 'share', 'other']).describe('The category of the link type'),
45
+ searchTerms: z.array(z.string()).min(1, 'At least one search term is required'),
46
+ author: authorSchema,
47
+ });
48
+ // Settings Element Schema
49
+ const settingsElementSchema = z.object({
50
+ id: z.string().min(1, 'Element ID is required'),
51
+ inputType: z.enum(['text', 'number', 'switch', 'select', 'color', 'textarea']),
52
+ title: z.string().min(1, 'Element title is required'),
53
+ description: z.string().optional(),
54
+ defaultValue: z.unknown().optional(),
55
+ label: z.string().optional(),
56
+ options: z.array(z.object({ label: z.string(), value: z.unknown() })).optional(),
57
+ });
58
+ // Settings Schema
59
+ const settingsSchema = z.object({
60
+ title: z.string().min(1, 'Settings title is required'),
61
+ overview: z.object({
62
+ title: z.string().min(1, 'Overview title is required'),
63
+ description: z.string().min(1, 'Overview description is required'),
64
+ supportLink: urlSchema,
65
+ }),
66
+ elements: z.array(settingsElementSchema).min(0),
67
+ });
68
+ // URL Match Rules Schema
69
+ const urlMatchRulesSchema = z.object({
70
+ hostnames: z.array(z.string()).min(1, 'At least one hostname is required'),
71
+ patterns: z
72
+ .array(z.object({
73
+ pathname: z.string().min(1, 'Pathname pattern is required'),
74
+ }))
75
+ .optional(),
76
+ notPatterns: z
77
+ .array(z.object({
78
+ pathname: z.string().min(1, 'Pathname pattern is required'),
79
+ }))
80
+ .optional(),
81
+ });
82
+ // Main LinkApp Config Schema
83
+ export const linkAppConfigSchema = z.object({
84
+ id: z
85
+ .string()
86
+ .min(1, 'LinkApp ID is required')
87
+ .regex(/^[a-z0-9-]+$/, 'LinkApp ID must contain only lowercase letters, numbers, and hyphens')
88
+ .describe('Unique identifier for the linkapp'),
89
+ manifest: manifestSchema,
90
+ settings: settingsSchema,
91
+ urlMatchRules: urlMatchRulesSchema.optional(),
92
+ });
93
+ /**
94
+ * Validates a LinkApp configuration object
95
+ * @param config - The configuration object to validate
96
+ * @returns Validated and typed configuration
97
+ * @throws ZodError with detailed validation errors
98
+ */
99
+ export function validateLinkAppConfig(config) {
100
+ return linkAppConfigSchema.parse(config);
101
+ }
102
+ /**
103
+ * Safely validates a LinkApp configuration object
104
+ * @param config - The configuration object to validate
105
+ * @returns Success object with data or error object with issues
106
+ */
107
+ export function safeLyValidateLinkAppConfig(config) {
108
+ return linkAppConfigSchema.safeParse(config);
109
+ }
110
+ /**
111
+ * Type guard to check if a value is a valid LinkAppConfig
112
+ */
113
+ export function isLinkAppConfig(value) {
114
+ return linkAppConfigSchema.safeParse(value).success;
115
+ }
116
+ //# sourceMappingURL=config.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../src/schema/config.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * LinkApp Configuration Schema
3
+ *
4
+ * This module provides schema validation for LinkApp configurations.
5
+ * Inspired by Next.js and Tailwind CSS configuration validation.
6
+ */
7
+ export { linkAppConfigSchema, validateLinkAppConfig, safeLyValidateLinkAppConfig, isLinkAppConfig, type LinkAppConfig, type LinkAppManifest, type LinkAppSettings, type UrlMatchRules, type SettingsElement, } from './config.schema.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * LinkApp Configuration Schema
3
+ *
4
+ * This module provides schema validation for LinkApp configurations.
5
+ * Inspired by Next.js and Tailwind CSS configuration validation.
6
+ */
7
+ export { linkAppConfigSchema, validateLinkAppConfig, safeLyValidateLinkAppConfig, isLinkAppConfig, } from './config.schema.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,GAMhB,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,140 @@
1
+ export type Environment = 'production' | 'qa';
2
+ /**
3
+ * Theme configuration from Linktree profile
4
+ */
5
+ export interface Theme {
6
+ textColor: string;
7
+ backgroundColor: string;
8
+ borderRadius: string;
9
+ borderColor: string;
10
+ isOutlineStyle: boolean;
11
+ contrastColor: string;
12
+ textHoverColor: string;
13
+ }
14
+ /**
15
+ * Viewport dimensions
16
+ */
17
+ export interface Viewport {
18
+ width: number;
19
+ height: number;
20
+ }
21
+ /**
22
+ * Geographic position
23
+ */
24
+ export interface Position {
25
+ latitude: number;
26
+ longitude: number;
27
+ }
28
+ /**
29
+ * Core Linktree context available to all LinkApps
30
+ */
31
+ export interface LinktreeContext {
32
+ linkUrl: string;
33
+ layout?: 'stack' | 'grid' | 'carousel' | 'featured';
34
+ theme: Theme;
35
+ locale: string;
36
+ currency: string;
37
+ username: string;
38
+ viewport: Viewport;
39
+ position?: Position;
40
+ }
41
+ /**
42
+ * Props available to layout components
43
+ * Extend with custom settings from your config
44
+ */
45
+ export type AppProps<TSettings = Record<string, unknown>> = LinktreeContext & TSettings;
46
+ export type LinktreeTheme = Theme;
47
+ export interface LinkAppManifest {
48
+ name: string;
49
+ tagline: string;
50
+ description: string[];
51
+ manifestVersion: string;
52
+ version: string;
53
+ supportingLinks: {
54
+ termsOfService: string;
55
+ privacyPolicy: string;
56
+ documentation?: string;
57
+ website?: string;
58
+ };
59
+ category: 'grow' | 'sell' | 'share' | 'learn';
60
+ searchTerms: string[];
61
+ author: {
62
+ name: string;
63
+ accounts: string[];
64
+ contact: {
65
+ url: string;
66
+ email: string;
67
+ };
68
+ };
69
+ }
70
+ export interface LinkAppSettings {
71
+ title: string;
72
+ overview: {
73
+ title: string;
74
+ description: string;
75
+ supportLink: string;
76
+ };
77
+ elements: SettingsElement[];
78
+ supportsFeaturedLayout: boolean;
79
+ }
80
+ export interface SettingsElement {
81
+ id: string;
82
+ inputType: string;
83
+ title: string;
84
+ description?: string;
85
+ defaultValue?: unknown;
86
+ label?: string;
87
+ }
88
+ export interface UrlMatchRules {
89
+ hostnames: string[];
90
+ patterns: Array<{
91
+ pathname: string;
92
+ }>;
93
+ }
94
+ /**
95
+ * Preview props for development mode
96
+ */
97
+ export interface PreviewProps extends LinktreeContext {
98
+ [key: string]: unknown;
99
+ }
100
+ export interface LinkAppConfig {
101
+ id: string;
102
+ manifest: LinkAppManifest;
103
+ settings: LinkAppSettings;
104
+ urlMatchRules?: UrlMatchRules;
105
+ previewProps?: PreviewProps;
106
+ }
107
+ export interface AppConfig {
108
+ auth: {
109
+ domain: string;
110
+ client_id: string;
111
+ audience: string;
112
+ };
113
+ link_types_url: string;
114
+ logout_redirect_url: string;
115
+ }
116
+ export interface DeployResponse {
117
+ linkType: {
118
+ linkTypeId: string;
119
+ status: string;
120
+ updatedTimestamp: number;
121
+ };
122
+ build?: {
123
+ id: string;
124
+ };
125
+ }
126
+ export interface Template {
127
+ name: string;
128
+ description: string;
129
+ path: string;
130
+ }
131
+ export interface ComponentRegistryItem {
132
+ name: string;
133
+ dependencies: string[];
134
+ files: string[];
135
+ type: string;
136
+ }
137
+ export interface ComponentRegistry {
138
+ [key: string]: ComponentRegistryItem;
139
+ }
140
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@linktr.ee/linkapp",
3
+ "version": "0.0.1",
4
+ "description": "Development, build, and deployment tooling for LinkApps",
5
+ "type": "module",
6
+ "bin": {
7
+ "linkapp": "./bin/cli.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "bin",
12
+ "runtime",
13
+ "linkapp-preview"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/types.d.ts",
18
+ "import": "./dist/cli.js"
19
+ },
20
+ "./types": {
21
+ "types": "./dist/types.d.ts"
22
+ }
23
+ },
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "dev": "tsc --watch",
27
+ "lint": "biome check .",
28
+ "format": "biome format --write .",
29
+ "clean": "rm -rf dist",
30
+ "test": "vitest run",
31
+ "test:watch": "vitest"
32
+ },
33
+ "dependencies": {
34
+ "@clack/prompts": "^0.8.2",
35
+ "@ngrok/ngrok": "^1.4.1",
36
+ "@tailwindcss/vite": "^4.1.14",
37
+ "@vitejs/plugin-react": "^4.3.4",
38
+ "archiver": "^7.0.1",
39
+ "axios": "^1.7.9",
40
+ "cac": "^6.7.14",
41
+ "connect": "^3.7.0",
42
+ "form-data": "^4.0.1",
43
+ "fs-extra": "^11.2.0",
44
+ "jiti": "^2.6.1",
45
+ "jsonwebtoken": "^9.0.2",
46
+ "netrc-parser": "^3.1.6",
47
+ "open": "^10.1.0",
48
+ "openid-client": "^5.7.1",
49
+ "picocolors": "^1.1.1",
50
+ "vite": "^6.0.3",
51
+ "zod": "^4.1.12"
52
+ },
53
+ "devDependencies": {
54
+ "@biomejs/biome": "^1.9.4",
55
+ "@types/archiver": "^6.0.2",
56
+ "@types/connect": "^3.4.38",
57
+ "@types/fs-extra": "^11.0.4",
58
+ "@types/jsonwebtoken": "^9.0.7",
59
+ "@types/node": "^20.17.6",
60
+ "typescript": "^5.7.2",
61
+ "vitest": "^2.1.9"
62
+ },
63
+ "engines": {
64
+ "node": ">=18.0.0",
65
+ "npm": ">=10.0.0"
66
+ },
67
+ "publishConfig": {
68
+ "access": "public"
69
+ }
70
+ }
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>LinkApp</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="/.linkapp/main.tsx"></script>
11
+ </body>
12
+ </html>