@plures/praxis 0.2.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.
- package/FRAMEWORK.md +420 -0
- package/LICENSE +21 -0
- package/README.md +1310 -0
- package/dist/adapters/cli.d.ts +43 -0
- package/dist/adapters/cli.d.ts.map +1 -0
- package/dist/adapters/cli.js +126 -0
- package/dist/adapters/cli.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +26 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +233 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/cloud.d.ts +27 -0
- package/dist/cli/commands/cloud.d.ts.map +1 -0
- package/dist/cli/commands/cloud.js +232 -0
- package/dist/cli/commands/cloud.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +25 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +168 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +179 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cloud/auth.d.ts +51 -0
- package/dist/cloud/auth.d.ts.map +1 -0
- package/dist/cloud/auth.js +194 -0
- package/dist/cloud/auth.js.map +1 -0
- package/dist/cloud/billing.d.ts +184 -0
- package/dist/cloud/billing.d.ts.map +1 -0
- package/dist/cloud/billing.js +179 -0
- package/dist/cloud/billing.js.map +1 -0
- package/dist/cloud/client.d.ts +39 -0
- package/dist/cloud/client.d.ts.map +1 -0
- package/dist/cloud/client.js +176 -0
- package/dist/cloud/client.js.map +1 -0
- package/dist/cloud/index.d.ts +44 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +44 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/marketplace.d.ts +166 -0
- package/dist/cloud/marketplace.d.ts.map +1 -0
- package/dist/cloud/marketplace.js +159 -0
- package/dist/cloud/marketplace.js.map +1 -0
- package/dist/cloud/provisioning.d.ts +110 -0
- package/dist/cloud/provisioning.d.ts.map +1 -0
- package/dist/cloud/provisioning.js +148 -0
- package/dist/cloud/provisioning.js.map +1 -0
- package/dist/cloud/relay/endpoints.d.ts +62 -0
- package/dist/cloud/relay/endpoints.d.ts.map +1 -0
- package/dist/cloud/relay/endpoints.js +217 -0
- package/dist/cloud/relay/endpoints.js.map +1 -0
- package/dist/cloud/relay/health/index.d.ts +5 -0
- package/dist/cloud/relay/health/index.d.ts.map +1 -0
- package/dist/cloud/relay/health/index.js +9 -0
- package/dist/cloud/relay/health/index.js.map +1 -0
- package/dist/cloud/relay/stats/index.d.ts +5 -0
- package/dist/cloud/relay/stats/index.d.ts.map +1 -0
- package/dist/cloud/relay/stats/index.js +9 -0
- package/dist/cloud/relay/stats/index.js.map +1 -0
- package/dist/cloud/relay/sync/index.d.ts +5 -0
- package/dist/cloud/relay/sync/index.d.ts.map +1 -0
- package/dist/cloud/relay/sync/index.js +9 -0
- package/dist/cloud/relay/sync/index.js.map +1 -0
- package/dist/cloud/relay/usage/index.d.ts +5 -0
- package/dist/cloud/relay/usage/index.d.ts.map +1 -0
- package/dist/cloud/relay/usage/index.js +9 -0
- package/dist/cloud/relay/usage/index.js.map +1 -0
- package/dist/cloud/sponsors.d.ts +81 -0
- package/dist/cloud/sponsors.d.ts.map +1 -0
- package/dist/cloud/sponsors.js +130 -0
- package/dist/cloud/sponsors.js.map +1 -0
- package/dist/cloud/types.d.ts +169 -0
- package/dist/cloud/types.d.ts.map +1 -0
- package/dist/cloud/types.js +7 -0
- package/dist/cloud/types.js.map +1 -0
- package/dist/components/index.d.ts +43 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +17 -0
- package/dist/components/index.js.map +1 -0
- package/dist/core/actors.d.ts +95 -0
- package/dist/core/actors.d.ts.map +1 -0
- package/dist/core/actors.js +158 -0
- package/dist/core/actors.js.map +1 -0
- package/dist/core/component/generator.d.ts +122 -0
- package/dist/core/component/generator.d.ts.map +1 -0
- package/dist/core/component/generator.js +307 -0
- package/dist/core/component/generator.js.map +1 -0
- package/dist/core/engine.d.ts +92 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +199 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/introspection.d.ts +141 -0
- package/dist/core/introspection.d.ts.map +1 -0
- package/dist/core/introspection.js +208 -0
- package/dist/core/introspection.js.map +1 -0
- package/dist/core/logic/generator.d.ts +76 -0
- package/dist/core/logic/generator.d.ts.map +1 -0
- package/dist/core/logic/generator.js +339 -0
- package/dist/core/logic/generator.js.map +1 -0
- package/dist/core/pluresdb/generator.d.ts +58 -0
- package/dist/core/pluresdb/generator.d.ts.map +1 -0
- package/dist/core/pluresdb/generator.js +162 -0
- package/dist/core/pluresdb/generator.js.map +1 -0
- package/dist/core/protocol.d.ts +121 -0
- package/dist/core/protocol.d.ts.map +1 -0
- package/dist/core/protocol.js +46 -0
- package/dist/core/protocol.js.map +1 -0
- package/dist/core/rules.d.ts +120 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +81 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/schema/loader.d.ts +47 -0
- package/dist/core/schema/loader.d.ts.map +1 -0
- package/dist/core/schema/loader.js +189 -0
- package/dist/core/schema/loader.js.map +1 -0
- package/dist/core/schema/normalize.d.ts +72 -0
- package/dist/core/schema/normalize.d.ts.map +1 -0
- package/dist/core/schema/normalize.js +190 -0
- package/dist/core/schema/normalize.js.map +1 -0
- package/dist/core/schema/types.d.ts +370 -0
- package/dist/core/schema/types.d.ts.map +1 -0
- package/dist/core/schema/types.js +161 -0
- package/dist/core/schema/types.js.map +1 -0
- package/dist/dsl/index.d.ts +152 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +132 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl.d.ts +124 -0
- package/dist/dsl.d.ts.map +1 -0
- package/dist/dsl.js +130 -0
- package/dist/dsl.js.map +1 -0
- package/dist/examples/advanced-todo/index.d.ts +55 -0
- package/dist/examples/advanced-todo/index.d.ts.map +1 -0
- package/dist/examples/advanced-todo/index.js +222 -0
- package/dist/examples/advanced-todo/index.js.map +1 -0
- package/dist/examples/auth-basic/index.d.ts +17 -0
- package/dist/examples/auth-basic/index.d.ts.map +1 -0
- package/dist/examples/auth-basic/index.js +122 -0
- package/dist/examples/auth-basic/index.js.map +1 -0
- package/dist/examples/cart/index.d.ts +19 -0
- package/dist/examples/cart/index.d.ts.map +1 -0
- package/dist/examples/cart/index.js +202 -0
- package/dist/examples/cart/index.js.map +1 -0
- package/dist/examples/hero-ecommerce/index.d.ts +39 -0
- package/dist/examples/hero-ecommerce/index.d.ts.map +1 -0
- package/dist/examples/hero-ecommerce/index.js +506 -0
- package/dist/examples/hero-ecommerce/index.js.map +1 -0
- package/dist/examples/svelte-counter/index.d.ts +31 -0
- package/dist/examples/svelte-counter/index.d.ts.map +1 -0
- package/dist/examples/svelte-counter/index.js +123 -0
- package/dist/examples/svelte-counter/index.js.map +1 -0
- package/dist/flows.d.ts +125 -0
- package/dist/flows.d.ts.map +1 -0
- package/dist/flows.js +160 -0
- package/dist/flows.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/pluresdb.d.ts +56 -0
- package/dist/integrations/pluresdb.d.ts.map +1 -0
- package/dist/integrations/pluresdb.js +46 -0
- package/dist/integrations/pluresdb.js.map +1 -0
- package/dist/integrations/svelte.d.ts +306 -0
- package/dist/integrations/svelte.d.ts.map +1 -0
- package/dist/integrations/svelte.js +447 -0
- package/dist/integrations/svelte.js.map +1 -0
- package/dist/registry.d.ts +94 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +181 -0
- package/dist/registry.js.map +1 -0
- package/dist/runtime/terminal-adapter.d.ts +105 -0
- package/dist/runtime/terminal-adapter.d.ts.map +1 -0
- package/dist/runtime/terminal-adapter.js +113 -0
- package/dist/runtime/terminal-adapter.js.map +1 -0
- package/dist/step.d.ts +34 -0
- package/dist/step.d.ts.map +1 -0
- package/dist/step.js +111 -0
- package/dist/step.js.map +1 -0
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/docs/MONETIZATION.md +394 -0
- package/docs/TERMINAL_NODE.md +588 -0
- package/docs/guides/canvas.md +389 -0
- package/docs/guides/getting-started.md +347 -0
- package/docs/guides/history-state-pattern.md +618 -0
- package/docs/guides/orchestration.md +617 -0
- package/docs/guides/parallel-state-pattern.md +767 -0
- package/docs/guides/svelte-integration.md +691 -0
- package/package.json +96 -0
- package/src/__tests__/actors.test.ts +270 -0
- package/src/__tests__/billing.test.ts +175 -0
- package/src/__tests__/cloud.test.ts +247 -0
- package/src/__tests__/dsl.test.ts +154 -0
- package/src/__tests__/edge-cases.test.ts +475 -0
- package/src/__tests__/engine.test.ts +137 -0
- package/src/__tests__/generators.test.ts +270 -0
- package/src/__tests__/introspection.test.ts +321 -0
- package/src/__tests__/protocol.test.ts +40 -0
- package/src/__tests__/provisioning.test.ts +162 -0
- package/src/__tests__/schema.test.ts +241 -0
- package/src/__tests__/svelte-integration.test.ts +431 -0
- package/src/__tests__/terminal-node.test.ts +352 -0
- package/src/adapters/cli.ts +175 -0
- package/src/cli/commands/auth.ts +271 -0
- package/src/cli/commands/cloud.ts +281 -0
- package/src/cli/commands/generate.ts +225 -0
- package/src/cli/index.ts +190 -0
- package/src/cloud/README.md +383 -0
- package/src/cloud/auth.ts +245 -0
- package/src/cloud/billing.ts +336 -0
- package/src/cloud/client.ts +221 -0
- package/src/cloud/index.ts +121 -0
- package/src/cloud/marketplace.ts +303 -0
- package/src/cloud/provisioning.ts +254 -0
- package/src/cloud/relay/endpoints.ts +307 -0
- package/src/cloud/relay/health/function.json +17 -0
- package/src/cloud/relay/health/index.ts +10 -0
- package/src/cloud/relay/host.json +15 -0
- package/src/cloud/relay/local.settings.json +8 -0
- package/src/cloud/relay/stats/function.json +17 -0
- package/src/cloud/relay/stats/index.ts +10 -0
- package/src/cloud/relay/sync/function.json +17 -0
- package/src/cloud/relay/sync/index.ts +10 -0
- package/src/cloud/relay/usage/function.json +17 -0
- package/src/cloud/relay/usage/index.ts +10 -0
- package/src/cloud/sponsors.ts +213 -0
- package/src/cloud/types.ts +198 -0
- package/src/components/README.md +125 -0
- package/src/components/TerminalNode.svelte +457 -0
- package/src/components/index.ts +46 -0
- package/src/core/actors.ts +205 -0
- package/src/core/component/generator.ts +432 -0
- package/src/core/engine.ts +243 -0
- package/src/core/introspection.ts +329 -0
- package/src/core/logic/generator.ts +420 -0
- package/src/core/pluresdb/generator.ts +229 -0
- package/src/core/protocol.ts +132 -0
- package/src/core/rules.ts +167 -0
- package/src/core/schema/loader.ts +247 -0
- package/src/core/schema/normalize.ts +322 -0
- package/src/core/schema/types.ts +557 -0
- package/src/dsl/index.ts +218 -0
- package/src/dsl.ts +214 -0
- package/src/examples/advanced-todo/App.svelte +506 -0
- package/src/examples/advanced-todo/README.md +371 -0
- package/src/examples/advanced-todo/index.ts +309 -0
- package/src/examples/auth-basic/index.ts +163 -0
- package/src/examples/cart/index.ts +259 -0
- package/src/examples/hero-ecommerce/index.ts +657 -0
- package/src/examples/svelte-counter/index.ts +168 -0
- package/src/flows.ts +268 -0
- package/src/index.ts +154 -0
- package/src/integrations/pluresdb.ts +93 -0
- package/src/integrations/svelte.ts +617 -0
- package/src/registry.ts +223 -0
- package/src/runtime/terminal-adapter.ts +175 -0
- package/src/step.ts +151 -0
- package/src/types.ts +70 -0
- package/templates/basic-app/README.md +147 -0
- package/templates/fullstack-app/README.md +279 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub OAuth Authentication
|
|
3
|
+
*
|
|
4
|
+
* GitHub OAuth integration for Praxis Cloud Relay identity.
|
|
5
|
+
*/
|
|
6
|
+
import type { AuthResult, GitHubUser } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* GitHub OAuth configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface GitHubOAuthConfig {
|
|
11
|
+
clientId: string;
|
|
12
|
+
clientSecret?: string;
|
|
13
|
+
redirectUri?: string;
|
|
14
|
+
scope?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* GitHub OAuth client
|
|
18
|
+
*/
|
|
19
|
+
export declare class GitHubOAuth {
|
|
20
|
+
private config;
|
|
21
|
+
constructor(config: GitHubOAuthConfig);
|
|
22
|
+
/**
|
|
23
|
+
* Get the OAuth authorization URL
|
|
24
|
+
*/
|
|
25
|
+
getAuthorizationUrl(state?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Exchange authorization code for access token
|
|
28
|
+
*/
|
|
29
|
+
exchangeCode(code: string): Promise<AuthResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Get user information from GitHub
|
|
32
|
+
*/
|
|
33
|
+
getUserInfo(token: string): Promise<GitHubUser>;
|
|
34
|
+
/**
|
|
35
|
+
* Verify a token is valid
|
|
36
|
+
*/
|
|
37
|
+
verifyToken(token: string): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Generate a random state parameter for CSRF protection
|
|
40
|
+
*/
|
|
41
|
+
private generateState;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a GitHub OAuth client
|
|
45
|
+
*/
|
|
46
|
+
export declare function createGitHubOAuth(config: GitHubOAuthConfig): GitHubOAuth;
|
|
47
|
+
/**
|
|
48
|
+
* Authenticate with GitHub OAuth device flow (for CLI)
|
|
49
|
+
*/
|
|
50
|
+
export declare function authenticateWithDeviceFlow(clientId: string): Promise<AuthResult>;
|
|
51
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cloud/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,iBAAiB;IAIrC;;OAEG;IACH,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAc3C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAkDrD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAuBrD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASlD;;OAEG;IACH,OAAO,CAAC,aAAa;CActB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAExE;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA6ErB"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub OAuth Authentication
|
|
3
|
+
*
|
|
4
|
+
* GitHub OAuth integration for Praxis Cloud Relay identity.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* GitHub OAuth client
|
|
8
|
+
*/
|
|
9
|
+
export class GitHubOAuth {
|
|
10
|
+
config;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the OAuth authorization URL
|
|
16
|
+
*/
|
|
17
|
+
getAuthorizationUrl(state) {
|
|
18
|
+
const params = new URLSearchParams({
|
|
19
|
+
client_id: this.config.clientId,
|
|
20
|
+
scope: this.config.scope || "read:user user:email",
|
|
21
|
+
state: state || this.generateState(),
|
|
22
|
+
});
|
|
23
|
+
if (this.config.redirectUri) {
|
|
24
|
+
params.set("redirect_uri", this.config.redirectUri);
|
|
25
|
+
}
|
|
26
|
+
return `https://github.com/login/oauth/authorize?${params.toString()}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Exchange authorization code for access token
|
|
30
|
+
*/
|
|
31
|
+
async exchangeCode(code) {
|
|
32
|
+
if (!this.config.clientSecret) {
|
|
33
|
+
throw new Error("Client secret is required for code exchange");
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch("https://github.com/login/oauth/access_token", {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers: {
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
Accept: "application/json",
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify({
|
|
43
|
+
client_id: this.config.clientId,
|
|
44
|
+
client_secret: this.config.clientSecret,
|
|
45
|
+
code,
|
|
46
|
+
}),
|
|
47
|
+
});
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
throw new Error(`Token exchange failed: ${response.statusText}`);
|
|
50
|
+
}
|
|
51
|
+
const data = await response.json();
|
|
52
|
+
if (data.error) {
|
|
53
|
+
throw new Error(`GitHub OAuth error: ${data.error_description || data.error}`);
|
|
54
|
+
}
|
|
55
|
+
// Get user info
|
|
56
|
+
const user = await this.getUserInfo(data.access_token);
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
token: data.access_token,
|
|
60
|
+
user,
|
|
61
|
+
expiresAt: data.expires_in
|
|
62
|
+
? Date.now() + data.expires_in * 1000
|
|
63
|
+
: undefined,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get user information from GitHub
|
|
74
|
+
*/
|
|
75
|
+
async getUserInfo(token) {
|
|
76
|
+
const response = await fetch("https://api.github.com/user", {
|
|
77
|
+
headers: {
|
|
78
|
+
Authorization: `Bearer ${token}`,
|
|
79
|
+
Accept: "application/vnd.github.v3+json",
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
throw new Error(`Failed to get user info: ${response.statusText}`);
|
|
84
|
+
}
|
|
85
|
+
const data = await response.json();
|
|
86
|
+
return {
|
|
87
|
+
id: data.id,
|
|
88
|
+
login: data.login,
|
|
89
|
+
email: data.email,
|
|
90
|
+
name: data.name,
|
|
91
|
+
avatarUrl: data.avatar_url,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Verify a token is valid
|
|
96
|
+
*/
|
|
97
|
+
async verifyToken(token) {
|
|
98
|
+
try {
|
|
99
|
+
await this.getUserInfo(token);
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Generate a random state parameter for CSRF protection
|
|
108
|
+
*/
|
|
109
|
+
generateState() {
|
|
110
|
+
const array = new Uint8Array(16);
|
|
111
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
112
|
+
crypto.getRandomValues(array);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Fallback for Node.js
|
|
116
|
+
for (let i = 0; i < array.length; i++) {
|
|
117
|
+
array[i] = Math.floor(Math.random() * 256);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return Array.from(array, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a GitHub OAuth client
|
|
125
|
+
*/
|
|
126
|
+
export function createGitHubOAuth(config) {
|
|
127
|
+
return new GitHubOAuth(config);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Authenticate with GitHub OAuth device flow (for CLI)
|
|
131
|
+
*/
|
|
132
|
+
export async function authenticateWithDeviceFlow(clientId) {
|
|
133
|
+
try {
|
|
134
|
+
// Request device code
|
|
135
|
+
const deviceResponse = await fetch("https://github.com/login/device/code", {
|
|
136
|
+
method: "POST",
|
|
137
|
+
headers: {
|
|
138
|
+
"Content-Type": "application/json",
|
|
139
|
+
Accept: "application/json",
|
|
140
|
+
},
|
|
141
|
+
body: JSON.stringify({
|
|
142
|
+
client_id: clientId,
|
|
143
|
+
scope: "read:user user:email",
|
|
144
|
+
}),
|
|
145
|
+
});
|
|
146
|
+
if (!deviceResponse.ok) {
|
|
147
|
+
throw new Error(`Device flow initiation failed: ${deviceResponse.statusText}`);
|
|
148
|
+
}
|
|
149
|
+
const deviceData = await deviceResponse.json();
|
|
150
|
+
console.log("\nTo authenticate with GitHub:");
|
|
151
|
+
console.log(`1. Visit: ${deviceData.verification_uri}`);
|
|
152
|
+
console.log(`2. Enter code: ${deviceData.user_code}`);
|
|
153
|
+
console.log("\nWaiting for authentication...\n");
|
|
154
|
+
// Poll for access token
|
|
155
|
+
const interval = deviceData.interval * 1000 || 5000;
|
|
156
|
+
const expiresAt = Date.now() + deviceData.expires_in * 1000;
|
|
157
|
+
while (Date.now() < expiresAt) {
|
|
158
|
+
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
159
|
+
const tokenResponse = await fetch("https://github.com/login/oauth/access_token", {
|
|
160
|
+
method: "POST",
|
|
161
|
+
headers: {
|
|
162
|
+
"Content-Type": "application/json",
|
|
163
|
+
Accept: "application/json",
|
|
164
|
+
},
|
|
165
|
+
body: JSON.stringify({
|
|
166
|
+
client_id: clientId,
|
|
167
|
+
device_code: deviceData.device_code,
|
|
168
|
+
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
169
|
+
}),
|
|
170
|
+
});
|
|
171
|
+
const tokenData = await tokenResponse.json();
|
|
172
|
+
if (tokenData.access_token) {
|
|
173
|
+
// Get user info
|
|
174
|
+
const oauth = new GitHubOAuth({ clientId });
|
|
175
|
+
const user = await oauth.getUserInfo(tokenData.access_token);
|
|
176
|
+
return {
|
|
177
|
+
success: true,
|
|
178
|
+
token: tokenData.access_token,
|
|
179
|
+
user,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (tokenData.error && tokenData.error !== "authorization_pending") {
|
|
183
|
+
throw new Error(`Authentication failed: ${tokenData.error_description || tokenData.error}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
throw new Error("Authentication timeout");
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
return {
|
|
190
|
+
success: false,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cloud/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Sponsors and Marketplace Billing
|
|
3
|
+
*
|
|
4
|
+
* Types and utilities for GitHub-based monetization.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Praxis Cloud subscription tiers
|
|
8
|
+
*/
|
|
9
|
+
export declare enum SubscriptionTier {
|
|
10
|
+
/**
|
|
11
|
+
* Free tier - limited usage
|
|
12
|
+
*/
|
|
13
|
+
FREE = "free",
|
|
14
|
+
/**
|
|
15
|
+
* Solo tier - individual developers via GitHub Sponsors
|
|
16
|
+
*/
|
|
17
|
+
SOLO = "solo",
|
|
18
|
+
/**
|
|
19
|
+
* Team tier - small teams via GitHub Sponsors
|
|
20
|
+
*/
|
|
21
|
+
TEAM = "team",
|
|
22
|
+
/**
|
|
23
|
+
* Enterprise tier - self-service enterprise via GitHub Sponsors/Marketplace
|
|
24
|
+
*/
|
|
25
|
+
ENTERPRISE = "enterprise"
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Billing provider type
|
|
29
|
+
*/
|
|
30
|
+
export declare enum BillingProvider {
|
|
31
|
+
/**
|
|
32
|
+
* GitHub Sponsors
|
|
33
|
+
*/
|
|
34
|
+
SPONSORS = "sponsors",
|
|
35
|
+
/**
|
|
36
|
+
* GitHub Marketplace (SaaS)
|
|
37
|
+
*/
|
|
38
|
+
MARKETPLACE = "marketplace",
|
|
39
|
+
/**
|
|
40
|
+
* Free tier (no billing)
|
|
41
|
+
*/
|
|
42
|
+
NONE = "none"
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Subscription status
|
|
46
|
+
*/
|
|
47
|
+
export declare enum SubscriptionStatus {
|
|
48
|
+
/**
|
|
49
|
+
* Active subscription
|
|
50
|
+
*/
|
|
51
|
+
ACTIVE = "active",
|
|
52
|
+
/**
|
|
53
|
+
* Subscription cancelled, but still valid until period end
|
|
54
|
+
*/
|
|
55
|
+
CANCELLED = "cancelled",
|
|
56
|
+
/**
|
|
57
|
+
* Subscription expired or payment failed
|
|
58
|
+
*/
|
|
59
|
+
EXPIRED = "expired",
|
|
60
|
+
/**
|
|
61
|
+
* No subscription
|
|
62
|
+
*/
|
|
63
|
+
NONE = "none"
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Tier limits for different subscription levels
|
|
67
|
+
*/
|
|
68
|
+
export interface TierLimits {
|
|
69
|
+
/**
|
|
70
|
+
* Maximum sync operations per month
|
|
71
|
+
*/
|
|
72
|
+
maxSyncsPerMonth: number;
|
|
73
|
+
/**
|
|
74
|
+
* Maximum storage in bytes
|
|
75
|
+
*/
|
|
76
|
+
maxStorageBytes: number;
|
|
77
|
+
/**
|
|
78
|
+
* Maximum number of team members (null = unlimited)
|
|
79
|
+
*/
|
|
80
|
+
maxTeamMembers: number | null;
|
|
81
|
+
/**
|
|
82
|
+
* Maximum number of apps/projects
|
|
83
|
+
*/
|
|
84
|
+
maxApps: number;
|
|
85
|
+
/**
|
|
86
|
+
* Support level
|
|
87
|
+
*/
|
|
88
|
+
supportLevel: "community" | "standard" | "priority";
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Subscription information
|
|
92
|
+
*/
|
|
93
|
+
export interface Subscription {
|
|
94
|
+
/**
|
|
95
|
+
* Subscription tier
|
|
96
|
+
*/
|
|
97
|
+
tier: SubscriptionTier;
|
|
98
|
+
/**
|
|
99
|
+
* Subscription status
|
|
100
|
+
*/
|
|
101
|
+
status: SubscriptionStatus;
|
|
102
|
+
/**
|
|
103
|
+
* Billing provider
|
|
104
|
+
*/
|
|
105
|
+
provider: BillingProvider;
|
|
106
|
+
/**
|
|
107
|
+
* GitHub sponsor tier ID (if applicable)
|
|
108
|
+
*/
|
|
109
|
+
sponsorTierId?: string;
|
|
110
|
+
/**
|
|
111
|
+
* GitHub Marketplace plan ID (if applicable)
|
|
112
|
+
*/
|
|
113
|
+
marketplacePlanId?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Subscription start date
|
|
116
|
+
*/
|
|
117
|
+
startDate: number;
|
|
118
|
+
/**
|
|
119
|
+
* Current period end date
|
|
120
|
+
*/
|
|
121
|
+
periodEnd?: number;
|
|
122
|
+
/**
|
|
123
|
+
* Whether subscription auto-renews
|
|
124
|
+
*/
|
|
125
|
+
autoRenew: boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Usage limits for this tier
|
|
128
|
+
*/
|
|
129
|
+
limits: TierLimits;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Billing event type
|
|
133
|
+
*/
|
|
134
|
+
export interface BillingEvent {
|
|
135
|
+
/**
|
|
136
|
+
* Event type
|
|
137
|
+
*/
|
|
138
|
+
type: "subscription_created" | "subscription_cancelled" | "subscription_renewed" | "tier_changed";
|
|
139
|
+
/**
|
|
140
|
+
* Timestamp
|
|
141
|
+
*/
|
|
142
|
+
timestamp: number;
|
|
143
|
+
/**
|
|
144
|
+
* User/organization ID
|
|
145
|
+
*/
|
|
146
|
+
userId: number;
|
|
147
|
+
/**
|
|
148
|
+
* Old subscription (for changes)
|
|
149
|
+
*/
|
|
150
|
+
oldSubscription?: Subscription;
|
|
151
|
+
/**
|
|
152
|
+
* New subscription
|
|
153
|
+
*/
|
|
154
|
+
newSubscription: Subscription;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Default tier limits
|
|
158
|
+
*/
|
|
159
|
+
export declare const TIER_LIMITS: Record<SubscriptionTier, TierLimits>;
|
|
160
|
+
/**
|
|
161
|
+
* Check if a user has access to a specific tier
|
|
162
|
+
*/
|
|
163
|
+
export declare function hasAccessToTier(subscription: Subscription, requiredTier: SubscriptionTier): boolean;
|
|
164
|
+
/**
|
|
165
|
+
* Check if usage is within tier limits
|
|
166
|
+
*/
|
|
167
|
+
export declare function checkUsageLimits(subscription: Subscription, usage: {
|
|
168
|
+
syncCount: number;
|
|
169
|
+
storageBytes: number;
|
|
170
|
+
teamMembers: number;
|
|
171
|
+
appCount: number;
|
|
172
|
+
}): {
|
|
173
|
+
withinLimits: boolean;
|
|
174
|
+
violations: string[];
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* Create a free tier subscription
|
|
178
|
+
*/
|
|
179
|
+
export declare function createFreeSubscription(): Subscription;
|
|
180
|
+
/**
|
|
181
|
+
* Create a subscription from GitHub Sponsors tier
|
|
182
|
+
*/
|
|
183
|
+
export declare function createSponsorSubscription(tierName: string, monthlyPriceInCents: number): Subscription;
|
|
184
|
+
//# sourceMappingURL=billing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/cloud/billing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,oBAAY,gBAAgB;IAC1B;;OAEG;IACH,IAAI,SAAS;IAEb;;OAEG;IACH,IAAI,SAAS;IAEb;;OAEG;IACH,IAAI,SAAS;IAEb;;OAEG;IACH,UAAU,eAAe;CAC1B;AAED;;GAEG;AACH,oBAAY,eAAe;IACzB;;OAEG;IACH,QAAQ,aAAa;IAErB;;OAEG;IACH,WAAW,gBAAgB;IAE3B;;OAEG;IACH,IAAI,SAAS;CACd;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B;;OAEG;IACH,MAAM,WAAW;IAEjB;;OAEG;IACH,SAAS,cAAc;IAEvB;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,gBAAgB,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,kBAAkB,CAAC;IAE3B;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC;IAE1B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,sBAAsB,GAAG,wBAAwB,GAAG,sBAAsB,GAAG,cAAc,CAAC;IAElG;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,eAAe,CAAC,EAAE,YAAY,CAAC;IAE/B;;OAEG;IACH,eAAe,EAAE,YAAY,CAAC;CAC/B;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,gBAAgB,EAAE,UAAU,CA6B5D,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,gBAAgB,GAC7B,OAAO,CAgBT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA;IACD,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAkCA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CASrD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,mBAAmB,EAAE,MAAM,GAC1B,YAAY,CAqBd"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Sponsors and Marketplace Billing
|
|
3
|
+
*
|
|
4
|
+
* Types and utilities for GitHub-based monetization.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Praxis Cloud subscription tiers
|
|
8
|
+
*/
|
|
9
|
+
export var SubscriptionTier;
|
|
10
|
+
(function (SubscriptionTier) {
|
|
11
|
+
/**
|
|
12
|
+
* Free tier - limited usage
|
|
13
|
+
*/
|
|
14
|
+
SubscriptionTier["FREE"] = "free";
|
|
15
|
+
/**
|
|
16
|
+
* Solo tier - individual developers via GitHub Sponsors
|
|
17
|
+
*/
|
|
18
|
+
SubscriptionTier["SOLO"] = "solo";
|
|
19
|
+
/**
|
|
20
|
+
* Team tier - small teams via GitHub Sponsors
|
|
21
|
+
*/
|
|
22
|
+
SubscriptionTier["TEAM"] = "team";
|
|
23
|
+
/**
|
|
24
|
+
* Enterprise tier - self-service enterprise via GitHub Sponsors/Marketplace
|
|
25
|
+
*/
|
|
26
|
+
SubscriptionTier["ENTERPRISE"] = "enterprise";
|
|
27
|
+
})(SubscriptionTier || (SubscriptionTier = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Billing provider type
|
|
30
|
+
*/
|
|
31
|
+
export var BillingProvider;
|
|
32
|
+
(function (BillingProvider) {
|
|
33
|
+
/**
|
|
34
|
+
* GitHub Sponsors
|
|
35
|
+
*/
|
|
36
|
+
BillingProvider["SPONSORS"] = "sponsors";
|
|
37
|
+
/**
|
|
38
|
+
* GitHub Marketplace (SaaS)
|
|
39
|
+
*/
|
|
40
|
+
BillingProvider["MARKETPLACE"] = "marketplace";
|
|
41
|
+
/**
|
|
42
|
+
* Free tier (no billing)
|
|
43
|
+
*/
|
|
44
|
+
BillingProvider["NONE"] = "none";
|
|
45
|
+
})(BillingProvider || (BillingProvider = {}));
|
|
46
|
+
/**
|
|
47
|
+
* Subscription status
|
|
48
|
+
*/
|
|
49
|
+
export var SubscriptionStatus;
|
|
50
|
+
(function (SubscriptionStatus) {
|
|
51
|
+
/**
|
|
52
|
+
* Active subscription
|
|
53
|
+
*/
|
|
54
|
+
SubscriptionStatus["ACTIVE"] = "active";
|
|
55
|
+
/**
|
|
56
|
+
* Subscription cancelled, but still valid until period end
|
|
57
|
+
*/
|
|
58
|
+
SubscriptionStatus["CANCELLED"] = "cancelled";
|
|
59
|
+
/**
|
|
60
|
+
* Subscription expired or payment failed
|
|
61
|
+
*/
|
|
62
|
+
SubscriptionStatus["EXPIRED"] = "expired";
|
|
63
|
+
/**
|
|
64
|
+
* No subscription
|
|
65
|
+
*/
|
|
66
|
+
SubscriptionStatus["NONE"] = "none";
|
|
67
|
+
})(SubscriptionStatus || (SubscriptionStatus = {}));
|
|
68
|
+
/**
|
|
69
|
+
* Default tier limits
|
|
70
|
+
*/
|
|
71
|
+
export const TIER_LIMITS = {
|
|
72
|
+
[SubscriptionTier.FREE]: {
|
|
73
|
+
maxSyncsPerMonth: 1000,
|
|
74
|
+
maxStorageBytes: 10 * 1024 * 1024, // 10 MB
|
|
75
|
+
maxTeamMembers: 1,
|
|
76
|
+
maxApps: 1,
|
|
77
|
+
supportLevel: "community",
|
|
78
|
+
},
|
|
79
|
+
[SubscriptionTier.SOLO]: {
|
|
80
|
+
maxSyncsPerMonth: 50000,
|
|
81
|
+
maxStorageBytes: 1024 * 1024 * 1024, // 1 GB
|
|
82
|
+
maxTeamMembers: 1,
|
|
83
|
+
maxApps: 10,
|
|
84
|
+
supportLevel: "standard",
|
|
85
|
+
},
|
|
86
|
+
[SubscriptionTier.TEAM]: {
|
|
87
|
+
maxSyncsPerMonth: 500000,
|
|
88
|
+
maxStorageBytes: 10 * 1024 * 1024 * 1024, // 10 GB
|
|
89
|
+
maxTeamMembers: 10,
|
|
90
|
+
maxApps: 50,
|
|
91
|
+
supportLevel: "standard",
|
|
92
|
+
},
|
|
93
|
+
[SubscriptionTier.ENTERPRISE]: {
|
|
94
|
+
maxSyncsPerMonth: 5000000,
|
|
95
|
+
maxStorageBytes: 100 * 1024 * 1024 * 1024, // 100 GB
|
|
96
|
+
maxTeamMembers: null, // unlimited
|
|
97
|
+
maxApps: 1000,
|
|
98
|
+
supportLevel: "priority",
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Check if a user has access to a specific tier
|
|
103
|
+
*/
|
|
104
|
+
export function hasAccessToTier(subscription, requiredTier) {
|
|
105
|
+
if (subscription.status !== SubscriptionStatus.ACTIVE) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
const tierOrder = [
|
|
109
|
+
SubscriptionTier.FREE,
|
|
110
|
+
SubscriptionTier.SOLO,
|
|
111
|
+
SubscriptionTier.TEAM,
|
|
112
|
+
SubscriptionTier.ENTERPRISE,
|
|
113
|
+
];
|
|
114
|
+
const currentTierIndex = tierOrder.indexOf(subscription.tier);
|
|
115
|
+
const requiredTierIndex = tierOrder.indexOf(requiredTier);
|
|
116
|
+
return currentTierIndex >= requiredTierIndex;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check if usage is within tier limits
|
|
120
|
+
*/
|
|
121
|
+
export function checkUsageLimits(subscription, usage) {
|
|
122
|
+
const violations = [];
|
|
123
|
+
if (usage.syncCount > subscription.limits.maxSyncsPerMonth) {
|
|
124
|
+
violations.push(`Sync limit exceeded: ${usage.syncCount}/${subscription.limits.maxSyncsPerMonth}`);
|
|
125
|
+
}
|
|
126
|
+
if (usage.storageBytes > subscription.limits.maxStorageBytes) {
|
|
127
|
+
violations.push(`Storage limit exceeded: ${(usage.storageBytes / 1024 / 1024).toFixed(2)}MB/${(subscription.limits.maxStorageBytes / 1024 / 1024).toFixed(2)}MB`);
|
|
128
|
+
}
|
|
129
|
+
if (subscription.limits.maxTeamMembers !== null &&
|
|
130
|
+
usage.teamMembers > subscription.limits.maxTeamMembers) {
|
|
131
|
+
violations.push(`Team member limit exceeded: ${usage.teamMembers}/${subscription.limits.maxTeamMembers}`);
|
|
132
|
+
}
|
|
133
|
+
if (usage.appCount > subscription.limits.maxApps) {
|
|
134
|
+
violations.push(`App limit exceeded: ${usage.appCount}/${subscription.limits.maxApps}`);
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
withinLimits: violations.length === 0,
|
|
138
|
+
violations,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Create a free tier subscription
|
|
143
|
+
*/
|
|
144
|
+
export function createFreeSubscription() {
|
|
145
|
+
return {
|
|
146
|
+
tier: SubscriptionTier.FREE,
|
|
147
|
+
status: SubscriptionStatus.ACTIVE,
|
|
148
|
+
provider: BillingProvider.NONE,
|
|
149
|
+
startDate: Date.now(),
|
|
150
|
+
autoRenew: true,
|
|
151
|
+
limits: TIER_LIMITS[SubscriptionTier.FREE],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Create a subscription from GitHub Sponsors tier
|
|
156
|
+
*/
|
|
157
|
+
export function createSponsorSubscription(tierName, monthlyPriceInCents) {
|
|
158
|
+
let tier = SubscriptionTier.FREE;
|
|
159
|
+
// Map price to tier (example pricing)
|
|
160
|
+
if (monthlyPriceInCents >= 5000) { // $50/month
|
|
161
|
+
tier = SubscriptionTier.ENTERPRISE;
|
|
162
|
+
}
|
|
163
|
+
else if (monthlyPriceInCents >= 2000) { // $20/month
|
|
164
|
+
tier = SubscriptionTier.TEAM;
|
|
165
|
+
}
|
|
166
|
+
else if (monthlyPriceInCents >= 500) { // $5/month
|
|
167
|
+
tier = SubscriptionTier.SOLO;
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
tier,
|
|
171
|
+
status: SubscriptionStatus.ACTIVE,
|
|
172
|
+
provider: BillingProvider.SPONSORS,
|
|
173
|
+
sponsorTierId: tierName,
|
|
174
|
+
startDate: Date.now(),
|
|
175
|
+
autoRenew: true,
|
|
176
|
+
limits: TIER_LIMITS[tier],
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=billing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/cloud/billing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Relay Client
|
|
3
|
+
*
|
|
4
|
+
* Client for connecting to Praxis Cloud Relay service (Azure-based).
|
|
5
|
+
*/
|
|
6
|
+
import type { CloudRelayConfig, CloudRelayClient } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Create a cloud relay client
|
|
9
|
+
*/
|
|
10
|
+
export declare function createCloudRelay(config: CloudRelayConfig): CloudRelayClient;
|
|
11
|
+
/**
|
|
12
|
+
* Connect to Praxis Cloud Relay
|
|
13
|
+
*
|
|
14
|
+
* @param endpoint - Azure Function App endpoint URL
|
|
15
|
+
* @param options - Additional configuration options
|
|
16
|
+
* @returns Cloud relay client instance
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { connectRelay } from "@plures/praxis/cloud";
|
|
21
|
+
*
|
|
22
|
+
* const relay = await connectRelay("https://my-app.azurewebsites.net", {
|
|
23
|
+
* appId: "my-app",
|
|
24
|
+
* authToken: "github-token",
|
|
25
|
+
* autoSync: true
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Sync data
|
|
29
|
+
* await relay.sync({
|
|
30
|
+
* type: "delta",
|
|
31
|
+
* appId: "my-app",
|
|
32
|
+
* clock: {},
|
|
33
|
+
* facts: [...],
|
|
34
|
+
* timestamp: Date.now()
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function connectRelay(endpoint: string, options?: Omit<CloudRelayConfig, "endpoint">): Promise<CloudRelayClient>;
|
|
39
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAKjB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAiK3E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAwB,GACjE,OAAO,CAAC,gBAAgB,CAAC,CAS3B"}
|