@jxrstudios/jxr 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -98,6 +98,53 @@ const manifest = await jxrCrypto.signManifest({
98
98
  }, 'your-private-key');
99
99
  ```
100
100
 
101
+ ## Deployment (Wranglerless)
102
+
103
+ Deploy to JXR Studios' Cloudflare infrastructure without configuring wrangler or having a Cloudflare account.
104
+
105
+ ```typescript
106
+ import { JXRDeployer, jxrDeployer } from '@jxrstudios/jxr';
107
+
108
+ // Using your JXR API key
109
+ const deployer = new JXRDeployer('your-jxr-api-key', 'my-project');
110
+
111
+ // Deploy your built project
112
+ const result = await deployer.deploy('./dist', {
113
+ environment: 'production', // or 'staging', 'preview'
114
+ branch: 'main',
115
+ });
116
+
117
+ if (result.success) {
118
+ console.log(`Deployed to: ${result.url}`);
119
+ }
120
+ ```
121
+
122
+ ### Environment Variables
123
+
124
+ ```bash
125
+ # Set your JXR API key
126
+ export JXR_API_KEY=jxr_live_xxxxx
127
+
128
+ # Optional: Set default project ID
129
+ export JXR_PROJECT_ID=my-project
130
+ ```
131
+
132
+ ### Deployment Commands
133
+
134
+ ```typescript
135
+ // Get deployment status
136
+ const status = await deployer.getStatus('deployment-id');
137
+
138
+ // List all deployments
139
+ const deployments = await deployer.listDeployments();
140
+
141
+ // Rollback to previous deployment
142
+ await deployer.rollback('deployment-id');
143
+
144
+ // Delete a deployment
145
+ await deployer.deleteDeployment('deployment-id');
146
+ ```
147
+
101
148
  ## API Reference
102
149
 
103
150
  See the TypeScript definitions for full API documentation.
@@ -0,0 +1,70 @@
1
+ /**
2
+ * JXR.js — Wranglerless Deployer
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * Deploy projects to JXR Studios' Cloudflare infrastructure without wrangler.
5
+ * Users only need a JXR API key - no Cloudflare account required.
6
+ * ─────────────────────────────────────────────────────────────────────────────
7
+ */
8
+ export interface DeployConfig {
9
+ projectId?: string;
10
+ environment?: 'production' | 'staging' | 'preview';
11
+ branch?: string;
12
+ }
13
+ export interface DeployResult {
14
+ success: boolean;
15
+ url: string;
16
+ deploymentId: string;
17
+ timestamp: string;
18
+ logs: string[];
19
+ }
20
+ export interface DeploymentStatus {
21
+ status: 'pending' | 'building' | 'deployed' | 'failed';
22
+ progress: number;
23
+ url?: string;
24
+ error?: string;
25
+ }
26
+ /**
27
+ * JXRDeployer — Deploy to JXR Cloudflare infrastructure
28
+ * No wrangler config needed. Just your JXR API key.
29
+ */
30
+ export declare class JXRDeployer {
31
+ private apiKey;
32
+ private apiUrl;
33
+ private projectId;
34
+ constructor(apiKey: string, projectId?: string);
35
+ /**
36
+ * Deploy the current project to JXR infrastructure
37
+ * @param projectPath Path to the built project (dist/ folder)
38
+ * @param config Deployment configuration
39
+ */
40
+ deploy(projectPath: string, config?: DeployConfig): Promise<DeployResult>;
41
+ /**
42
+ * Get deployment status
43
+ */
44
+ getStatus(deploymentId: string): Promise<DeploymentStatus>;
45
+ /**
46
+ * List all deployments for a project
47
+ */
48
+ listDeployments(projectId?: string): Promise<Array<{
49
+ id: string;
50
+ url: string;
51
+ environment: string;
52
+ createdAt: string;
53
+ status: string;
54
+ }>>;
55
+ /**
56
+ * Rollback to a previous deployment
57
+ */
58
+ rollback(deploymentId: string): Promise<DeployResult>;
59
+ /**
60
+ * Delete a deployment
61
+ */
62
+ deleteDeployment(deploymentId: string): Promise<void>;
63
+ private uploadBuild;
64
+ private triggerDeployment;
65
+ private pollDeployment;
66
+ private generateProjectId;
67
+ }
68
+ /** Global deployer singleton */
69
+ export declare const jxrDeployer: JXRDeployer;
70
+ //# sourceMappingURL=deployer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployer.d.ts","sourceRoot":"","sources":["../src/deployer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAM9C;;;;OAIG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IA+CnF;;OAEG;IACG,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAehE;;OAEG;IACG,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QACvD,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IAgBH;;OAEG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAwB3D;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAe7C,WAAW;YAkCX,iBAAiB;YAyBjB,cAAc;IAuB5B,OAAO,CAAC,iBAAiB;CAM1B;AAED,gCAAgC;AAChC,eAAO,MAAM,WAAW,aAGvB,CAAC"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * JXR.js — Wranglerless Deployer
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * Deploy projects to JXR Studios' Cloudflare infrastructure without wrangler.
5
+ * Users only need a JXR API key - no Cloudflare account required.
6
+ * ─────────────────────────────────────────────────────────────────────────────
7
+ */
8
+ /**
9
+ * JXRDeployer — Deploy to JXR Cloudflare infrastructure
10
+ * No wrangler config needed. Just your JXR API key.
11
+ */
12
+ export class JXRDeployer {
13
+ apiKey;
14
+ apiUrl;
15
+ projectId;
16
+ constructor(apiKey, projectId) {
17
+ this.apiKey = apiKey;
18
+ this.apiUrl = 'https://api.jxr.dev/v1';
19
+ this.projectId = projectId || this.generateProjectId();
20
+ }
21
+ /**
22
+ * Deploy the current project to JXR infrastructure
23
+ * @param projectPath Path to the built project (dist/ folder)
24
+ * @param config Deployment configuration
25
+ */
26
+ async deploy(projectPath, config = {}) {
27
+ const env = config.environment || 'production';
28
+ const branch = config.branch || 'main';
29
+ console.log(`🚀 Deploying to JXR ${env}...`);
30
+ try {
31
+ // Step 1: Upload build files
32
+ const uploadResult = await this.uploadBuild(projectPath, {
33
+ projectId: config.projectId || this.projectId,
34
+ environment: env,
35
+ branch,
36
+ });
37
+ if (!uploadResult.success) {
38
+ throw new Error(`Upload failed: ${uploadResult.error}`);
39
+ }
40
+ // Step 2: Trigger deployment
41
+ const deployment = await this.triggerDeployment({
42
+ projectId: config.projectId || this.projectId,
43
+ environment: env,
44
+ uploadId: uploadResult.uploadId,
45
+ });
46
+ // Step 3: Poll for completion
47
+ const result = await this.pollDeployment(deployment.deploymentId);
48
+ return {
49
+ success: result.status === 'deployed',
50
+ url: result.url || `https://${this.projectId}.jxr.dev`,
51
+ deploymentId: deployment.deploymentId,
52
+ timestamp: new Date().toISOString(),
53
+ logs: result.logs || [],
54
+ };
55
+ }
56
+ catch (error) {
57
+ return {
58
+ success: false,
59
+ url: '',
60
+ deploymentId: '',
61
+ timestamp: new Date().toISOString(),
62
+ logs: [`Error: ${error instanceof Error ? error.message : 'Unknown error'}`],
63
+ };
64
+ }
65
+ }
66
+ /**
67
+ * Get deployment status
68
+ */
69
+ async getStatus(deploymentId) {
70
+ const response = await fetch(`${this.apiUrl}/deployments/${deploymentId}`, {
71
+ headers: {
72
+ 'Authorization': `Bearer ${this.apiKey}`,
73
+ 'Content-Type': 'application/json',
74
+ },
75
+ });
76
+ if (!response.ok) {
77
+ throw new Error(`Failed to get status: ${response.statusText}`);
78
+ }
79
+ return response.json();
80
+ }
81
+ /**
82
+ * List all deployments for a project
83
+ */
84
+ async listDeployments(projectId) {
85
+ const pid = projectId || this.projectId;
86
+ const response = await fetch(`${this.apiUrl}/projects/${pid}/deployments`, {
87
+ headers: {
88
+ 'Authorization': `Bearer ${this.apiKey}`,
89
+ },
90
+ });
91
+ if (!response.ok) {
92
+ throw new Error(`Failed to list deployments: ${response.statusText}`);
93
+ }
94
+ return response.json();
95
+ }
96
+ /**
97
+ * Rollback to a previous deployment
98
+ */
99
+ async rollback(deploymentId) {
100
+ const response = await fetch(`${this.apiUrl}/deployments/${deploymentId}/rollback`, {
101
+ method: 'POST',
102
+ headers: {
103
+ 'Authorization': `Bearer ${this.apiKey}`,
104
+ 'Content-Type': 'application/json',
105
+ },
106
+ });
107
+ if (!response.ok) {
108
+ throw new Error(`Rollback failed: ${response.statusText}`);
109
+ }
110
+ const result = await response.json();
111
+ return {
112
+ success: true,
113
+ url: result.url,
114
+ deploymentId: result.deploymentId,
115
+ timestamp: new Date().toISOString(),
116
+ logs: ['Rollback successful'],
117
+ };
118
+ }
119
+ /**
120
+ * Delete a deployment
121
+ */
122
+ async deleteDeployment(deploymentId) {
123
+ const response = await fetch(`${this.apiUrl}/deployments/${deploymentId}`, {
124
+ method: 'DELETE',
125
+ headers: {
126
+ 'Authorization': `Bearer ${this.apiKey}`,
127
+ },
128
+ });
129
+ if (!response.ok) {
130
+ throw new Error(`Delete failed: ${response.statusText}`);
131
+ }
132
+ }
133
+ // ─── Private Methods ────────────────────────────────────────────────────────
134
+ async uploadBuild(projectPath, options) {
135
+ // In a real implementation, this would:
136
+ // 1. Create a tarball of the build files
137
+ // 2. Upload to JXR's blob storage
138
+ // 3. Return an upload ID
139
+ // For now, simulate the API call
140
+ const formData = new FormData();
141
+ formData.append('projectId', options.projectId);
142
+ formData.append('environment', options.environment);
143
+ formData.append('branch', options.branch);
144
+ // TODO: Actually create and append tarball
145
+ // formData.append('build', tarballBlob);
146
+ const response = await fetch(`${this.apiUrl}/uploads`, {
147
+ method: 'POST',
148
+ headers: {
149
+ 'Authorization': `Bearer ${this.apiKey}`,
150
+ },
151
+ body: formData,
152
+ });
153
+ if (!response.ok) {
154
+ return { success: false, uploadId: '', error: response.statusText };
155
+ }
156
+ const data = await response.json();
157
+ return { success: true, uploadId: data.uploadId };
158
+ }
159
+ async triggerDeployment(options) {
160
+ const response = await fetch(`${this.apiUrl}/deployments`, {
161
+ method: 'POST',
162
+ headers: {
163
+ 'Authorization': `Bearer ${this.apiKey}`,
164
+ 'Content-Type': 'application/json',
165
+ },
166
+ body: JSON.stringify({
167
+ projectId: options.projectId,
168
+ environment: options.environment,
169
+ uploadId: options.uploadId,
170
+ }),
171
+ });
172
+ if (!response.ok) {
173
+ throw new Error(`Failed to trigger deployment: ${response.statusText}`);
174
+ }
175
+ return response.json();
176
+ }
177
+ async pollDeployment(deploymentId, maxAttempts = 60) {
178
+ for (let i = 0; i < maxAttempts; i++) {
179
+ const status = await this.getStatus(deploymentId);
180
+ if (status.status === 'deployed') {
181
+ return { status: 'deployed', url: status.url, logs: [] };
182
+ }
183
+ if (status.status === 'failed') {
184
+ return { status: 'failed', logs: [status.error || 'Deployment failed'] };
185
+ }
186
+ // Wait 2 seconds before next poll
187
+ await new Promise(resolve => setTimeout(resolve, 2000));
188
+ }
189
+ throw new Error('Deployment timed out');
190
+ }
191
+ generateProjectId() {
192
+ // Generate a unique project ID from the current directory or package.json
193
+ const timestamp = Date.now().toString(36);
194
+ const random = Math.random().toString(36).substring(2, 8);
195
+ return `jxr-${timestamp}-${random}`;
196
+ }
197
+ }
198
+ /** Global deployer singleton */
199
+ export const jxrDeployer = new JXRDeployer(process.env.JXR_API_KEY || '', process.env.JXR_PROJECT_ID);
200
+ //# sourceMappingURL=deployer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployer.js","sourceRoot":"","sources":["../src/deployer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -17,4 +17,6 @@ export { VirtualFS, JSXTransformer, ImportMapBuilder, ModuleCache, DEFAULT_PROJE
17
17
  export type { VirtualFile, VirtualDirectory, ResolvedModule, ImportMap, } from './module-resolver.js';
18
18
  export { JXRRuntime, jxrRuntime } from './runtime.js';
19
19
  export type { JXRRuntimeConfig, JXRRuntimeMetrics } from './runtime.js';
20
+ export { JXRDeployer, jxrDeployer } from './deployer.js';
21
+ export type { DeployConfig, DeployResult, DeploymentStatus } from './deployer.js';
20
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -12,4 +12,5 @@ export { MoQTransport } from './moq-transport.js';
12
12
  export { JXRCrypto, jxrCrypto } from './web-crypto.js';
13
13
  export { VirtualFS, JSXTransformer, ImportMapBuilder, ModuleCache, DEFAULT_PROJECT_FILES, } from './module-resolver.js';
14
14
  export { JXRRuntime, jxrRuntime } from './runtime.js';
15
+ export { JXRDeployer, jxrDeployer } from './deployer.js';
15
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQ9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQ9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jxrstudios/jxr",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "JXR.js — Edge OS Runtime Framework for elite developers",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -44,6 +44,7 @@
44
44
  "devDependencies": {
45
45
  "@types/node": "^24.7.0",
46
46
  "esbuild": "^0.25.0",
47
- "typescript": "5.6.3"
47
+ "typescript": "5.6.3",
48
+ "vite": "^8.0.0"
48
49
  }
49
50
  }