@thewhateverapp/platform 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +223 -0
- package/dist/ai/mock.d.ts +14 -0
- package/dist/ai/mock.d.ts.map +1 -0
- package/dist/ai/mock.js +38 -0
- package/dist/ai/mock.js.map +1 -0
- package/dist/ai/production.d.ts +17 -0
- package/dist/ai/production.d.ts.map +1 -0
- package/dist/ai/production.js +41 -0
- package/dist/ai/production.js.map +1 -0
- package/dist/analytics/client.d.ts +21 -0
- package/dist/analytics/client.d.ts.map +1 -0
- package/dist/analytics/client.js +60 -0
- package/dist/analytics/client.js.map +1 -0
- package/dist/assets/client.d.ts +23 -0
- package/dist/assets/client.d.ts.map +1 -0
- package/dist/assets/client.js +105 -0
- package/dist/assets/client.js.map +1 -0
- package/dist/auth/client.d.ts +20 -0
- package/dist/auth/client.d.ts.map +1 -0
- package/dist/auth/client.js +53 -0
- package/dist/auth/client.js.map +1 -0
- package/dist/auth/types.d.ts +50 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +5 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/db/mock.d.ts +43 -0
- package/dist/db/mock.d.ts.map +1 -0
- package/dist/db/mock.js +343 -0
- package/dist/db/mock.js.map +1 -0
- package/dist/db/production.d.ts +16 -0
- package/dist/db/production.d.ts.map +1 -0
- package/dist/db/production.js +77 -0
- package/dist/db/production.js.map +1 -0
- package/dist/edge/database/index.d.ts +46 -0
- package/dist/edge/database/index.d.ts.map +1 -0
- package/dist/edge/database/index.js +82 -0
- package/dist/edge/database/index.js.map +1 -0
- package/dist/edge/database/providers/flex-db.d.ts +22 -0
- package/dist/edge/database/providers/flex-db.d.ts.map +1 -0
- package/dist/edge/database/providers/flex-db.js +351 -0
- package/dist/edge/database/providers/flex-db.js.map +1 -0
- package/dist/edge/database/providers/index.d.ts +7 -0
- package/dist/edge/database/providers/index.d.ts.map +1 -0
- package/dist/edge/database/providers/index.js +11 -0
- package/dist/edge/database/providers/index.js.map +1 -0
- package/dist/edge/database/types.d.ts +148 -0
- package/dist/edge/database/types.d.ts.map +1 -0
- package/dist/edge/database/types.js +8 -0
- package/dist/edge/database/types.js.map +1 -0
- package/dist/edge/index.d.ts +12 -0
- package/dist/edge/index.d.ts.map +1 -0
- package/dist/edge/index.js +12 -0
- package/dist/edge/index.js.map +1 -0
- package/dist/edge/kv/index.d.ts +50 -0
- package/dist/edge/kv/index.d.ts.map +1 -0
- package/dist/edge/kv/index.js +83 -0
- package/dist/edge/kv/index.js.map +1 -0
- package/dist/edge/kv/providers/cloudflare-kv.d.ts +31 -0
- package/dist/edge/kv/providers/cloudflare-kv.d.ts.map +1 -0
- package/dist/edge/kv/providers/cloudflare-kv.js +115 -0
- package/dist/edge/kv/providers/cloudflare-kv.js.map +1 -0
- package/dist/edge/kv/providers/index.d.ts +7 -0
- package/dist/edge/kv/providers/index.d.ts.map +1 -0
- package/dist/edge/kv/providers/index.js +10 -0
- package/dist/edge/kv/providers/index.js.map +1 -0
- package/dist/edge/kv/types.d.ts +155 -0
- package/dist/edge/kv/types.d.ts.map +1 -0
- package/dist/edge/kv/types.js +8 -0
- package/dist/edge/kv/types.js.map +1 -0
- package/dist/edge/storage/index.d.ts +50 -0
- package/dist/edge/storage/index.d.ts.map +1 -0
- package/dist/edge/storage/index.js +83 -0
- package/dist/edge/storage/index.js.map +1 -0
- package/dist/edge/storage/providers/cloudflare-r2.d.ts +28 -0
- package/dist/edge/storage/providers/cloudflare-r2.d.ts.map +1 -0
- package/dist/edge/storage/providers/cloudflare-r2.js +178 -0
- package/dist/edge/storage/providers/cloudflare-r2.js.map +1 -0
- package/dist/edge/storage/providers/index.d.ts +7 -0
- package/dist/edge/storage/providers/index.d.ts.map +1 -0
- package/dist/edge/storage/providers/index.js +10 -0
- package/dist/edge/storage/providers/index.js.map +1 -0
- package/dist/edge/storage/types.d.ts +305 -0
- package/dist/edge/storage/types.d.ts.map +1 -0
- package/dist/edge/storage/types.js +8 -0
- package/dist/edge/storage/types.js.map +1 -0
- package/dist/identity/client.d.ts +20 -0
- package/dist/identity/client.d.ts.map +1 -0
- package/dist/identity/client.js +40 -0
- package/dist/identity/client.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications/client.d.ts +20 -0
- package/dist/notifications/client.d.ts.map +1 -0
- package/dist/notifications/client.js +38 -0
- package/dist/notifications/client.js.map +1 -0
- package/dist/payments/client.d.ts +21 -0
- package/dist/payments/client.d.ts.map +1 -0
- package/dist/payments/client.js +52 -0
- package/dist/payments/client.js.map +1 -0
- package/dist/platform.d.ts +65 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +254 -0
- package/dist/platform.js.map +1 -0
- package/dist/social/client.d.ts +29 -0
- package/dist/social/client.d.ts.map +1 -0
- package/dist/social/client.js +83 -0
- package/dist/social/client.js.map +1 -0
- package/dist/storage/mock.d.ts +27 -0
- package/dist/storage/mock.d.ts.map +1 -0
- package/dist/storage/mock.js +102 -0
- package/dist/storage/mock.js.map +1 -0
- package/dist/storage/production.d.ts +28 -0
- package/dist/storage/production.d.ts.map +1 -0
- package/dist/storage/production.js +75 -0
- package/dist/storage/production.js.map +1 -0
- package/dist/types.d.ts +399 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/identity/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EACZ,QAAQ,EACR,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAY,YAAW,eAAe;IACrC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;YAE5B,OAAO;IAsBf,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAI1E,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIjD,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;CAG5D"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity service client
|
|
3
|
+
*/
|
|
4
|
+
export class IdentityAPI {
|
|
5
|
+
config;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
async request(method, path, body) {
|
|
10
|
+
const response = await fetch(`${this.config.apiUrl}/identity${path}`, {
|
|
11
|
+
method,
|
|
12
|
+
headers: {
|
|
13
|
+
'Content-Type': 'application/json',
|
|
14
|
+
'X-API-Key': this.config.apiKey,
|
|
15
|
+
},
|
|
16
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
const error = await response.json().catch(() => ({}));
|
|
20
|
+
throw new Error(error.error || `Identity error: ${response.statusText}`);
|
|
21
|
+
}
|
|
22
|
+
return response.json();
|
|
23
|
+
}
|
|
24
|
+
async resolve(request) {
|
|
25
|
+
return this.request('POST', '/resolve', request);
|
|
26
|
+
}
|
|
27
|
+
async link(userId, identity) {
|
|
28
|
+
await this.request('POST', '/link', { userId, ...identity });
|
|
29
|
+
}
|
|
30
|
+
async unlink(userId, provider) {
|
|
31
|
+
await this.request('POST', '/unlink', { userId, provider });
|
|
32
|
+
}
|
|
33
|
+
async getUser(userId) {
|
|
34
|
+
return this.request('GET', `/user/${userId}`);
|
|
35
|
+
}
|
|
36
|
+
async lookup(identity) {
|
|
37
|
+
return this.request('POST', '/lookup', identity);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/identity/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAEtC,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAU;QAEV,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,YAAY,IAAI,EAAE,EAAE;YACpE,MAAM;YACN,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;aAChC;YACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAuB,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,mBAAmB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA+B;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,QAAsB;QAC/C,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,QAAgB;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAsB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @thewhateverapp/platform - Universal SDK for The Whatever App
|
|
3
|
+
*
|
|
4
|
+
* Provides domain-specific services for apps on The Whatever App platform.
|
|
5
|
+
*/
|
|
6
|
+
export { createPlatform, WhateverPlatform } from './platform';
|
|
7
|
+
export type * from './types';
|
|
8
|
+
export { ProductionStorage } from './storage/production';
|
|
9
|
+
export { MockStorage } from './storage/mock';
|
|
10
|
+
export { ProductionDB } from './db/production';
|
|
11
|
+
export { MockDB } from './db/mock';
|
|
12
|
+
export { ProductionAI } from './ai/production';
|
|
13
|
+
export { MockAI } from './ai/mock';
|
|
14
|
+
export { AnalyticsAPI } from './analytics/client';
|
|
15
|
+
export { IdentityAPI } from './identity/client';
|
|
16
|
+
export { AssetsAPI } from './assets/client';
|
|
17
|
+
export { PaymentsAPI } from './payments/client';
|
|
18
|
+
export { NotificationsAPI } from './notifications/client';
|
|
19
|
+
export { SocialAPI } from './social/client';
|
|
20
|
+
export { AuthAPI } from './auth/client';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9D,mBAAmB,SAAS,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @thewhateverapp/platform - Universal SDK for The Whatever App
|
|
3
|
+
*
|
|
4
|
+
* Provides domain-specific services for apps on The Whatever App platform.
|
|
5
|
+
*/
|
|
6
|
+
// Main exports
|
|
7
|
+
export { createPlatform, WhateverPlatform } from './platform';
|
|
8
|
+
// Service exports
|
|
9
|
+
export { ProductionStorage } from './storage/production';
|
|
10
|
+
export { MockStorage } from './storage/mock';
|
|
11
|
+
export { ProductionDB } from './db/production';
|
|
12
|
+
export { MockDB } from './db/mock';
|
|
13
|
+
export { ProductionAI } from './ai/production';
|
|
14
|
+
export { MockAI } from './ai/mock';
|
|
15
|
+
export { AnalyticsAPI } from './analytics/client';
|
|
16
|
+
export { IdentityAPI } from './identity/client';
|
|
17
|
+
export { AssetsAPI } from './assets/client';
|
|
18
|
+
export { PaymentsAPI } from './payments/client';
|
|
19
|
+
export { NotificationsAPI } from './notifications/client';
|
|
20
|
+
export { SocialAPI } from './social/client';
|
|
21
|
+
export { AuthAPI } from './auth/client';
|
|
22
|
+
// Edge runtime exports (for user-generated apps)
|
|
23
|
+
// Note: Import from '@thewhateverapp/platform/edge' to use edge APIs
|
|
24
|
+
// This avoids type conflicts with the main platform types
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9D,kBAAkB;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,iDAAiD;AACjD,qEAAqE;AACrE,0DAA0D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notifications service client
|
|
3
|
+
*/
|
|
4
|
+
import type { NotificationsService, SendNotificationRequest, ScheduleNotificationRequest, NotificationResult, ScheduledNotification } from '../types';
|
|
5
|
+
interface NotificationsConfig {
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
apiKey: string;
|
|
8
|
+
appId: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class NotificationsAPI implements NotificationsService {
|
|
11
|
+
private config;
|
|
12
|
+
constructor(config: NotificationsConfig);
|
|
13
|
+
private request;
|
|
14
|
+
send(request: SendNotificationRequest): Promise<NotificationResult>;
|
|
15
|
+
schedule(request: ScheduleNotificationRequest): Promise<ScheduledNotification>;
|
|
16
|
+
cancel(notificationId: string): Promise<void>;
|
|
17
|
+
getScheduled(userId: string): Promise<ScheduledNotification[]>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/notifications/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAElB,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,gBAAiB,YAAW,oBAAoB;IAC/C,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;YAEjC,OAAO;IAuBf,IAAI,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInE,QAAQ,CACZ,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC;IAI3B,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;CAGrE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notifications service client
|
|
3
|
+
*/
|
|
4
|
+
export class NotificationsAPI {
|
|
5
|
+
config;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
async request(method, path, body) {
|
|
10
|
+
const response = await fetch(`${this.config.apiUrl}/notifications${path}`, {
|
|
11
|
+
method,
|
|
12
|
+
headers: {
|
|
13
|
+
'Content-Type': 'application/json',
|
|
14
|
+
'X-API-Key': this.config.apiKey,
|
|
15
|
+
'X-App-ID': this.config.appId,
|
|
16
|
+
},
|
|
17
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
18
|
+
});
|
|
19
|
+
if (!response.ok) {
|
|
20
|
+
const error = await response.json().catch(() => ({}));
|
|
21
|
+
throw new Error(error.error || `Notifications error: ${response.statusText}`);
|
|
22
|
+
}
|
|
23
|
+
return response.json();
|
|
24
|
+
}
|
|
25
|
+
async send(request) {
|
|
26
|
+
return this.request('POST', '/send', request);
|
|
27
|
+
}
|
|
28
|
+
async schedule(request) {
|
|
29
|
+
return this.request('POST', '/schedule', request);
|
|
30
|
+
}
|
|
31
|
+
async cancel(notificationId) {
|
|
32
|
+
await this.request('DELETE', `/${notificationId}`);
|
|
33
|
+
}
|
|
34
|
+
async getScheduled(userId) {
|
|
35
|
+
return this.request('GET', `/scheduled/${userId}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/notifications/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,MAA2B;QAA3B,WAAM,GAAN,MAAM,CAAqB;IAAG,CAAC;IAE3C,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAU;QAEV,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,iBAAiB,IAAI,EAAE,EAAE;YACzE,MAAM;YACN,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC/B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;aAC9B;YACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAuB,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,wBAAwB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAgC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAoC;QAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,cAAsB;QACjC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,cAAc,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Payments service client
|
|
3
|
+
*/
|
|
4
|
+
import type { PaymentsService, CreateCheckoutRequest, CheckoutSession, PaymentStatus, Transaction, TransactionQueryOptions, RefundResult, CryptoPaymentRequest, CryptoPayment } from '../types';
|
|
5
|
+
interface PaymentsConfig {
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
apiKey: string;
|
|
8
|
+
appId: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class PaymentsAPI implements PaymentsService {
|
|
11
|
+
private config;
|
|
12
|
+
constructor(config: PaymentsConfig);
|
|
13
|
+
private request;
|
|
14
|
+
createCheckout(request: CreateCheckoutRequest): Promise<CheckoutSession>;
|
|
15
|
+
getStatus(sessionId: string): Promise<PaymentStatus>;
|
|
16
|
+
getTransactions(options?: TransactionQueryOptions): Promise<Transaction[]>;
|
|
17
|
+
refund(transactionId: string, amount?: number): Promise<RefundResult>;
|
|
18
|
+
createCryptoPayment(request: CryptoPaymentRequest): Promise<CryptoPayment>;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/payments/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,WAAW,EACX,uBAAuB,EACvB,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,WAAY,YAAW,eAAe;IACrC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;YAE5B,OAAO;IAuBf,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAIxE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,eAAe,CACnB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,WAAW,EAAE,CAAC;IAWnB,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIrE,mBAAmB,CACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,aAAa,CAAC;CAG1B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Payments service client
|
|
3
|
+
*/
|
|
4
|
+
export class PaymentsAPI {
|
|
5
|
+
config;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
async request(method, path, body) {
|
|
10
|
+
const response = await fetch(`${this.config.apiUrl}/payments${path}`, {
|
|
11
|
+
method,
|
|
12
|
+
headers: {
|
|
13
|
+
'Content-Type': 'application/json',
|
|
14
|
+
'X-API-Key': this.config.apiKey,
|
|
15
|
+
'X-App-ID': this.config.appId,
|
|
16
|
+
},
|
|
17
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
18
|
+
});
|
|
19
|
+
if (!response.ok) {
|
|
20
|
+
const error = await response.json().catch(() => ({}));
|
|
21
|
+
throw new Error(error.error || `Payments error: ${response.statusText}`);
|
|
22
|
+
}
|
|
23
|
+
return response.json();
|
|
24
|
+
}
|
|
25
|
+
async createCheckout(request) {
|
|
26
|
+
return this.request('POST', '/checkout', request);
|
|
27
|
+
}
|
|
28
|
+
async getStatus(sessionId) {
|
|
29
|
+
return this.request('GET', `/status/${sessionId}`);
|
|
30
|
+
}
|
|
31
|
+
async getTransactions(options) {
|
|
32
|
+
const params = new URLSearchParams();
|
|
33
|
+
if (options?.userId)
|
|
34
|
+
params.set('userId', options.userId);
|
|
35
|
+
if (options?.status)
|
|
36
|
+
params.set('status', options.status);
|
|
37
|
+
if (options?.startDate)
|
|
38
|
+
params.set('startDate', options.startDate);
|
|
39
|
+
if (options?.endDate)
|
|
40
|
+
params.set('endDate', options.endDate);
|
|
41
|
+
if (options?.limit)
|
|
42
|
+
params.set('limit', options.limit.toString());
|
|
43
|
+
return this.request('GET', `/transactions?${params.toString()}`);
|
|
44
|
+
}
|
|
45
|
+
async refund(transactionId, amount) {
|
|
46
|
+
return this.request('POST', `/refund`, { transactionId, amount });
|
|
47
|
+
}
|
|
48
|
+
async createCryptoPayment(request) {
|
|
49
|
+
return this.request('POST', '/crypto', request);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/payments/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAEtC,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAU;QAEV,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,YAAY,IAAI,EAAE,EAAE;YACpE,MAAM;YACN,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC/B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;aAC9B;YACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAuB,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,mBAAmB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAA8B;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,OAAiC;QAEjC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,EAAE,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,OAAO,EAAE,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,OAAO,EAAE,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAElE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,aAAqB,EAAE,MAAe;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,OAA6B;QAE7B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main platform container that manages all services
|
|
3
|
+
*/
|
|
4
|
+
import type { PlatformContext, PlatformOptions, PlatformServices, StorageService, DatabaseService, AIService, AnalyticsService, IdentityService, AssetsService, SocialService } from './types';
|
|
5
|
+
export declare class WhateverPlatform {
|
|
6
|
+
private context;
|
|
7
|
+
private options;
|
|
8
|
+
private services;
|
|
9
|
+
private debug;
|
|
10
|
+
constructor(context: PlatformContext, options?: PlatformOptions);
|
|
11
|
+
private initializeServices;
|
|
12
|
+
/**
|
|
13
|
+
* Get all available services
|
|
14
|
+
*/
|
|
15
|
+
getServices(): PlatformServices;
|
|
16
|
+
/**
|
|
17
|
+
* Get storage service (always available)
|
|
18
|
+
*/
|
|
19
|
+
get storage(): StorageService;
|
|
20
|
+
/**
|
|
21
|
+
* Get database service
|
|
22
|
+
*/
|
|
23
|
+
get db(): DatabaseService;
|
|
24
|
+
/**
|
|
25
|
+
* Get AI service
|
|
26
|
+
*/
|
|
27
|
+
get ai(): AIService;
|
|
28
|
+
/**
|
|
29
|
+
* Get analytics service
|
|
30
|
+
*/
|
|
31
|
+
get analytics(): AnalyticsService;
|
|
32
|
+
/**
|
|
33
|
+
* Get identity service
|
|
34
|
+
*/
|
|
35
|
+
get identity(): IdentityService;
|
|
36
|
+
/**
|
|
37
|
+
* Get assets service
|
|
38
|
+
*/
|
|
39
|
+
get assets(): AssetsService;
|
|
40
|
+
/**
|
|
41
|
+
* Get social service
|
|
42
|
+
*/
|
|
43
|
+
get social(): SocialService;
|
|
44
|
+
/**
|
|
45
|
+
* Detect if we're running in mock mode
|
|
46
|
+
*/
|
|
47
|
+
private detectMockMode;
|
|
48
|
+
/**
|
|
49
|
+
* Extract app ID from environment or request
|
|
50
|
+
*/
|
|
51
|
+
private extractAppId;
|
|
52
|
+
/**
|
|
53
|
+
* Get platform API URL
|
|
54
|
+
*/
|
|
55
|
+
private getApiUrl;
|
|
56
|
+
/**
|
|
57
|
+
* Debug logging
|
|
58
|
+
*/
|
|
59
|
+
private log;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Factory function to create platform instance
|
|
63
|
+
*/
|
|
64
|
+
export declare function createPlatform(context: PlatformContext, options?: PlatformOptions): WhateverPlatform;
|
|
65
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EAIb,aAAa,EACd,MAAM,SAAS,CAAC;AAgBjB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,EAAE,eAAe,EAAE,OAAO,GAAE,eAAoB;IAQnE,OAAO,CAAC,kBAAkB;IA2F1B;;OAEG;IACI,WAAW,IAAI,gBAAgB;IAItC;;OAEG;IACH,IAAW,OAAO,IAAI,cAAc,CAKnC;IAED;;OAEG;IACH,IAAW,EAAE,IAAI,eAAe,CAK/B;IAED;;OAEG;IACH,IAAW,EAAE,IAAI,SAAS,CAKzB;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,gBAAgB,CAOvC;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,eAAe,CAKrC;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,aAAa,CAOjC;IA4BD;;OAEG;IACH,IAAW,MAAM,IAAI,aAAa,CAKjC;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,eAAoB,GAC5B,gBAAgB,CAElB"}
|
package/dist/platform.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main platform container that manages all services
|
|
3
|
+
*/
|
|
4
|
+
import { ProductionStorage } from './storage/production';
|
|
5
|
+
import { MockStorage } from './storage/mock';
|
|
6
|
+
import { ProductionDB } from './db/production';
|
|
7
|
+
import { MockDB } from './db/mock';
|
|
8
|
+
import { ProductionAI } from './ai/production';
|
|
9
|
+
import { MockAI } from './ai/mock';
|
|
10
|
+
import { AnalyticsAPI } from './analytics/client';
|
|
11
|
+
import { IdentityAPI } from './identity/client';
|
|
12
|
+
import { AssetsAPI } from './assets/client';
|
|
13
|
+
// FEATURE GATED - Not available in initial release
|
|
14
|
+
// import { PaymentsAPI } from './payments/client';
|
|
15
|
+
// import { NotificationsAPI } from './notifications/client';
|
|
16
|
+
import { SocialAPI } from './social/client';
|
|
17
|
+
export class WhateverPlatform {
|
|
18
|
+
context;
|
|
19
|
+
options;
|
|
20
|
+
services = {};
|
|
21
|
+
debug;
|
|
22
|
+
constructor(context, options = {}) {
|
|
23
|
+
this.context = context;
|
|
24
|
+
this.options = options;
|
|
25
|
+
this.debug = options.debug || false;
|
|
26
|
+
this.initializeServices();
|
|
27
|
+
}
|
|
28
|
+
initializeServices() {
|
|
29
|
+
const isMock = this.options.mock || this.detectMockMode();
|
|
30
|
+
const apiKey = this.options.apiKey || this.context.env.PLATFORM_API_KEY;
|
|
31
|
+
const appId = this.options.appId || this.context.env.APP_ID || this.extractAppId();
|
|
32
|
+
this.log('Initializing services', { isMock, appId, hasApiKey: !!apiKey });
|
|
33
|
+
// Storage - always initialized
|
|
34
|
+
this.services.storage = isMock
|
|
35
|
+
? new MockStorage({ debug: this.debug })
|
|
36
|
+
: new ProductionStorage({
|
|
37
|
+
namespace: this.context.env.STORAGE_NAMESPACE,
|
|
38
|
+
appId,
|
|
39
|
+
});
|
|
40
|
+
// Database - if app ID available
|
|
41
|
+
if (appId) {
|
|
42
|
+
this.services.db = isMock
|
|
43
|
+
? new MockDB({ debug: this.debug })
|
|
44
|
+
: new ProductionDB({
|
|
45
|
+
apiUrl: this.getApiUrl(),
|
|
46
|
+
appId,
|
|
47
|
+
apiKey,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// AI Service - if API key available
|
|
51
|
+
if (apiKey || isMock) {
|
|
52
|
+
this.services.ai = isMock
|
|
53
|
+
? new MockAI({ debug: this.debug })
|
|
54
|
+
: new ProductionAI({
|
|
55
|
+
apiUrl: this.getApiUrl(),
|
|
56
|
+
apiKey,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// Analytics - if API key available
|
|
60
|
+
if (apiKey && appId) {
|
|
61
|
+
this.services.analytics = new AnalyticsAPI({
|
|
62
|
+
apiUrl: this.getApiUrl(),
|
|
63
|
+
apiKey,
|
|
64
|
+
appId,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Identity - if API key available
|
|
68
|
+
if (apiKey) {
|
|
69
|
+
this.services.identity = new IdentityAPI({
|
|
70
|
+
apiUrl: this.getApiUrl(),
|
|
71
|
+
apiKey,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// Assets - if API key available
|
|
75
|
+
if (apiKey && appId) {
|
|
76
|
+
this.services.assets = new AssetsAPI({
|
|
77
|
+
apiUrl: this.getApiUrl(),
|
|
78
|
+
apiKey,
|
|
79
|
+
appId,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// FEATURE GATED - Not available in initial release
|
|
83
|
+
// // Payments - if API key available
|
|
84
|
+
// if (apiKey && appId) {
|
|
85
|
+
// this.services.payments = new PaymentsAPI({
|
|
86
|
+
// apiUrl: this.getApiUrl(),
|
|
87
|
+
// apiKey,
|
|
88
|
+
// appId,
|
|
89
|
+
// });
|
|
90
|
+
// }
|
|
91
|
+
// FEATURE GATED - Not available in initial release
|
|
92
|
+
// // Notifications - if API key available
|
|
93
|
+
// if (apiKey && appId) {
|
|
94
|
+
// this.services.notifications = new NotificationsAPI({
|
|
95
|
+
// apiUrl: this.getApiUrl(),
|
|
96
|
+
// apiKey,
|
|
97
|
+
// appId,
|
|
98
|
+
// });
|
|
99
|
+
// }
|
|
100
|
+
// Social - if API key available
|
|
101
|
+
if (apiKey) {
|
|
102
|
+
this.services.social = new SocialAPI({
|
|
103
|
+
apiUrl: this.getApiUrl(),
|
|
104
|
+
apiKey,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get all available services
|
|
110
|
+
*/
|
|
111
|
+
getServices() {
|
|
112
|
+
return this.services;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get storage service (always available)
|
|
116
|
+
*/
|
|
117
|
+
get storage() {
|
|
118
|
+
if (!this.services.storage) {
|
|
119
|
+
throw new Error('Storage service not initialized');
|
|
120
|
+
}
|
|
121
|
+
return this.services.storage;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get database service
|
|
125
|
+
*/
|
|
126
|
+
get db() {
|
|
127
|
+
if (!this.services.db) {
|
|
128
|
+
throw new Error('Database service not initialized. Ensure APP_ID is set.');
|
|
129
|
+
}
|
|
130
|
+
return this.services.db;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get AI service
|
|
134
|
+
*/
|
|
135
|
+
get ai() {
|
|
136
|
+
if (!this.services.ai) {
|
|
137
|
+
throw new Error('AI service not initialized. Ensure PLATFORM_API_KEY is set.');
|
|
138
|
+
}
|
|
139
|
+
return this.services.ai;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get analytics service
|
|
143
|
+
*/
|
|
144
|
+
get analytics() {
|
|
145
|
+
if (!this.services.analytics) {
|
|
146
|
+
throw new Error('Analytics service not initialized. Ensure PLATFORM_API_KEY and APP_ID are set.');
|
|
147
|
+
}
|
|
148
|
+
return this.services.analytics;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get identity service
|
|
152
|
+
*/
|
|
153
|
+
get identity() {
|
|
154
|
+
if (!this.services.identity) {
|
|
155
|
+
throw new Error('Identity service not initialized. Ensure PLATFORM_API_KEY is set.');
|
|
156
|
+
}
|
|
157
|
+
return this.services.identity;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get assets service
|
|
161
|
+
*/
|
|
162
|
+
get assets() {
|
|
163
|
+
if (!this.services.assets) {
|
|
164
|
+
throw new Error('Assets service not initialized. Ensure PLATFORM_API_KEY and APP_ID are set.');
|
|
165
|
+
}
|
|
166
|
+
return this.services.assets;
|
|
167
|
+
}
|
|
168
|
+
// FEATURE GATED - Not available in initial release
|
|
169
|
+
// /**
|
|
170
|
+
// * Get payments service
|
|
171
|
+
// */
|
|
172
|
+
// public get payments(): PaymentsService {
|
|
173
|
+
// if (!this.services.payments) {
|
|
174
|
+
// throw new Error(
|
|
175
|
+
// 'Payments service not initialized. Ensure PLATFORM_API_KEY and APP_ID are set.'
|
|
176
|
+
// );
|
|
177
|
+
// }
|
|
178
|
+
// return this.services.payments;
|
|
179
|
+
// }
|
|
180
|
+
// FEATURE GATED - Not available in initial release
|
|
181
|
+
// /**
|
|
182
|
+
// * Get notifications service
|
|
183
|
+
// */
|
|
184
|
+
// public get notifications(): NotificationsService {
|
|
185
|
+
// if (!this.services.notifications) {
|
|
186
|
+
// throw new Error(
|
|
187
|
+
// 'Notifications service not initialized. Ensure PLATFORM_API_KEY and APP_ID are set.'
|
|
188
|
+
// );
|
|
189
|
+
// }
|
|
190
|
+
// return this.services.notifications;
|
|
191
|
+
// }
|
|
192
|
+
/**
|
|
193
|
+
* Get social service
|
|
194
|
+
*/
|
|
195
|
+
get social() {
|
|
196
|
+
if (!this.services.social) {
|
|
197
|
+
throw new Error('Social service not initialized. Ensure PLATFORM_API_KEY is set.');
|
|
198
|
+
}
|
|
199
|
+
return this.services.social;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Detect if we're running in mock mode
|
|
203
|
+
*/
|
|
204
|
+
detectMockMode() {
|
|
205
|
+
const appId = this.options.appId || this.context.env.APP_ID;
|
|
206
|
+
return appId?.startsWith('mock-') || appId?.startsWith('test-') || false;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Extract app ID from environment or request
|
|
210
|
+
*/
|
|
211
|
+
extractAppId() {
|
|
212
|
+
// Try environment first
|
|
213
|
+
if (this.context.env.APP_ID) {
|
|
214
|
+
return this.context.env.APP_ID;
|
|
215
|
+
}
|
|
216
|
+
// Try to extract from request hostname (e.g., app-xyz.pages.dev)
|
|
217
|
+
if (this.context.request) {
|
|
218
|
+
try {
|
|
219
|
+
const url = new URL(this.context.request.url);
|
|
220
|
+
const match = url.hostname.match(/^app-([^.]+)\./);
|
|
221
|
+
if (match) {
|
|
222
|
+
return match[1];
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (e) {
|
|
226
|
+
this.log('Failed to extract app ID from request URL', e);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get platform API URL
|
|
233
|
+
*/
|
|
234
|
+
getApiUrl() {
|
|
235
|
+
return (this.context.env.PLATFORM_API_URL ||
|
|
236
|
+
this.options.mock ||
|
|
237
|
+
'https://platform.thewhatever.app');
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Debug logging
|
|
241
|
+
*/
|
|
242
|
+
log(message, ...args) {
|
|
243
|
+
if (this.debug) {
|
|
244
|
+
console.log(`[WhateverPlatform] ${message}`, ...args);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Factory function to create platform instance
|
|
250
|
+
*/
|
|
251
|
+
export function createPlatform(context, options = {}) {
|
|
252
|
+
return new WhateverPlatform(context, options);
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Social service client
|
|
3
|
+
*/
|
|
4
|
+
import type { SocialService, AddCommentRequest, Comment, CommentQueryOptions, LikeInfo, ShareInfo } from '../types';
|
|
5
|
+
interface SocialConfig {
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
apiKey: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class SocialAPI implements SocialService {
|
|
10
|
+
private config;
|
|
11
|
+
constructor(config: SocialConfig);
|
|
12
|
+
private request;
|
|
13
|
+
addComment(request: AddCommentRequest): Promise<Comment>;
|
|
14
|
+
getComments(entityId: string, options?: CommentQueryOptions): Promise<Comment[]>;
|
|
15
|
+
deleteComment(commentId: string): Promise<void>;
|
|
16
|
+
updateComment(commentId: string, content: string): Promise<Comment>;
|
|
17
|
+
like(entityId: string, userId: string): Promise<void>;
|
|
18
|
+
unlike(entityId: string, userId: string): Promise<void>;
|
|
19
|
+
getLikes(entityId: string): Promise<LikeInfo>;
|
|
20
|
+
hasLiked(entityId: string, userId: string): Promise<boolean>;
|
|
21
|
+
share(entityId: string, userId: string, platform?: string): Promise<void>;
|
|
22
|
+
getShares(entityId: string): Promise<ShareInfo>;
|
|
23
|
+
follow(userId: string, targetUserId: string): Promise<void>;
|
|
24
|
+
unfollow(userId: string, targetUserId: string): Promise<void>;
|
|
25
|
+
getFollowers(userId: string): Promise<string[]>;
|
|
26
|
+
getFollowing(userId: string): Promise<string[]>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/social/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACV,MAAM,UAAU,CAAC;AAElB,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,SAAU,YAAW,aAAa;IACjC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;YAE1B,OAAO;IAuBf,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxD,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,EAAE,CAAC;IAUf,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5D,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAK/C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ/C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAOtD"}
|