@capivv/capacitor-sdk 0.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/CapivvCapacitor.podspec +20 -0
- package/README.md +378 -0
- package/android/build.gradle +74 -0
- package/android/src/main/AndroidManifest.xml +5 -0
- package/android/src/main/java/com/capivv/capacitor/CapivvPlugin.kt +708 -0
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.js +9 -0
- package/dist/esm/components/index.js.map +1 -0
- package/dist/esm/definitions.d.ts +327 -0
- package/dist/esm/definitions.js +20 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/l10n/translations.d.ts +73 -0
- package/dist/esm/l10n/translations.js +397 -0
- package/dist/esm/l10n/translations.js.map +1 -0
- package/dist/esm/templates/types.d.ts +118 -0
- package/dist/esm/templates/types.js +8 -0
- package/dist/esm/templates/types.js.map +1 -0
- package/dist/esm/web.d.ts +72 -0
- package/dist/esm/web.js +230 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +661 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +664 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Plugin/CapivvPlugin.m +21 -0
- package/ios/Plugin/CapivvPlugin.swift +655 -0
- package/package.json +89 -0
package/dist/esm/web.js
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { WebPlugin } from '@capacitor/core';
|
|
2
|
+
/**
|
|
3
|
+
* Web implementation of the Capivv plugin.
|
|
4
|
+
* Uses the Capivv REST API directly for web platforms.
|
|
5
|
+
* Stripe integration can be added for web purchases.
|
|
6
|
+
*/
|
|
7
|
+
export class CapivvWeb extends WebPlugin {
|
|
8
|
+
capivvConfig = null;
|
|
9
|
+
userId = null;
|
|
10
|
+
apiUrl = 'https://api.capivv.com';
|
|
11
|
+
async configure(config) {
|
|
12
|
+
this.capivvConfig = config;
|
|
13
|
+
if (config.apiUrl) {
|
|
14
|
+
this.apiUrl = config.apiUrl;
|
|
15
|
+
}
|
|
16
|
+
if (config.debug) {
|
|
17
|
+
console.log('[Capivv] Configured with API URL:', this.apiUrl);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async identify(options) {
|
|
21
|
+
this.ensureConfigured();
|
|
22
|
+
this.userId = options.userId;
|
|
23
|
+
const response = await this.apiRequest('POST', `/v1/users/${options.userId}/login`, {
|
|
24
|
+
attributes: options.attributes,
|
|
25
|
+
});
|
|
26
|
+
const data = response;
|
|
27
|
+
return {
|
|
28
|
+
userId: options.userId,
|
|
29
|
+
entitlements: data.entitlements || [],
|
|
30
|
+
originalPurchaseDate: data.original_purchase_date,
|
|
31
|
+
latestPurchaseDate: data.latest_purchase_date,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async logout() {
|
|
35
|
+
this.userId = null;
|
|
36
|
+
}
|
|
37
|
+
async getUserInfo() {
|
|
38
|
+
this.ensureConfigured();
|
|
39
|
+
this.ensureIdentified();
|
|
40
|
+
const response = await this.apiRequest('GET', `/v1/users/${this.userId}/entitlements`);
|
|
41
|
+
const data = response;
|
|
42
|
+
return {
|
|
43
|
+
userId: this.userId,
|
|
44
|
+
entitlements: data.entitlements || [],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async isBillingSupported() {
|
|
48
|
+
// Web platform always supports billing via Stripe
|
|
49
|
+
return { isSupported: true };
|
|
50
|
+
}
|
|
51
|
+
async getOfferings() {
|
|
52
|
+
this.ensureConfigured();
|
|
53
|
+
const response = await this.apiRequest('GET', '/v1/offerings');
|
|
54
|
+
const data = response;
|
|
55
|
+
return {
|
|
56
|
+
offerings: (data.offerings || []).map(this.mapOffering),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async getProduct(options) {
|
|
60
|
+
this.ensureConfigured();
|
|
61
|
+
const offerings = await this.getOfferings();
|
|
62
|
+
for (const offering of offerings.offerings) {
|
|
63
|
+
const product = offering.products.find((p) => p.identifier === options.productIdentifier);
|
|
64
|
+
if (product) {
|
|
65
|
+
return { product };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
throw new Error(`Product not found: ${options.productIdentifier}`);
|
|
69
|
+
}
|
|
70
|
+
async getProducts(options) {
|
|
71
|
+
this.ensureConfigured();
|
|
72
|
+
const offerings = await this.getOfferings();
|
|
73
|
+
const products = [];
|
|
74
|
+
for (const offering of offerings.offerings) {
|
|
75
|
+
for (const product of offering.products) {
|
|
76
|
+
if (options.productIdentifiers.includes(product.identifier)) {
|
|
77
|
+
products.push(product);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { products };
|
|
82
|
+
}
|
|
83
|
+
async purchase(options) {
|
|
84
|
+
this.ensureConfigured();
|
|
85
|
+
this.ensureIdentified();
|
|
86
|
+
// For web, we would integrate with Stripe Checkout here
|
|
87
|
+
// This is a placeholder that returns an error suggesting native platforms
|
|
88
|
+
console.warn('[Capivv] Web purchases require Stripe integration. Configure Stripe in your Capivv dashboard.');
|
|
89
|
+
// TODO: Implement Stripe Checkout integration
|
|
90
|
+
// 1. Create checkout session via Capivv API
|
|
91
|
+
// 2. Redirect to Stripe Checkout
|
|
92
|
+
// 3. Handle success/cancel callbacks
|
|
93
|
+
return {
|
|
94
|
+
success: false,
|
|
95
|
+
error: 'Web purchases not yet implemented. Use iOS or Android for native purchases.',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async restorePurchases() {
|
|
99
|
+
this.ensureConfigured();
|
|
100
|
+
this.ensureIdentified();
|
|
101
|
+
// Web doesn't have local purchases to restore
|
|
102
|
+
// Just fetch current entitlements from server
|
|
103
|
+
const response = await this.apiRequest('GET', `/v1/users/${this.userId}/entitlements`);
|
|
104
|
+
const restoreData = response;
|
|
105
|
+
return {
|
|
106
|
+
entitlements: restoreData.entitlements || [],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
async checkEntitlement(options) {
|
|
110
|
+
this.ensureConfigured();
|
|
111
|
+
this.ensureIdentified();
|
|
112
|
+
const response = await this.apiRequest('GET', `/v1/users/${this.userId}/entitlements`);
|
|
113
|
+
const checkData = response;
|
|
114
|
+
const entitlements = checkData.entitlements || [];
|
|
115
|
+
const entitlement = entitlements.find((e) => e.identifier === options.entitlementIdentifier);
|
|
116
|
+
return {
|
|
117
|
+
hasAccess: entitlement?.isActive ?? false,
|
|
118
|
+
entitlement,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
async getEntitlements() {
|
|
122
|
+
this.ensureConfigured();
|
|
123
|
+
this.ensureIdentified();
|
|
124
|
+
const response = await this.apiRequest('GET', `/v1/users/${this.userId}/entitlements`);
|
|
125
|
+
const entData = response;
|
|
126
|
+
return {
|
|
127
|
+
entitlements: entData.entitlements || [],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
async syncPurchases() {
|
|
131
|
+
// Web doesn't have local purchases to sync
|
|
132
|
+
return this.getEntitlements();
|
|
133
|
+
}
|
|
134
|
+
async manageSubscriptions() {
|
|
135
|
+
// For web, we could redirect to a customer portal
|
|
136
|
+
// For now, log a warning
|
|
137
|
+
console.warn('[Capivv] Subscription management on web requires Stripe Customer Portal integration.');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get a paywall template by identifier for OTA updates.
|
|
141
|
+
*/
|
|
142
|
+
async getPaywallTemplate(identifier) {
|
|
143
|
+
this.ensureConfigured();
|
|
144
|
+
try {
|
|
145
|
+
const response = await this.apiRequest('GET', `/v1/paywalls/by-identifier/${identifier}/template`);
|
|
146
|
+
const data = response;
|
|
147
|
+
return {
|
|
148
|
+
template: data.template,
|
|
149
|
+
version: data.version || '1.0.0',
|
|
150
|
+
updatedAt: data.updated_at || new Date().toISOString(),
|
|
151
|
+
cacheTtlSeconds: data.cache_ttl_seconds,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
if (this.capivvConfig?.debug) {
|
|
156
|
+
console.log(`[Capivv] Template not available for ${identifier}:`, e);
|
|
157
|
+
}
|
|
158
|
+
// Return empty result for graceful fallback
|
|
159
|
+
return {
|
|
160
|
+
template: null,
|
|
161
|
+
version: '0.0.0',
|
|
162
|
+
updatedAt: new Date().toISOString(),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get offerings and template in parallel for a paywall.
|
|
168
|
+
*/
|
|
169
|
+
async getPaywallWithTemplate(identifier) {
|
|
170
|
+
this.ensureConfigured();
|
|
171
|
+
const [offeringsResult, templateResult] = await Promise.all([
|
|
172
|
+
this.getOfferings(),
|
|
173
|
+
this.getPaywallTemplate(identifier),
|
|
174
|
+
]);
|
|
175
|
+
return {
|
|
176
|
+
offerings: offeringsResult.offerings,
|
|
177
|
+
template: templateResult.template,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
// Helper methods
|
|
181
|
+
ensureConfigured() {
|
|
182
|
+
if (!this.capivvConfig) {
|
|
183
|
+
throw new Error('Capivv not configured. Call configure() first.');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
ensureIdentified() {
|
|
187
|
+
if (!this.userId) {
|
|
188
|
+
throw new Error('User not identified. Call identify() first.');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async apiRequest(method, path, body) {
|
|
192
|
+
const url = `${this.apiUrl}${path}`;
|
|
193
|
+
const headers = {
|
|
194
|
+
'Content-Type': 'application/json',
|
|
195
|
+
'X-Capivv-Api-Key': this.capivvConfig.apiKey,
|
|
196
|
+
};
|
|
197
|
+
const options = {
|
|
198
|
+
method,
|
|
199
|
+
headers,
|
|
200
|
+
};
|
|
201
|
+
if (body && method !== 'GET') {
|
|
202
|
+
options.body = JSON.stringify(body);
|
|
203
|
+
}
|
|
204
|
+
const response = await fetch(url, options);
|
|
205
|
+
if (!response.ok) {
|
|
206
|
+
const error = await response.text();
|
|
207
|
+
throw new Error(`API error (${response.status}): ${error}`);
|
|
208
|
+
}
|
|
209
|
+
return response.json();
|
|
210
|
+
}
|
|
211
|
+
mapOffering(offering) {
|
|
212
|
+
return {
|
|
213
|
+
identifier: offering.identifier,
|
|
214
|
+
description: offering.description,
|
|
215
|
+
products: (offering.products || []).map((p) => ({
|
|
216
|
+
identifier: p.identifier,
|
|
217
|
+
title: p.title,
|
|
218
|
+
description: p.description,
|
|
219
|
+
priceString: p.price_string,
|
|
220
|
+
priceAmountMicros: p.price_amount_micros,
|
|
221
|
+
currencyCode: p.currency_code,
|
|
222
|
+
productType: p.product_type,
|
|
223
|
+
subscriptionPeriod: p.subscription_period,
|
|
224
|
+
trialPeriod: p.trial_period,
|
|
225
|
+
})),
|
|
226
|
+
metadata: offering.metadata,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
|