@proappstore/sdk 1.3.1 → 1.6.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/hooks.d.ts +64 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +110 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/maps.d.ts +42 -0
- package/dist/maps.d.ts.map +1 -0
- package/dist/maps.js +53 -0
- package/dist/maps.js.map +1 -0
- package/dist/storage.d.ts +8 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +12 -1
- package/dist/storage.js.map +1 -1
- package/package.json +5 -1
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ProAppStore } from './index.js';
|
|
2
|
+
import type { Subscription } from './types.js';
|
|
3
|
+
export type { User } from '@freeappstore/sdk';
|
|
4
|
+
/**
|
|
5
|
+
* Auth state + actions. The primary way apps interact with platform identity.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```tsx
|
|
9
|
+
* const { user, loading, signIn, signOut, deleteAccount } = useProAuth(app)
|
|
10
|
+
* if (loading) return <Spinner />
|
|
11
|
+
* if (!user) return <MySignInPage onSignIn={signIn} />
|
|
12
|
+
* return <MyApp user={user} onSignOut={signOut} />
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function useProAuth(app: ProAppStore): {
|
|
16
|
+
user: import("@freeappstore/sdk").User | null;
|
|
17
|
+
loading: boolean;
|
|
18
|
+
signIn: () => void;
|
|
19
|
+
signOut: () => void;
|
|
20
|
+
deleteAccount: () => Promise<void>;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Subscription state + actions. Check if user is subscribed, upgrade, manage billing.
|
|
24
|
+
*
|
|
25
|
+
* Usage:
|
|
26
|
+
* ```tsx
|
|
27
|
+
* const { subscription, isPro, loading, upgrade, manageBilling } = useProSubscription(app)
|
|
28
|
+
* if (!isPro) return <UpgradePrompt onUpgrade={upgrade} />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function useProSubscription(app: ProAppStore): {
|
|
32
|
+
subscription: Subscription | null;
|
|
33
|
+
isPro: boolean;
|
|
34
|
+
loading: boolean;
|
|
35
|
+
upgrade: (priceId?: string) => Promise<void>;
|
|
36
|
+
manageBilling: () => Promise<void>;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Combined auth + subscription gate. Returns the current gate state.
|
|
40
|
+
*
|
|
41
|
+
* Usage:
|
|
42
|
+
* ```tsx
|
|
43
|
+
* const { gate, user, subscription, signIn, upgrade } = useProGate(app)
|
|
44
|
+
* if (gate === 'loading') return <Spinner />
|
|
45
|
+
* if (gate === 'signed-out') return <SignInPage onSignIn={signIn} />
|
|
46
|
+
* if (gate === 'no-subscription') return <UpgradePage onUpgrade={upgrade} />
|
|
47
|
+
* // gate === 'ready' — user is signed in and subscribed
|
|
48
|
+
* return <MyApp user={user!} />
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function useProGate(app: ProAppStore, opts?: {
|
|
52
|
+
allowFree?: boolean;
|
|
53
|
+
}): {
|
|
54
|
+
gate: "loading" | "signed-out" | "no-subscription" | "ready";
|
|
55
|
+
user: import("@freeappstore/sdk").User | null;
|
|
56
|
+
subscription: Subscription | null;
|
|
57
|
+
isPro: boolean;
|
|
58
|
+
signIn: () => void;
|
|
59
|
+
signOut: () => void;
|
|
60
|
+
deleteAccount: () => Promise<void>;
|
|
61
|
+
upgrade: (priceId?: string) => Promise<void>;
|
|
62
|
+
manageBilling: () => Promise<void>;
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW;;;;;;EAuB1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW;;;;wBAiBJ,MAAM;;EAapD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;;;wBA5B5B,MAAM;;EAuDpD"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Auth state + actions. The primary way apps interact with platform identity.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```tsx
|
|
7
|
+
* const { user, loading, signIn, signOut, deleteAccount } = useProAuth(app)
|
|
8
|
+
* if (loading) return <Spinner />
|
|
9
|
+
* if (!user) return <MySignInPage onSignIn={signIn} />
|
|
10
|
+
* return <MyApp user={user} onSignOut={signOut} />
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export function useProAuth(app) {
|
|
14
|
+
const [user, setUser] = useState(app.auth.user);
|
|
15
|
+
const [loading, setLoading] = useState(true);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
app.auth.init().finally(() => setLoading(false));
|
|
18
|
+
return app.auth.onChange(setUser);
|
|
19
|
+
}, [app]);
|
|
20
|
+
const signIn = useCallback(() => app.auth.signIn(), [app]);
|
|
21
|
+
const signOut = useCallback(() => app.auth.signOut(), [app]);
|
|
22
|
+
const deleteAccount = useCallback(async () => {
|
|
23
|
+
try {
|
|
24
|
+
const keys = await app.kv.list();
|
|
25
|
+
for (const key of keys) {
|
|
26
|
+
await app.kv.delete(key).catch(() => { });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch { }
|
|
30
|
+
app.auth.signOut();
|
|
31
|
+
}, [app]);
|
|
32
|
+
return { user, loading, signIn, signOut, deleteAccount };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Subscription state + actions. Check if user is subscribed, upgrade, manage billing.
|
|
36
|
+
*
|
|
37
|
+
* Usage:
|
|
38
|
+
* ```tsx
|
|
39
|
+
* const { subscription, isPro, loading, upgrade, manageBilling } = useProSubscription(app)
|
|
40
|
+
* if (!isPro) return <UpgradePrompt onUpgrade={upgrade} />
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export function useProSubscription(app) {
|
|
44
|
+
const [subscription, setSubscription] = useState(null);
|
|
45
|
+
const [loading, setLoading] = useState(true);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!app.auth.token) {
|
|
48
|
+
setLoading(false);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
app.subscription.status()
|
|
52
|
+
.then(setSubscription)
|
|
53
|
+
.catch(() => { })
|
|
54
|
+
.finally(() => setLoading(false));
|
|
55
|
+
}, [app, app.auth.user]);
|
|
56
|
+
const isPro = subscription?.status === 'active';
|
|
57
|
+
const upgrade = useCallback(async (priceId) => {
|
|
58
|
+
await app.subscription.openCheckout({
|
|
59
|
+
priceId: priceId || 'price_pro_monthly',
|
|
60
|
+
successUrl: window.location.href + (window.location.href.includes('?') ? '&' : '?') + 'upgraded=1',
|
|
61
|
+
cancelUrl: window.location.href,
|
|
62
|
+
});
|
|
63
|
+
}, [app]);
|
|
64
|
+
const manageBilling = useCallback(async () => {
|
|
65
|
+
await app.subscription.openPortal(window.location.href);
|
|
66
|
+
}, [app]);
|
|
67
|
+
return { subscription, isPro, loading, upgrade, manageBilling };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Combined auth + subscription gate. Returns the current gate state.
|
|
71
|
+
*
|
|
72
|
+
* Usage:
|
|
73
|
+
* ```tsx
|
|
74
|
+
* const { gate, user, subscription, signIn, upgrade } = useProGate(app)
|
|
75
|
+
* if (gate === 'loading') return <Spinner />
|
|
76
|
+
* if (gate === 'signed-out') return <SignInPage onSignIn={signIn} />
|
|
77
|
+
* if (gate === 'no-subscription') return <UpgradePage onUpgrade={upgrade} />
|
|
78
|
+
* // gate === 'ready' — user is signed in and subscribed
|
|
79
|
+
* return <MyApp user={user!} />
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export function useProGate(app, opts) {
|
|
83
|
+
const auth = useProAuth(app);
|
|
84
|
+
const sub = useProSubscription(app);
|
|
85
|
+
let gate;
|
|
86
|
+
if (auth.loading || (auth.user && sub.loading)) {
|
|
87
|
+
gate = 'loading';
|
|
88
|
+
}
|
|
89
|
+
else if (!auth.user) {
|
|
90
|
+
gate = 'signed-out';
|
|
91
|
+
}
|
|
92
|
+
else if (!opts?.allowFree && !sub.isPro) {
|
|
93
|
+
gate = 'no-subscription';
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
gate = 'ready';
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
gate,
|
|
100
|
+
user: auth.user,
|
|
101
|
+
subscription: sub.subscription,
|
|
102
|
+
isPro: sub.isPro,
|
|
103
|
+
signIn: auth.signIn,
|
|
104
|
+
signOut: auth.signOut,
|
|
105
|
+
deleteAccount: auth.deleteAccount,
|
|
106
|
+
upgrade: sub.upgrade,
|
|
107
|
+
manageBilling: sub.manageBilling,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FreeAppStore } from '@freeappstore/sdk';
|
|
2
2
|
import { Database } from './db.js';
|
|
3
|
+
import { Maps } from './maps.js';
|
|
3
4
|
import { Storage } from './storage.js';
|
|
4
5
|
import { SubscriptionApi } from './subscription.js';
|
|
5
6
|
import { LicenseApi } from './license.js';
|
|
@@ -18,6 +19,7 @@ export declare class ProAppStore extends FreeAppStore {
|
|
|
18
19
|
readonly license: LicenseApi;
|
|
19
20
|
readonly db: Database;
|
|
20
21
|
readonly storage: Storage;
|
|
22
|
+
readonly maps: Maps;
|
|
21
23
|
constructor(opts: ProInitOptions);
|
|
22
24
|
}
|
|
23
25
|
/** Create a new ProAppStore SDK instance. Includes all free + pro features. */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,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,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEpF;;;;;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;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;
|
|
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,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,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,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEpF;;;;;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;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;gBAER,IAAI,EAAE,cAAc;CASjC;AAED,+EAA+E;AAC/E,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CAEzD"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FreeAppStore } from '@freeappstore/sdk';
|
|
2
2
|
import { Database } from './db.js';
|
|
3
|
+
import { Maps } from './maps.js';
|
|
3
4
|
import { Storage } from './storage.js';
|
|
4
5
|
import { SubscriptionApi } from './subscription.js';
|
|
5
6
|
import { LicenseApi } from './license.js';
|
|
@@ -14,6 +15,7 @@ export class ProAppStore extends FreeAppStore {
|
|
|
14
15
|
license;
|
|
15
16
|
db;
|
|
16
17
|
storage;
|
|
18
|
+
maps;
|
|
17
19
|
constructor(opts) {
|
|
18
20
|
super({ appId: opts.appId, ...(opts.fasApiBase && { apiBase: opts.fasApiBase }) });
|
|
19
21
|
const proApiBase = opts.proApiBase ?? 'https://api.proappstore.online';
|
|
@@ -21,6 +23,7 @@ export class ProAppStore extends FreeAppStore {
|
|
|
21
23
|
this.license = new LicenseApi(opts.appId, proApiBase, this.auth);
|
|
22
24
|
this.db = new Database(opts.appId, opts.dataApiBase ?? `https://data-${opts.appId}.proappstore.online`, this.auth);
|
|
23
25
|
this.storage = new Storage(opts.appId, proApiBase, this.auth);
|
|
26
|
+
this.maps = new Maps(proApiBase);
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
/** 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,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,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;IACb,OAAO,CAAU;
|
|
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,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,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;IACb,OAAO,CAAU;IACjB,IAAI,CAAO;IAEpB,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;QACnH,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,UAAU,OAAO,CAAC,IAAoB;IAC1C,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/maps.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps — geocoding, reverse geocoding, and map embed helpers.
|
|
3
|
+
* Backed by Nominatim (OpenStreetMap) proxied through the PAS API.
|
|
4
|
+
* No Google API keys needed.
|
|
5
|
+
*/
|
|
6
|
+
export interface GeoResult {
|
|
7
|
+
lat: number;
|
|
8
|
+
lng: number;
|
|
9
|
+
displayName: string;
|
|
10
|
+
address: Record<string, string>;
|
|
11
|
+
type: string;
|
|
12
|
+
importance: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ReverseResult {
|
|
15
|
+
lat: number;
|
|
16
|
+
lng: number;
|
|
17
|
+
displayName: string;
|
|
18
|
+
address: Record<string, string>;
|
|
19
|
+
}
|
|
20
|
+
export declare class Maps {
|
|
21
|
+
private readonly apiBase;
|
|
22
|
+
constructor(apiBase: string);
|
|
23
|
+
/** Convert an address string to coordinates. Returns up to `limit` results. */
|
|
24
|
+
geocode(query: string, limit?: number): Promise<GeoResult[]>;
|
|
25
|
+
/** Convert coordinates to an address. */
|
|
26
|
+
reverseGeocode(lat: number, lng: number): Promise<ReverseResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Get an OpenStreetMap embed URL for use in an iframe.
|
|
29
|
+
* No API key needed. Free forever.
|
|
30
|
+
*
|
|
31
|
+
* Usage: <iframe src={app.maps.embedUrl(lat, lng, zoom)} />
|
|
32
|
+
*/
|
|
33
|
+
embedUrl(lat: number, lng: number, zoom?: number): string;
|
|
34
|
+
/**
|
|
35
|
+
* Get a static map image URL (no JavaScript needed).
|
|
36
|
+
* Uses OpenStreetMap tile server.
|
|
37
|
+
*
|
|
38
|
+
* Usage: <img src={app.maps.staticUrl(lat, lng)} />
|
|
39
|
+
*/
|
|
40
|
+
staticUrl(lat: number, lng: number, zoom?: number): string;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=maps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maps.d.ts","sourceRoot":"","sources":["../src/maps.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,qBAAa,IAAI;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE5C,+EAA+E;IACzE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAY7D,yCAAyC;IACnC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAWtE;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM;IAIrD;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM;CAKvD"}
|
package/dist/maps.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps — geocoding, reverse geocoding, and map embed helpers.
|
|
3
|
+
* Backed by Nominatim (OpenStreetMap) proxied through the PAS API.
|
|
4
|
+
* No Google API keys needed.
|
|
5
|
+
*/
|
|
6
|
+
export class Maps {
|
|
7
|
+
apiBase;
|
|
8
|
+
constructor(apiBase) {
|
|
9
|
+
this.apiBase = apiBase;
|
|
10
|
+
}
|
|
11
|
+
/** Convert an address string to coordinates. Returns up to `limit` results. */
|
|
12
|
+
async geocode(query, limit = 5) {
|
|
13
|
+
const url = new URL(`${this.apiBase}/v1/maps/geocode`);
|
|
14
|
+
url.searchParams.set('q', query);
|
|
15
|
+
url.searchParams.set('limit', String(limit));
|
|
16
|
+
const response = await fetch(url.toString());
|
|
17
|
+
if (!response.ok)
|
|
18
|
+
throw new Error(`maps.geocode failed: ${response.status}`);
|
|
19
|
+
const data = (await response.json());
|
|
20
|
+
return data.results;
|
|
21
|
+
}
|
|
22
|
+
/** Convert coordinates to an address. */
|
|
23
|
+
async reverseGeocode(lat, lng) {
|
|
24
|
+
const url = new URL(`${this.apiBase}/v1/maps/reverse`);
|
|
25
|
+
url.searchParams.set('lat', String(lat));
|
|
26
|
+
url.searchParams.set('lng', String(lng));
|
|
27
|
+
const response = await fetch(url.toString());
|
|
28
|
+
if (!response.ok)
|
|
29
|
+
throw new Error(`maps.reverseGeocode failed: ${response.status}`);
|
|
30
|
+
return (await response.json());
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get an OpenStreetMap embed URL for use in an iframe.
|
|
34
|
+
* No API key needed. Free forever.
|
|
35
|
+
*
|
|
36
|
+
* Usage: <iframe src={app.maps.embedUrl(lat, lng, zoom)} />
|
|
37
|
+
*/
|
|
38
|
+
embedUrl(lat, lng, zoom = 15) {
|
|
39
|
+
return `https://www.openstreetmap.org/export/embed.html?bbox=${lng - 0.01},${lat - 0.01},${lng + 0.01},${lat + 0.01}&layer=mapnik&marker=${lat},${lng}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get a static map image URL (no JavaScript needed).
|
|
43
|
+
* Uses OpenStreetMap tile server.
|
|
44
|
+
*
|
|
45
|
+
* Usage: <img src={app.maps.staticUrl(lat, lng)} />
|
|
46
|
+
*/
|
|
47
|
+
staticUrl(lat, lng, zoom = 15) {
|
|
48
|
+
const x = Math.floor(((lng + 180) / 360) * Math.pow(2, zoom));
|
|
49
|
+
const y = Math.floor((1 - Math.log(Math.tan((lat * Math.PI) / 180) + 1 / Math.cos((lat * Math.PI) / 180)) / Math.PI) / 2 * Math.pow(2, zoom));
|
|
50
|
+
return `https://tile.openstreetmap.org/${zoom}/${x}/${y}.png`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=maps.js.map
|
package/dist/maps.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maps.js","sourceRoot":"","sources":["../src/maps.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,MAAM,OAAO,IAAI;IACc;IAA7B,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEhD,+EAA+E;IAC/E,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC;QACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAE7E,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6B,CAAC;QACjE,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,GAAW;QAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC;QACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAEpF,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,GAAW,EAAE,GAAW,EAAE,IAAI,GAAG,EAAE;QAC1C,OAAO,wDAAwD,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1J,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,GAAW,EAAE,GAAW,EAAE,IAAI,GAAG,EAAE;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9I,OAAO,kCAAkC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAChE,CAAC;CACF"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -26,7 +26,14 @@ export declare class Storage {
|
|
|
26
26
|
upload(path: string, data: Blob | ArrayBuffer | Uint8Array, contentType?: string): Promise<UploadResult>;
|
|
27
27
|
/** Download a file. Returns the Response (use .blob(), .arrayBuffer(), etc.). */
|
|
28
28
|
download(path: string): Promise<Response>;
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Upload a public file. Anyone can view it without auth (for profile pics, event photos, etc.).
|
|
31
|
+
* Stored under the _public/ prefix. Returns a public URL usable in <img src>.
|
|
32
|
+
*/
|
|
33
|
+
uploadPublic(path: string, data: Blob | ArrayBuffer | Uint8Array, contentType?: string): Promise<UploadResult>;
|
|
34
|
+
/** Get a public URL for a file (no auth needed, usable in <img src>). File must have been uploaded with uploadPublic(). */
|
|
35
|
+
publicUrl(path: string): string;
|
|
36
|
+
/** Get a private URL for a file (requires auth header). */
|
|
30
37
|
url(path: string): string;
|
|
31
38
|
/** List all files for the current user in this app. */
|
|
32
39
|
list(): Promise<FileInfo[]>;
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB,IAAI,IAAI,CAAC;CAC5B;AAED,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,OAAO;IAEhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ;IAGjC,kEAAkE;IAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0B9G,iFAAiF;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmB/C,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB,IAAI,IAAI,CAAC;CAC5B;AAED,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,OAAO;IAEhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ;IAGjC,kEAAkE;IAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0B9G,iFAAiF;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmB/C;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIpH,2HAA2H;IAC3H,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,2DAA2D;IAC3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIzB,uDAAuD;IACjD,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAmBjC,qBAAqB;IACf,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB1C"}
|
package/dist/storage.js
CHANGED
|
@@ -54,7 +54,18 @@ export class Storage {
|
|
|
54
54
|
throw new Error(`storage.download failed: ${response.status}`);
|
|
55
55
|
return response;
|
|
56
56
|
}
|
|
57
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* Upload a public file. Anyone can view it without auth (for profile pics, event photos, etc.).
|
|
59
|
+
* Stored under the _public/ prefix. Returns a public URL usable in <img src>.
|
|
60
|
+
*/
|
|
61
|
+
async uploadPublic(path, data, contentType) {
|
|
62
|
+
return this.upload(`_public/${path}`, data, contentType);
|
|
63
|
+
}
|
|
64
|
+
/** Get a public URL for a file (no auth needed, usable in <img src>). File must have been uploaded with uploadPublic(). */
|
|
65
|
+
publicUrl(path) {
|
|
66
|
+
return `${this.apiBase}/v1/apps/${encodeURIComponent(this.appId)}/public/${path}`;
|
|
67
|
+
}
|
|
68
|
+
/** Get a private URL for a file (requires auth header). */
|
|
58
69
|
url(path) {
|
|
59
70
|
return `${this.apiBase}/v1/apps/${encodeURIComponent(this.appId)}/storage/${path}`;
|
|
60
71
|
}
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,MAAM,OAAO,OAAO;IAEC;IACA;IACA;IAHnB,YACmB,KAAa,EACb,OAAe,EACf,IAAc;QAFd,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAU;IAC9B,CAAC;IAEJ,kEAAkE;IAClE,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,IAAqC,EAAE,WAAoB;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,YAAY,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;QACxF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,WAAW,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC;aAC/F;YACD,IAAI,EAAE,IAAgB;SACvB,CAAC,CAAC;QAEH,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;YACnC,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;IACjD,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,YAAY,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;QACxF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;SAC9C,CAAC,CAAC;QAEH,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,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proappstore/sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.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",
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
"./shell": {
|
|
15
15
|
"types": "./dist/shell.d.ts",
|
|
16
16
|
"import": "./dist/shell.js"
|
|
17
|
+
},
|
|
18
|
+
"./hooks": {
|
|
19
|
+
"types": "./dist/hooks.d.ts",
|
|
20
|
+
"import": "./dist/hooks.js"
|
|
17
21
|
}
|
|
18
22
|
},
|
|
19
23
|
"repository": {
|