@proappstore/sdk 0.3.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/db.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ interface AuthLike {
2
+ token: string | null;
3
+ handleUnauthorized(): void;
4
+ }
5
+ export interface QueryResult<T = Record<string, unknown>> {
6
+ rows: T[];
7
+ meta: {
8
+ changes: number;
9
+ duration: number;
10
+ };
11
+ }
12
+ export interface ExecuteResult {
13
+ meta: {
14
+ changes: number;
15
+ duration: number;
16
+ last_row_id: number;
17
+ };
18
+ }
19
+ export declare class Database {
20
+ private readonly appId;
21
+ private readonly dataApiBase;
22
+ private readonly auth;
23
+ constructor(appId: string, dataApiBase: string, auth: AuthLike);
24
+ /** Run a SELECT or other query that returns rows. */
25
+ query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
26
+ /** Run an INSERT, UPDATE, DELETE, or DDL statement. */
27
+ execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
28
+ /** Run multiple statements in a single D1 batch (transactional). */
29
+ batch(statements: {
30
+ sql: string;
31
+ params?: unknown[];
32
+ }[]): Promise<{
33
+ rows: unknown[];
34
+ meta: {
35
+ changes: number;
36
+ last_row_id: number;
37
+ };
38
+ }[]>;
39
+ /** List all user-created tables in the database. */
40
+ tables(): Promise<string[]>;
41
+ private req;
42
+ }
43
+ export {};
44
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB,IAAI,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED,qBAAa,QAAQ;IAEjB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,QAAQ;IAGjC,qDAAqD;IAC/C,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIlG,uDAAuD;IACjD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAItE,oEAAoE;IAC9D,KAAK,CAAC,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAAC,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,CAAC;IAK9I,oDAAoD;IAC9C,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAcnB,GAAG;CAqBlB"}
package/dist/db.js ADDED
@@ -0,0 +1,62 @@
1
+ export class Database {
2
+ appId;
3
+ dataApiBase;
4
+ auth;
5
+ constructor(appId, dataApiBase, auth) {
6
+ this.appId = appId;
7
+ this.dataApiBase = dataApiBase;
8
+ this.auth = auth;
9
+ }
10
+ /** Run a SELECT or other query that returns rows. */
11
+ async query(sql, params) {
12
+ return this.req('/query', { sql, params });
13
+ }
14
+ /** Run an INSERT, UPDATE, DELETE, or DDL statement. */
15
+ async execute(sql, params) {
16
+ return this.req('/execute', { sql, params });
17
+ }
18
+ /** Run multiple statements in a single D1 batch (transactional). */
19
+ async batch(statements) {
20
+ const result = await this.req('/batch', { statements });
21
+ return result.results;
22
+ }
23
+ /** List all user-created tables in the database. */
24
+ async tables() {
25
+ const token = this.auth.token;
26
+ if (!token)
27
+ throw new Error('Not signed in.');
28
+ const response = await fetch(`${this.dataApiBase}/tables`, {
29
+ headers: { Authorization: `Bearer ${token}` },
30
+ });
31
+ if (response.status === 401) {
32
+ this.auth.handleUnauthorized();
33
+ throw new Error('Not signed in.');
34
+ }
35
+ if (!response.ok)
36
+ throw new Error(`db.tables failed: ${response.status}`);
37
+ return (await response.json());
38
+ }
39
+ async req(path, body) {
40
+ const token = this.auth.token;
41
+ if (!token)
42
+ throw new Error('Not signed in.');
43
+ const response = await fetch(`${this.dataApiBase}${path}`, {
44
+ method: 'POST',
45
+ headers: {
46
+ Authorization: `Bearer ${token}`,
47
+ 'Content-Type': 'application/json',
48
+ },
49
+ body: JSON.stringify(body),
50
+ });
51
+ if (response.status === 401) {
52
+ this.auth.handleUnauthorized();
53
+ throw new Error('Not signed in.');
54
+ }
55
+ if (!response.ok) {
56
+ const text = await response.text().catch(() => '');
57
+ throw new Error(`db${path} failed: ${response.status} ${text}`);
58
+ }
59
+ return (await response.json());
60
+ }
61
+ }
62
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,QAAQ;IAEA;IACA;IACA;IAHnB,YACmB,KAAa,EACb,WAAmB,EACnB,IAAc;QAFd,UAAK,GAAL,KAAK,CAAQ;QACb,gBAAW,GAAX,WAAW,CAAQ;QACnB,SAAI,GAAJ,IAAI,CAAU;IAC9B,CAAC;IAEJ,qDAAqD;IACrD,KAAK,CAAC,KAAK,CAA8B,GAAW,EAAE,MAAkB;QACtE,OAAO,IAAI,CAAC,GAAG,CAAiB,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAkB;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAgB,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,KAAK,CAAC,UAAiD;QAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAqF,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5I,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,MAAM;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,SAAS,EAAE;YACzD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;SAC9C,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAa,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,IAAa;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,YAAY,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import { FreeAppStore } from '@freeappstore/sdk';
2
+ import { Database } from './db.js';
2
3
  import { SubscriptionApi } from './subscription.js';
3
4
  import { LicenseApi } from './license.js';
4
5
  import type { ProInitOptions } from './types.js';
5
- export type { AuthProvider, User, Unsubscribe, FasInitOptions, ConnectionState, Room, RoomMessage, RoomPeer, } from '@freeappstore/sdk';
6
+ export type { User, Unsubscribe, FasInitOptions, ConnectionState, Room, RoomMessage, RoomPeer, } from '@freeappstore/sdk';
6
7
  export type { ProInitOptions, Subscription, SubscriptionStatus, CheckoutRequest, LicenseInfo, } from './types.js';
8
+ export type { QueryResult, ExecuteResult } from './db.js';
7
9
  /**
8
10
  * Pro SDK instance — includes everything from @freeappstore/sdk (auth, kv,
9
11
  * counters, rooms, proxy) plus subscription management and license keys.
@@ -13,6 +15,7 @@ export type { ProInitOptions, Subscription, SubscriptionStatus, CheckoutRequest,
13
15
  export declare class ProAppStore extends FreeAppStore {
14
16
  readonly subscription: SubscriptionApi;
15
17
  readonly license: LicenseApi;
18
+ readonly db: Database;
16
19
  constructor(opts: ProInitOptions);
17
20
  }
18
21
  /** Create a new ProAppStore SDK instance. Includes all free + pro features. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,YAAY,EACV,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,cAAc,EACd,eAAe,EACf,IAAI,EACJ,WAAW,EACX,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;gBAEjB,IAAI,EAAE,cAAc;CAMjC;AAED,+EAA+E;AAC/E,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CAEzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,YAAY,EACV,IAAI,EACJ,WAAW,EACX,cAAc,EACd,eAAe,EACf,IAAI,EACJ,WAAW,EACX,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE1D;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;gBAEV,IAAI,EAAE,cAAc;CAOjC;AAED,+EAA+E;AAC/E,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CAEzD"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { FreeAppStore } from '@freeappstore/sdk';
2
+ import { Database } from './db.js';
2
3
  import { SubscriptionApi } from './subscription.js';
3
4
  import { LicenseApi } from './license.js';
4
5
  /**
@@ -10,11 +11,13 @@ import { LicenseApi } from './license.js';
10
11
  export class ProAppStore extends FreeAppStore {
11
12
  subscription;
12
13
  license;
14
+ db;
13
15
  constructor(opts) {
14
16
  super({ appId: opts.appId, ...(opts.fasApiBase && { apiBase: opts.fasApiBase }) });
15
17
  const proApiBase = opts.proApiBase ?? 'https://api.proappstore.online';
16
18
  this.subscription = new SubscriptionApi(opts.appId, proApiBase, this.auth);
17
19
  this.license = new LicenseApi(opts.appId, proApiBase, this.auth);
20
+ this.db = new Database(opts.appId, opts.dataApiBase ?? `https://data-${opts.appId}.proappstore.online`, this.auth);
18
21
  }
19
22
  }
20
23
  /** Create a new ProAppStore SDK instance. Includes all free + pro features. */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAuB1C;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAClC,YAAY,CAAkB;IAC9B,OAAO,CAAa;IAE7B,YAAY,IAAoB;QAC9B,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,gCAAgC,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,UAAU,OAAO,CAAC,IAAoB;IAC1C,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAwB1C;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAClC,YAAY,CAAkB;IAC9B,OAAO,CAAa;IACpB,EAAE,CAAW;IAEtB,YAAY,IAAoB;QAC9B,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,gCAAgC,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,gBAAgB,IAAI,CAAC,KAAK,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrH,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,UAAU,OAAO,CAAC,IAAoB;IAC1C,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { ProAppStore } from './index.js';
3
+ export interface ProShellProps {
4
+ /** The ProAppStore SDK instance from initPro(). */
5
+ app: ProAppStore;
6
+ /** Your app's content. Only rendered when user is signed in + subscribed. */
7
+ children: ReactNode;
8
+ /** App name shown in the topbar. */
9
+ appName?: string;
10
+ /** If true, allow free users to see the app (no subscription gate). Default: false. */
11
+ allowFree?: boolean;
12
+ }
13
+ /**
14
+ * ProShell — platform-level Shell for all ProAppStore apps.
15
+ *
16
+ * Handles:
17
+ * - Auth initialization + sign-in gate
18
+ * - Subscription check + upgrade wall (unless allowFree=true)
19
+ * - Topbar with avatar, app name, menu (sign out, delete account, manage billing)
20
+ * - Only renders children when all gates pass
21
+ *
22
+ * Usage:
23
+ * ```tsx
24
+ * import { initPro } from '@proappstore/sdk'
25
+ * import { ProShell } from '@proappstore/sdk/shell'
26
+ *
27
+ * const app = initPro({ appId: 'meetup' })
28
+ *
29
+ * export default function App() {
30
+ * return (
31
+ * <ProShell app={app} appName="Meetup">
32
+ * <MeetupApp />
33
+ * </ProShell>
34
+ * )
35
+ * }
36
+ * ```
37
+ */
38
+ export declare function ProShell({ app, children, appName, allowFree }: ProShellProps): import("react/jsx-runtime").JSX.Element;
39
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,GAAG,EAAE,WAAW,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,EAAE,SAAS,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAiB,EAAE,EAAE,aAAa,2CAmJpF"}
package/dist/shell.js ADDED
@@ -0,0 +1,130 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback } from 'react';
3
+ /**
4
+ * ProShell — platform-level Shell for all ProAppStore apps.
5
+ *
6
+ * Handles:
7
+ * - Auth initialization + sign-in gate
8
+ * - Subscription check + upgrade wall (unless allowFree=true)
9
+ * - Topbar with avatar, app name, menu (sign out, delete account, manage billing)
10
+ * - Only renders children when all gates pass
11
+ *
12
+ * Usage:
13
+ * ```tsx
14
+ * import { initPro } from '@proappstore/sdk'
15
+ * import { ProShell } from '@proappstore/sdk/shell'
16
+ *
17
+ * const app = initPro({ appId: 'meetup' })
18
+ *
19
+ * export default function App() {
20
+ * return (
21
+ * <ProShell app={app} appName="Meetup">
22
+ * <MeetupApp />
23
+ * </ProShell>
24
+ * )
25
+ * }
26
+ * ```
27
+ */
28
+ export function ProShell({ app, children, appName, allowFree = false }) {
29
+ const [user, setUser] = useState(app.auth.user);
30
+ const [subscription, setSubscription] = useState(null);
31
+ const [gate, setGate] = useState('loading');
32
+ const [menuOpen, setMenuOpen] = useState(false);
33
+ useEffect(() => {
34
+ app.auth.init();
35
+ return app.auth.onChange((u) => {
36
+ setUser(u);
37
+ if (!u)
38
+ setGate('signed-out');
39
+ });
40
+ }, [app]);
41
+ // Check subscription after auth
42
+ useEffect(() => {
43
+ if (!user)
44
+ return;
45
+ if (allowFree) {
46
+ setGate('ready');
47
+ return;
48
+ }
49
+ app.subscription.status().then((sub) => {
50
+ setSubscription(sub);
51
+ if (sub?.status === 'active') {
52
+ setGate('ready');
53
+ }
54
+ else {
55
+ setGate('no-subscription');
56
+ }
57
+ }).catch(() => {
58
+ setGate('no-subscription');
59
+ });
60
+ }, [user, app, allowFree]);
61
+ const handleSignOut = useCallback(() => {
62
+ app.auth.signOut();
63
+ setMenuOpen(false);
64
+ }, [app]);
65
+ const handleDeleteAccount = useCallback(async () => {
66
+ if (!confirm('Delete your account? This permanently removes ALL your data across ALL apps and cancels your subscription. This cannot be undone.'))
67
+ return;
68
+ if (!confirm('Are you absolutely sure? Type thinking... Last chance.'))
69
+ return;
70
+ // Delete all KV data
71
+ try {
72
+ const keys = await app.kv.list();
73
+ for (const key of keys) {
74
+ await app.kv.delete(key);
75
+ }
76
+ }
77
+ catch { }
78
+ app.auth.signOut();
79
+ setMenuOpen(false);
80
+ }, [app]);
81
+ const handleManageBilling = useCallback(async () => {
82
+ try {
83
+ await app.subscription.openPortal(window.location.href);
84
+ }
85
+ catch { }
86
+ setMenuOpen(false);
87
+ }, [app]);
88
+ const handleUpgrade = useCallback(async () => {
89
+ await app.subscription.openCheckout({
90
+ priceId: 'price_pro_monthly',
91
+ successUrl: window.location.href + '?upgraded=1',
92
+ cancelUrl: window.location.href,
93
+ });
94
+ }, [app]);
95
+ // --- Gates ---
96
+ if (gate === 'loading') {
97
+ return _jsx("div", { style: styles.center, children: _jsx("p", { style: styles.muted, children: "Loading..." }) });
98
+ }
99
+ if (gate === 'signed-out') {
100
+ return (_jsx("div", { style: styles.center, children: _jsxs("div", { style: styles.card, children: [_jsx("h1", { style: styles.heading, children: appName || 'ProAppStore' }), _jsx("p", { style: styles.muted, children: "Sign in to your ProAppStore account to continue." }), _jsx("button", { onClick: () => app.auth.signIn(), style: styles.primaryBtn, children: "Sign in with GitHub" }), _jsx("p", { style: { ...styles.muted, fontSize: '0.75rem', marginTop: '0.75rem' }, children: "One account for all Pro apps." })] }) }));
101
+ }
102
+ if (gate === 'no-subscription') {
103
+ return (_jsx("div", { style: styles.center, children: _jsxs("div", { style: styles.card, children: [_jsx("h1", { style: styles.heading, children: "Pro subscription required" }), _jsxs("p", { style: styles.muted, children: [appName || 'This app', " requires an active ProAppStore subscription ($9/month)."] }), _jsx("button", { onClick: handleUpgrade, style: styles.primaryBtn, children: "Subscribe to Pro" }), _jsx("button", { onClick: handleSignOut, style: styles.ghostBtn, children: "Sign out" })] }) }));
104
+ }
105
+ // --- Ready: render app with topbar ---
106
+ return (_jsxs("div", { style: styles.shell, children: [_jsxs("header", { style: styles.topbar, children: [_jsxs("div", { style: styles.topbarLeft, children: [_jsx("a", { href: "https://proappstore.online", style: styles.logoLink, children: "Pro" }), appName && _jsx("span", { style: styles.appName, children: appName })] }), _jsxs("div", { style: styles.topbarRight, children: [_jsx("button", { onClick: () => setMenuOpen(!menuOpen), style: styles.avatarBtn, children: _jsx("img", { src: user?.avatarUrl || '', alt: "", style: styles.avatar }) }), menuOpen && (_jsxs("div", { style: styles.menu, children: [_jsxs("div", { style: styles.menuHeader, children: [_jsx("strong", { children: user?.login }), _jsx("span", { style: styles.proBadge, children: "PRO" })] }), _jsx("button", { onClick: handleManageBilling, style: styles.menuItem, children: "Manage billing" }), _jsx("button", { onClick: handleSignOut, style: styles.menuItem, children: "Sign out" }), _jsx("button", { onClick: handleDeleteAccount, style: { ...styles.menuItem, color: '#dc2626' }, children: "Delete account" })] }))] })] }), _jsx("main", { style: styles.main, children: children })] }));
107
+ }
108
+ // --- Inline styles (no Tailwind dependency — works in any app) ---
109
+ const styles = {
110
+ shell: { minHeight: '100dvh', display: 'flex', flexDirection: 'column' },
111
+ topbar: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0.5rem 1rem', borderBottom: '1px solid #e5e5e5', background: '#fff', position: 'sticky', top: 0, zIndex: 50 },
112
+ topbarLeft: { display: 'flex', alignItems: 'center', gap: '0.75rem' },
113
+ topbarRight: { position: 'relative' },
114
+ logoLink: { fontWeight: 800, fontSize: '1rem', color: '#7c3aed', textDecoration: 'none' },
115
+ appName: { fontSize: '0.85rem', fontWeight: 600, color: '#444' },
116
+ avatarBtn: { background: 'none', border: '2px solid #e5e5e5', borderRadius: '50%', padding: 0, cursor: 'pointer', width: 32, height: 32, overflow: 'hidden' },
117
+ avatar: { width: '100%', height: '100%', borderRadius: '50%' },
118
+ menu: { position: 'absolute', top: 40, right: 0, background: '#fff', border: '1px solid #e5e5e5', borderRadius: '0.75rem', boxShadow: '0 4px 20px rgba(0,0,0,0.1)', minWidth: 180, padding: '0.5rem 0', zIndex: 100 },
119
+ menuHeader: { padding: '0.5rem 1rem', borderBottom: '1px solid #f0f0f0', display: 'flex', alignItems: 'center', gap: '0.5rem', fontSize: '0.85rem' },
120
+ menuItem: { display: 'block', width: '100%', padding: '0.5rem 1rem', background: 'none', border: 'none', textAlign: 'left', fontSize: '0.85rem', cursor: 'pointer', color: '#333' },
121
+ proBadge: { fontSize: '0.6rem', fontWeight: 700, background: '#7c3aed', color: '#fff', padding: '0.1rem 0.4rem', borderRadius: '0.25rem' },
122
+ center: { minHeight: '100dvh', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '2rem' },
123
+ card: { maxWidth: 400, textAlign: 'center' },
124
+ heading: { fontSize: '1.5rem', fontWeight: 800, marginBottom: '0.5rem', color: '#111' },
125
+ muted: { color: '#666', fontSize: '0.9rem', marginBottom: '1rem' },
126
+ primaryBtn: { background: '#7c3aed', color: '#fff', border: 'none', padding: '0.75rem 2rem', borderRadius: '0.75rem', fontSize: '0.9rem', fontWeight: 700, cursor: 'pointer', marginTop: '0.5rem' },
127
+ ghostBtn: { background: 'none', color: '#666', border: 'none', padding: '0.5rem 1rem', fontSize: '0.8rem', cursor: 'pointer', marginTop: '0.5rem' },
128
+ main: { flex: 1, display: 'flex', flexDirection: 'column' },
129
+ };
130
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -4,6 +4,8 @@ export interface ProInitOptions {
4
4
  fasApiBase?: string;
5
5
  /** Defaults to https://api.proappstore.online (pro-tier backend). */
6
6
  proApiBase?: string;
7
+ /** Defaults to https://data-{appId}.proappstore.online (per-app data worker). */
8
+ dataApiBase?: string;
7
9
  }
8
10
  export type SubscriptionStatus = 'active' | 'past_due' | 'canceled' | 'incomplete';
9
11
  export interface Subscription {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proappstore/sdk",
3
- "version": "0.3.0",
3
+ "version": "1.1.0",
4
4
  "description": "Browser SDK for paid apps on proappstore.online — subscriptions, license keys, premium modules.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -10,6 +10,10 @@
10
10
  ".": {
11
11
  "types": "./dist/index.d.ts",
12
12
  "import": "./dist/index.js"
13
+ },
14
+ "./shell": {
15
+ "types": "./dist/shell.d.ts",
16
+ "import": "./dist/shell.js"
13
17
  }
14
18
  },
15
19
  "repository": {
@@ -26,9 +30,17 @@
26
30
  "typecheck": "tsc --noEmit"
27
31
  },
28
32
  "dependencies": {
29
- "@freeappstore/sdk": "^0.6.0"
33
+ "@freeappstore/sdk": "^0.5.0"
34
+ },
35
+ "peerDependencies": {
36
+ "react": "^18.0.0 || ^19.0.0"
37
+ },
38
+ "peerDependenciesMeta": {
39
+ "react": { "optional": true }
30
40
  },
31
41
  "devDependencies": {
42
+ "@types/react": "^19.0.0",
43
+ "react": "^19.0.0",
32
44
  "typescript": "^5.7.0"
33
45
  },
34
46
  "sideEffects": false