@layers/amba-web 1.0.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/README.md +129 -0
- package/dist/index.d.ts +814 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +504 -0
- package/dist/index.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/error.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import init, { AmbaCoreWasm } from "@layers/amba-core-wasm";
|
|
2
|
+
|
|
3
|
+
//#region src/storage-adapter.ts
|
|
4
|
+
/**
|
|
5
|
+
* Browser localStorage adapter for SDK identity persistence.
|
|
6
|
+
*
|
|
7
|
+
* The Rust core's identity (anonymous_id + session_token + refresh_token)
|
|
8
|
+
* is persisted via the `PersistenceBackend` trait — but on WASM we don't
|
|
9
|
+
* currently pass one through. Instead, the Rust core re-seeds an
|
|
10
|
+
* anonymous_id on every page load. This adapter is a placeholder for
|
|
11
|
+
* future work to bridge localStorage to the Rust persistence trait.
|
|
12
|
+
*
|
|
13
|
+
* For now it serves as the documented home for storage-prefix handling
|
|
14
|
+
* so customers can override the localStorage key prefix used by the
|
|
15
|
+
* (eventual) identity cache.
|
|
16
|
+
*/
|
|
17
|
+
var LocalStoragePersistence = class {
|
|
18
|
+
constructor(prefix) {
|
|
19
|
+
this.prefix = prefix;
|
|
20
|
+
}
|
|
21
|
+
/** Read everything we'd want to hydrate at init. No-op until wired through. */
|
|
22
|
+
hydrate() {}
|
|
23
|
+
read(key) {
|
|
24
|
+
if (typeof localStorage === "undefined") return null;
|
|
25
|
+
return localStorage.getItem(`${this.prefix}:${key}`);
|
|
26
|
+
}
|
|
27
|
+
write(key, value) {
|
|
28
|
+
if (typeof localStorage === "undefined") return;
|
|
29
|
+
localStorage.setItem(`${this.prefix}:${key}`, value);
|
|
30
|
+
}
|
|
31
|
+
delete(key) {
|
|
32
|
+
if (typeof localStorage === "undefined") return;
|
|
33
|
+
localStorage.removeItem(`${this.prefix}:${key}`);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region src/json.ts
|
|
39
|
+
/**
|
|
40
|
+
* JSON encode helper — guarantees stable serialization across browser
|
|
41
|
+
* runtimes and provides a single hook for future schema validation.
|
|
42
|
+
*/
|
|
43
|
+
function encodeJson(value) {
|
|
44
|
+
return JSON.stringify(value);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/error.ts
|
|
49
|
+
var AmbaApiError = class extends Error {
|
|
50
|
+
code;
|
|
51
|
+
details;
|
|
52
|
+
constructor(code, message, details) {
|
|
53
|
+
super(message);
|
|
54
|
+
this.name = "AmbaApiError";
|
|
55
|
+
this.code = code;
|
|
56
|
+
this.details = details;
|
|
57
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Best-effort: pull a stable error code out of a Rust `AmbaError`
|
|
62
|
+
* Display string. Used by `toAmbaApiError` when the underlying thrown
|
|
63
|
+
* value is a generic `Error` produced by `wasm-bindgen`'s `JsError::new`.
|
|
64
|
+
*
|
|
65
|
+
* Keep in sync with `sdks/core/src/error.rs::AmbaError`'s `#[error]`
|
|
66
|
+
* format strings — but the parser falls back to UNKNOWN_ERROR for any
|
|
67
|
+
* pattern it doesn't recognize, so a stale match list isn't a footgun,
|
|
68
|
+
* just a quality-of-life regression.
|
|
69
|
+
*/
|
|
70
|
+
function codeFromMessage(message) {
|
|
71
|
+
if (message.startsWith("Unauthorized")) return "UNAUTHORIZED";
|
|
72
|
+
if (message.startsWith("Forbidden")) return "FORBIDDEN";
|
|
73
|
+
if (message.startsWith("Not found")) return "NOT_FOUND";
|
|
74
|
+
if (message.startsWith("Conflict")) return "CONFLICT";
|
|
75
|
+
if (message.startsWith("Rate limited")) return "RATE_LIMITED";
|
|
76
|
+
if (message.startsWith("Validation error")) return "VALIDATION_ERROR";
|
|
77
|
+
if (message.startsWith("Network error")) return "NETWORK_ERROR";
|
|
78
|
+
if (message.startsWith("HTTP error")) return "HTTP_ERROR";
|
|
79
|
+
if (message.startsWith("Circuit breaker")) return "CIRCUIT_OPEN";
|
|
80
|
+
if (message.startsWith("Consent not granted")) return "CONSENT_NOT_GRANTED";
|
|
81
|
+
if (message.includes("not initialized")) return "NOT_INITIALIZED";
|
|
82
|
+
if (message.startsWith("Invalid configuration")) return "INVALID_CONFIG";
|
|
83
|
+
if (message.startsWith("Invalid argument")) return "INVALID_ARGUMENT";
|
|
84
|
+
return "UNKNOWN_ERROR";
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Coerce any thrown value into an `AmbaApiError`. Idempotent — passing
|
|
88
|
+
* an existing `AmbaApiError` returns it unchanged so wrappers can stack
|
|
89
|
+
* without re-wrapping.
|
|
90
|
+
*
|
|
91
|
+
* Heuristics:
|
|
92
|
+
* 1. Existing `AmbaApiError` → returned as-is.
|
|
93
|
+
* 2. Object with `.code` → use that code + `.message` + `.details`.
|
|
94
|
+
* 3. `Error` (e.g. WASM JsError) → infer code from message prefix.
|
|
95
|
+
* 4. Anything else → stringify and tag UNKNOWN_ERROR.
|
|
96
|
+
*/
|
|
97
|
+
function toAmbaApiError(err) {
|
|
98
|
+
if (err instanceof AmbaApiError) return err;
|
|
99
|
+
if (err && typeof err === "object") {
|
|
100
|
+
const obj = err;
|
|
101
|
+
if (typeof obj.code === "string") return new AmbaApiError(obj.code, typeof obj.message === "string" ? obj.message : "unknown", obj.details);
|
|
102
|
+
}
|
|
103
|
+
if (err instanceof Error) return new AmbaApiError(codeFromMessage(err.message), err.message);
|
|
104
|
+
return new AmbaApiError("UNKNOWN_ERROR", String(err));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region src/index.ts
|
|
109
|
+
/**
|
|
110
|
+
* Internal state — one instance per page. Created lazily by `Amba.configure()`.
|
|
111
|
+
*/
|
|
112
|
+
let coreInstance = null;
|
|
113
|
+
function requireCore() {
|
|
114
|
+
if (!coreInstance) throw new AmbaApiError("NOT_INITIALIZED", "amba SDK not configured. Call Amba.configure({ apiKey }) at app start before any other API.");
|
|
115
|
+
return coreInstance;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Run a single WASM-core call and rewrap any thrown value into a
|
|
119
|
+
* stable `AmbaApiError`. Every method on `Amba` funnels through this
|
|
120
|
+
* so callers see one error shape regardless of which layer failed
|
|
121
|
+
* (FFI, network, validation, etc.). Sync `requireCore()` accessors
|
|
122
|
+
* (e.g. the `anonymousId` getter) already throw the typed shape on
|
|
123
|
+
* their own.
|
|
124
|
+
*/
|
|
125
|
+
async function coreCall(fn) {
|
|
126
|
+
try {
|
|
127
|
+
return await fn(requireCore());
|
|
128
|
+
} catch (err) {
|
|
129
|
+
throw toAmbaApiError(err);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const authSubscribers = /* @__PURE__ */ new Set();
|
|
133
|
+
function snapshotSession(user) {
|
|
134
|
+
if (!user) return null;
|
|
135
|
+
return {
|
|
136
|
+
sessionToken: "",
|
|
137
|
+
refreshToken: "",
|
|
138
|
+
user,
|
|
139
|
+
expiresAt: ""
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function notifyAuthSubscribers(session) {
|
|
143
|
+
for (const cb of authSubscribers) try {
|
|
144
|
+
cb(session);
|
|
145
|
+
} catch (err) {
|
|
146
|
+
if (typeof console !== "undefined") console.error("[amba] onAuthStateChange callback threw", err);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async function notifyFromAuthResult(result) {
|
|
150
|
+
notifyAuthSubscribers(snapshotSession(result.user));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Top-level SDK namespace.
|
|
154
|
+
*
|
|
155
|
+
* Stateless from the JS side — all state lives in the WASM core. Calling
|
|
156
|
+
* `Amba.configure()` multiple times replaces the previous instance.
|
|
157
|
+
*/
|
|
158
|
+
const Amba = {
|
|
159
|
+
configure: async (config) => {
|
|
160
|
+
if (!config.apiKey || config.apiKey.trim() === "") throw new Error("Amba.configure: apiKey is required");
|
|
161
|
+
if (typeof process !== "undefined" && !!(process.versions && process.versions.node)) {
|
|
162
|
+
const [{ readFile }, { fileURLToPath, pathToFileURL }, { createRequire }] = await Promise.all([
|
|
163
|
+
import("node:fs/promises"),
|
|
164
|
+
import("node:url"),
|
|
165
|
+
import("node:module")
|
|
166
|
+
]);
|
|
167
|
+
const resolveFn = import.meta.resolve;
|
|
168
|
+
let wasmJsUrl;
|
|
169
|
+
if (resolveFn) wasmJsUrl = await resolveFn("@layers/amba-core-wasm/wasm");
|
|
170
|
+
else wasmJsUrl = pathToFileURL(createRequire(import.meta.url).resolve("@layers/amba-core-wasm/wasm")).href;
|
|
171
|
+
await init(await readFile(fileURLToPath(wasmJsUrl)));
|
|
172
|
+
} else await init();
|
|
173
|
+
new LocalStoragePersistence(config.storagePrefix ?? "amba").hydrate();
|
|
174
|
+
coreInstance = AmbaCoreWasm.init(encodeJson({
|
|
175
|
+
api_key: config.apiKey,
|
|
176
|
+
base_url: config.baseUrl,
|
|
177
|
+
sdk_platform: "web",
|
|
178
|
+
sdk_wrapper_version: `amba-web/${SDK_VERSION}`,
|
|
179
|
+
consent_required: config.consentRequired,
|
|
180
|
+
debug: config.debug
|
|
181
|
+
}), globalThis.fetch.bind(globalThis));
|
|
182
|
+
},
|
|
183
|
+
get anonymousId() {
|
|
184
|
+
return requireCore().anonymousId();
|
|
185
|
+
},
|
|
186
|
+
get appUserId() {
|
|
187
|
+
return requireCore().appUserId() ?? void 0;
|
|
188
|
+
},
|
|
189
|
+
get isAuthenticated() {
|
|
190
|
+
return requireCore().isAuthenticated();
|
|
191
|
+
},
|
|
192
|
+
setDebug: (enabled) => {
|
|
193
|
+
requireCore().setDebug(enabled);
|
|
194
|
+
},
|
|
195
|
+
events: { track: async (event, properties) => {
|
|
196
|
+
await coreCall((c) => c.track(event, properties ? encodeJson(properties) : void 0));
|
|
197
|
+
} },
|
|
198
|
+
auth: {
|
|
199
|
+
signInAnonymously: async () => {
|
|
200
|
+
const r = await coreCall((c) => c.signInAnonymously());
|
|
201
|
+
await notifyFromAuthResult(r);
|
|
202
|
+
return r;
|
|
203
|
+
},
|
|
204
|
+
signInWithEmail: async (email, password) => {
|
|
205
|
+
const r = await coreCall((c) => c.signInWithEmail(email, password));
|
|
206
|
+
await notifyFromAuthResult(r);
|
|
207
|
+
return r;
|
|
208
|
+
},
|
|
209
|
+
signUpWithEmail: async (email, password) => {
|
|
210
|
+
const r = await coreCall((c) => c.signUpWithEmail(email, password));
|
|
211
|
+
await notifyFromAuthResult(r);
|
|
212
|
+
return r;
|
|
213
|
+
},
|
|
214
|
+
signInWithSocial: async (provider, idToken) => {
|
|
215
|
+
const r = await coreCall((c) => c.signInWithSocial(provider, idToken));
|
|
216
|
+
await notifyFromAuthResult(r);
|
|
217
|
+
return r;
|
|
218
|
+
},
|
|
219
|
+
signOut: async (rotateAnonymousId = false) => {
|
|
220
|
+
await coreCall((c) => c.signOut(rotateAnonymousId));
|
|
221
|
+
notifyAuthSubscribers(null);
|
|
222
|
+
},
|
|
223
|
+
refresh: async () => {
|
|
224
|
+
const r = await coreCall((c) => c.refreshSession());
|
|
225
|
+
await notifyFromAuthResult(r);
|
|
226
|
+
return r;
|
|
227
|
+
},
|
|
228
|
+
me: async () => {
|
|
229
|
+
return await coreCall((c) => c.me());
|
|
230
|
+
},
|
|
231
|
+
getSession: async () => {
|
|
232
|
+
if (!requireCore().isAuthenticated()) return null;
|
|
233
|
+
return snapshotSession(await coreCall((c) => c.me()));
|
|
234
|
+
},
|
|
235
|
+
getAnonymousId: async () => {
|
|
236
|
+
return requireCore().anonymousId();
|
|
237
|
+
},
|
|
238
|
+
onAuthStateChange: (cb) => {
|
|
239
|
+
authSubscribers.add(cb);
|
|
240
|
+
return () => {
|
|
241
|
+
authSubscribers.delete(cb);
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
collections: {
|
|
246
|
+
find: async (name, options = {}) => {
|
|
247
|
+
return await coreCall((c) => c.collectionsFind(name, encodeJson(options)));
|
|
248
|
+
},
|
|
249
|
+
findOne: async (name, id) => {
|
|
250
|
+
return await coreCall((c) => c.collectionsFindOne(name, id));
|
|
251
|
+
},
|
|
252
|
+
insert: async (name, row) => {
|
|
253
|
+
return await coreCall((c) => c.collectionsInsert(name, encodeJson(row)));
|
|
254
|
+
},
|
|
255
|
+
update: async (name, id, set) => {
|
|
256
|
+
return await coreCall((c) => c.collectionsUpdate(name, id, encodeJson(set)));
|
|
257
|
+
},
|
|
258
|
+
delete: async (name, id) => {
|
|
259
|
+
return await coreCall((c) => c.collectionsDelete(name, id));
|
|
260
|
+
},
|
|
261
|
+
where: {
|
|
262
|
+
eq: (column, value) => ({
|
|
263
|
+
column,
|
|
264
|
+
op: "eq",
|
|
265
|
+
value
|
|
266
|
+
}),
|
|
267
|
+
ne: (column, value) => ({
|
|
268
|
+
column,
|
|
269
|
+
op: "ne",
|
|
270
|
+
value
|
|
271
|
+
}),
|
|
272
|
+
gt: (column, value) => ({
|
|
273
|
+
column,
|
|
274
|
+
op: "gt",
|
|
275
|
+
value
|
|
276
|
+
}),
|
|
277
|
+
gte: (column, value) => ({
|
|
278
|
+
column,
|
|
279
|
+
op: "gte",
|
|
280
|
+
value
|
|
281
|
+
}),
|
|
282
|
+
lt: (column, value) => ({
|
|
283
|
+
column,
|
|
284
|
+
op: "lt",
|
|
285
|
+
value
|
|
286
|
+
}),
|
|
287
|
+
lte: (column, value) => ({
|
|
288
|
+
column,
|
|
289
|
+
op: "lte",
|
|
290
|
+
value
|
|
291
|
+
}),
|
|
292
|
+
in: (column, values) => ({
|
|
293
|
+
column,
|
|
294
|
+
op: "in",
|
|
295
|
+
value: values
|
|
296
|
+
}),
|
|
297
|
+
notIn: (column, values) => ({
|
|
298
|
+
column,
|
|
299
|
+
op: "not_in",
|
|
300
|
+
value: values
|
|
301
|
+
}),
|
|
302
|
+
like: (column, pattern) => ({
|
|
303
|
+
column,
|
|
304
|
+
op: "like",
|
|
305
|
+
value: pattern
|
|
306
|
+
}),
|
|
307
|
+
ilike: (column, pattern) => ({
|
|
308
|
+
column,
|
|
309
|
+
op: "ilike",
|
|
310
|
+
value: pattern
|
|
311
|
+
}),
|
|
312
|
+
isNull: (column) => ({
|
|
313
|
+
column,
|
|
314
|
+
op: "is_null"
|
|
315
|
+
}),
|
|
316
|
+
isNotNull: (column) => ({
|
|
317
|
+
column,
|
|
318
|
+
op: "is_not_null"
|
|
319
|
+
}),
|
|
320
|
+
and: (...filters) => ({ and: filters }),
|
|
321
|
+
or: (...filters) => ({ or: filters }),
|
|
322
|
+
not: (filter) => ({ not: filter })
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
storage: {
|
|
326
|
+
presign: async (params) => {
|
|
327
|
+
return await coreCall((c) => c.storagePresign(params.bucket, params.filename, params.mimeType, params.sizeBytes, params.retentionDays ?? void 0));
|
|
328
|
+
},
|
|
329
|
+
upload: async (params) => {
|
|
330
|
+
const filename = params.filename ?? ("name" in params.file ? params.file.name : "upload");
|
|
331
|
+
const mimeType = params.file.type || "application/octet-stream";
|
|
332
|
+
const presign = await Amba.storage.presign({
|
|
333
|
+
bucket: params.bucket,
|
|
334
|
+
filename,
|
|
335
|
+
mimeType,
|
|
336
|
+
sizeBytes: params.file.size,
|
|
337
|
+
retentionDays: params.retentionDays
|
|
338
|
+
});
|
|
339
|
+
const uploadHeaders = {};
|
|
340
|
+
for (const [k, v] of presign.upload_headers) uploadHeaders[k] = v;
|
|
341
|
+
const putResp = await fetch(presign.upload_url, {
|
|
342
|
+
method: "PUT",
|
|
343
|
+
headers: uploadHeaders,
|
|
344
|
+
body: params.file
|
|
345
|
+
});
|
|
346
|
+
if (!putResp.ok) throw new Error(`upload to R2 failed: status ${putResp.status}`);
|
|
347
|
+
return await coreCall((c) => c.storageCommit(presign.upload_id, presign.asset_id));
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
push: {
|
|
351
|
+
register: async (token, platform, bundleId) => {
|
|
352
|
+
return await coreCall((c) => c.pushRegister(token, platform, bundleId ?? void 0));
|
|
353
|
+
},
|
|
354
|
+
unregister: async (token) => {
|
|
355
|
+
await coreCall((c) => c.pushUnregister(token));
|
|
356
|
+
},
|
|
357
|
+
getTokens: async () => {
|
|
358
|
+
return await coreCall((c) => c.pushGetTokens());
|
|
359
|
+
},
|
|
360
|
+
subscribe: async (topic) => {
|
|
361
|
+
await coreCall((c) => c.pushSubscribe(topic));
|
|
362
|
+
},
|
|
363
|
+
unsubscribe: async (topic) => {
|
|
364
|
+
await coreCall((c) => c.pushUnsubscribe(topic));
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
entitlements: {
|
|
368
|
+
list: async () => {
|
|
369
|
+
return await coreCall((c) => c.entitlementsList());
|
|
370
|
+
},
|
|
371
|
+
has: async (name) => {
|
|
372
|
+
return await coreCall((c) => c.entitlementsHas(name));
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
ai: { anthropic: { messages: { create: async (request) => {
|
|
376
|
+
return await coreCall((c) => c.aiAnthropicMessages(encodeJson(request)));
|
|
377
|
+
} } } },
|
|
378
|
+
config: { fetch: async () => {
|
|
379
|
+
return await coreCall((c) => c.configFetch());
|
|
380
|
+
} },
|
|
381
|
+
flags: { fetch: async () => {
|
|
382
|
+
return await coreCall((c) => c.flagsFetch());
|
|
383
|
+
} },
|
|
384
|
+
achievements: {
|
|
385
|
+
getAll: async () => await coreCall((c) => c.achievementsGetAll()),
|
|
386
|
+
getProgress: async () => await coreCall((c) => c.achievementsGetProgress())
|
|
387
|
+
},
|
|
388
|
+
challenges: {
|
|
389
|
+
getActive: async () => await coreCall((c) => c.challengesGetActive()),
|
|
390
|
+
get: async (id) => await coreCall((c) => c.challengesGet(id)),
|
|
391
|
+
getProgress: async (id) => await coreCall((c) => c.challengesGetProgress(id)),
|
|
392
|
+
claim: async (id) => await coreCall((c) => c.challengesClaim(id))
|
|
393
|
+
},
|
|
394
|
+
currencies: {
|
|
395
|
+
getBalance: async () => await coreCall((c) => c.currenciesGetBalance()),
|
|
396
|
+
getTransactions: async (currencyKey) => await coreCall((c) => c.currenciesGetTransactions(currencyKey))
|
|
397
|
+
},
|
|
398
|
+
inventory: {
|
|
399
|
+
getItems: async () => await coreCall((c) => c.inventoryGetItems()),
|
|
400
|
+
getItem: async (id) => await coreCall((c) => c.inventoryGetItem(id)),
|
|
401
|
+
purchase: async (request) => await coreCall((c) => c.inventoryPurchase(encodeJson(request))),
|
|
402
|
+
consume: async (request) => await coreCall((c) => c.inventoryConsume(encodeJson(request)))
|
|
403
|
+
},
|
|
404
|
+
leaderboards: {
|
|
405
|
+
get: async (key) => await coreCall((c) => c.leaderboardsGet(key)),
|
|
406
|
+
getEntries: async (key, limit) => await coreCall((c) => c.leaderboardsGetEntries(key, limit ?? void 0)),
|
|
407
|
+
getMyRank: async (key) => await coreCall((c) => c.leaderboardsGetMyRank(key))
|
|
408
|
+
},
|
|
409
|
+
stores: {
|
|
410
|
+
list: async () => await coreCall((c) => c.storesList()),
|
|
411
|
+
getPurchaseOptions: async (storeKey) => await coreCall((c) => c.storesGetPurchaseOptions(storeKey)),
|
|
412
|
+
purchase: async (storeKey, purchaseOptionId, receipt) => await coreCall((c) => c.storesPurchase(storeKey, purchaseOptionId, encodeJson(receipt)))
|
|
413
|
+
},
|
|
414
|
+
xp: {
|
|
415
|
+
getBalance: async () => await coreCall((c) => c.xpGetBalance()),
|
|
416
|
+
getHistory: async (limit) => await coreCall((c) => c.xpGetHistory(limit ?? void 0)),
|
|
417
|
+
claim: async (grantKey) => await coreCall((c) => c.xpClaim(grantKey))
|
|
418
|
+
},
|
|
419
|
+
streaks: {
|
|
420
|
+
getAll: async () => await coreCall((c) => c.streaksGetAll()),
|
|
421
|
+
qualify: async (streakKey) => await coreCall((c) => c.streaksQualify(streakKey))
|
|
422
|
+
},
|
|
423
|
+
feeds: { getActivity: async (feed, cursor) => await coreCall((c) => c.feedsGetActivity(feed ?? void 0, cursor ?? void 0)) },
|
|
424
|
+
friends: {
|
|
425
|
+
getList: async () => await coreCall((c) => c.friendsGetList()),
|
|
426
|
+
getFriends: async () => await coreCall((c) => c.friendsGetFriends()),
|
|
427
|
+
blockUser: async (userId) => await coreCall((c) => c.friendsBlockUser(userId)),
|
|
428
|
+
unblockUser: async (userId) => {
|
|
429
|
+
await coreCall((c) => c.friendsUnblockUser(userId));
|
|
430
|
+
},
|
|
431
|
+
removeBlock: async (friendshipId) => {
|
|
432
|
+
await coreCall((c) => c.friendsRemoveBlock(friendshipId));
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
groups: {
|
|
436
|
+
create: async (params) => await coreCall((c) => c.groupsCreate(encodeJson(params))),
|
|
437
|
+
get: async (id) => await coreCall((c) => c.groupsGet(id)),
|
|
438
|
+
update: async (id, patch) => await coreCall((c) => c.groupsUpdate(id, encodeJson(patch))),
|
|
439
|
+
delete: async (id) => {
|
|
440
|
+
await coreCall((c) => c.groupsDelete(id));
|
|
441
|
+
},
|
|
442
|
+
getMembers: async (id) => await coreCall((c) => c.groupsGetMembers(id)),
|
|
443
|
+
join: async (id) => await coreCall((c) => c.groupsJoin(id)),
|
|
444
|
+
leave: async (id) => {
|
|
445
|
+
await coreCall((c) => c.groupsLeave(id));
|
|
446
|
+
},
|
|
447
|
+
invite: async (id, userId) => await coreCall((c) => c.groupsInvite(id, userId))
|
|
448
|
+
},
|
|
449
|
+
messaging: {
|
|
450
|
+
getConversations: async () => await coreCall((c) => c.messagingGetConversations()),
|
|
451
|
+
getMessage: async (id) => await coreCall((c) => c.messagingGetMessage(id)),
|
|
452
|
+
sendMessage: async (request) => await coreCall((c) => c.messagingSendMessage(encodeJson(request)))
|
|
453
|
+
},
|
|
454
|
+
moderation: {
|
|
455
|
+
reportUser: async (request) => await coreCall((c) => c.moderationReportUser(encodeJson(request))),
|
|
456
|
+
reportContent: async (request) => await coreCall((c) => c.moderationReportContent(encodeJson(request))),
|
|
457
|
+
getReportStatus: async (id) => await coreCall((c) => c.moderationGetReportStatus(id))
|
|
458
|
+
},
|
|
459
|
+
reviews: {
|
|
460
|
+
list: async (targetType, targetId) => await coreCall((c) => c.reviewsList(targetType, targetId)),
|
|
461
|
+
create: async (params) => await coreCall((c) => c.reviewsCreate(encodeJson(params))),
|
|
462
|
+
update: async (id, patch) => await coreCall((c) => c.reviewsUpdate(id, encodeJson(patch))),
|
|
463
|
+
delete: async (id) => {
|
|
464
|
+
await coreCall((c) => c.reviewsDelete(id));
|
|
465
|
+
}
|
|
466
|
+
},
|
|
467
|
+
roles: {
|
|
468
|
+
getMyRoles: async () => await coreCall((c) => c.rolesGetMyRoles()),
|
|
469
|
+
hasPermission: async (permission) => await coreCall((c) => c.rolesHasPermission(permission))
|
|
470
|
+
},
|
|
471
|
+
referrals: {
|
|
472
|
+
getReferralCode: async () => await coreCall((c) => c.referralsGetReferralCode()),
|
|
473
|
+
claimReferral: async (code) => await coreCall((c) => c.referralsClaimReferral(code)),
|
|
474
|
+
create: async (code, maxUses) => await coreCall((c) => c.referralsCreate(code ?? void 0, maxUses ?? void 0))
|
|
475
|
+
},
|
|
476
|
+
catalog: { list: async () => await coreCall((c) => c.catalogList()) },
|
|
477
|
+
content: {
|
|
478
|
+
getToday: async (channel = "default") => await coreCall((c) => c.contentGetToday(channel)),
|
|
479
|
+
getLibrary: async (channel = "default", options) => await coreCall((c) => c.contentGetLibrary(channel, options?.limit ?? void 0, options?.cursor ?? void 0)),
|
|
480
|
+
getItem: async (id) => await coreCall((c) => c.contentGetItem(id)),
|
|
481
|
+
updateItem: async (id, state) => await coreCall((c) => c.contentUpdateItem(id, encodeJson(state))),
|
|
482
|
+
createItem: async (channel, item) => await coreCall((c) => c.contentCreateItem(channel, encodeJson(item)))
|
|
483
|
+
},
|
|
484
|
+
deepLinks: {
|
|
485
|
+
get: async (shortCode) => await coreCall((c) => c.deepLinksGet(shortCode)),
|
|
486
|
+
create: async (params) => await coreCall((c) => c.deepLinksCreate(encodeJson(params)))
|
|
487
|
+
},
|
|
488
|
+
onboarding: {
|
|
489
|
+
getStatus: async () => await coreCall((c) => c.onboardingGetStatus()),
|
|
490
|
+
nextStep: async (payload) => await coreCall((c) => c.onboardingNextStep(encodeJson(payload))),
|
|
491
|
+
skipStep: async () => await coreCall((c) => c.onboardingSkipStep()),
|
|
492
|
+
complete: async () => await coreCall((c) => c.onboardingComplete())
|
|
493
|
+
}
|
|
494
|
+
};
|
|
495
|
+
/** Escape hatch — the raw WASM handle, for namespaces not yet wrapped. */
|
|
496
|
+
function getCoreWasm() {
|
|
497
|
+
return requireCore();
|
|
498
|
+
}
|
|
499
|
+
/** Package version stamped at build time. */
|
|
500
|
+
const SDK_VERSION = "0.1.0";
|
|
501
|
+
|
|
502
|
+
//#endregion
|
|
503
|
+
export { Amba, AmbaApiError, SDK_VERSION, getCoreWasm };
|
|
504
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["prefix: string","coreInstance: AmbaCoreWasm | null","wasmJsUrl: string","uploadHeaders: Record<string, string>"],"sources":["../src/storage-adapter.ts","../src/json.ts","../src/error.ts","../src/index.ts"],"sourcesContent":["/**\n * Browser localStorage adapter for SDK identity persistence.\n *\n * The Rust core's identity (anonymous_id + session_token + refresh_token)\n * is persisted via the `PersistenceBackend` trait — but on WASM we don't\n * currently pass one through. Instead, the Rust core re-seeds an\n * anonymous_id on every page load. This adapter is a placeholder for\n * future work to bridge localStorage to the Rust persistence trait.\n *\n * For now it serves as the documented home for storage-prefix handling\n * so customers can override the localStorage key prefix used by the\n * (eventual) identity cache.\n */\nexport class LocalStoragePersistence {\n constructor(private readonly prefix: string) {}\n\n /** Read everything we'd want to hydrate at init. No-op until wired through. */\n hydrate(): void {\n // Reserved for v0.2 — the Rust core will gain a `PersistenceBackend`\n // bridge that calls into JS for read/write/list/delete.\n }\n\n read(key: string): string | null {\n if (typeof localStorage === \"undefined\") return null;\n return localStorage.getItem(`${this.prefix}:${key}`);\n }\n\n write(key: string, value: string): void {\n if (typeof localStorage === \"undefined\") return;\n localStorage.setItem(`${this.prefix}:${key}`, value);\n }\n\n delete(key: string): void {\n if (typeof localStorage === \"undefined\") return;\n localStorage.removeItem(`${this.prefix}:${key}`);\n }\n}\n","/**\n * JSON encode helper — guarantees stable serialization across browser\n * runtimes and provides a single hook for future schema validation.\n */\nexport function encodeJson(value: unknown): string {\n return JSON.stringify(value);\n}\n","/**\n * Typed error class for the amba SDK + helper that converts arbitrary\n * thrown values (WASM JsError, native Error, plain objects) into a\n * stable `AmbaApiError` instance.\n *\n * Callers can `instanceof`-narrow safely, branch on `.code`, and pull\n * extra payload from `.details` (raw HTTP body, validation field paths,\n * etc.). The wrapper methods on `Amba` wrap every async call in\n * `toAmbaApiError`, so consumers see one error shape regardless of\n * which layer (network, FFI, validation) failed.\n */\n\n/**\n * Stable error codes surfaced by the SDK. Strings rather than an enum\n * so customers can extend with custom codes by simply throwing\n * `new AmbaApiError(\"MY_CODE\", \"...\")` without coordinating with this\n * package's TypeScript types.\n */\nexport type AmbaApiErrorCode =\n | \"UNAUTHORIZED\"\n | \"FORBIDDEN\"\n | \"NOT_FOUND\"\n | \"CONFLICT\"\n | \"RATE_LIMITED\"\n | \"VALIDATION_ERROR\"\n | \"NETWORK_ERROR\"\n | \"HTTP_ERROR\"\n | \"CIRCUIT_OPEN\"\n | \"CONSENT_NOT_GRANTED\"\n | \"NOT_INITIALIZED\"\n | \"INVALID_CONFIG\"\n | \"INVALID_ARGUMENT\"\n | \"PUSH_PERMISSION_DENIED\"\n | \"PUSH_REGISTRATION_FAILED\"\n | \"UNKNOWN_ERROR\"\n | (string & {});\n\nexport class AmbaApiError extends Error {\n readonly code: AmbaApiErrorCode;\n readonly details?: unknown;\n constructor(\n code: AmbaApiErrorCode,\n message: string,\n details?: unknown,\n ) {\n super(message);\n this.name = \"AmbaApiError\";\n this.code = code;\n this.details = details;\n // Restore prototype chain when transpiled to ES5 targets — Error\n // subclasses lose their prototype otherwise and `instanceof` breaks.\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Best-effort: pull a stable error code out of a Rust `AmbaError`\n * Display string. Used by `toAmbaApiError` when the underlying thrown\n * value is a generic `Error` produced by `wasm-bindgen`'s `JsError::new`.\n *\n * Keep in sync with `sdks/core/src/error.rs::AmbaError`'s `#[error]`\n * format strings — but the parser falls back to UNKNOWN_ERROR for any\n * pattern it doesn't recognize, so a stale match list isn't a footgun,\n * just a quality-of-life regression.\n */\nfunction codeFromMessage(message: string): AmbaApiErrorCode {\n // Cheapest checks first — most production errors are auth or HTTP.\n if (message.startsWith(\"Unauthorized\")) return \"UNAUTHORIZED\";\n if (message.startsWith(\"Forbidden\")) return \"FORBIDDEN\";\n if (message.startsWith(\"Not found\")) return \"NOT_FOUND\";\n if (message.startsWith(\"Conflict\")) return \"CONFLICT\";\n if (message.startsWith(\"Rate limited\")) return \"RATE_LIMITED\";\n if (message.startsWith(\"Validation error\")) return \"VALIDATION_ERROR\";\n if (message.startsWith(\"Network error\")) return \"NETWORK_ERROR\";\n if (message.startsWith(\"HTTP error\")) return \"HTTP_ERROR\";\n if (message.startsWith(\"Circuit breaker\")) return \"CIRCUIT_OPEN\";\n if (message.startsWith(\"Consent not granted\")) return \"CONSENT_NOT_GRANTED\";\n if (message.includes(\"not initialized\")) return \"NOT_INITIALIZED\";\n if (message.startsWith(\"Invalid configuration\")) return \"INVALID_CONFIG\";\n if (message.startsWith(\"Invalid argument\")) return \"INVALID_ARGUMENT\";\n return \"UNKNOWN_ERROR\";\n}\n\n/**\n * Coerce any thrown value into an `AmbaApiError`. Idempotent — passing\n * an existing `AmbaApiError` returns it unchanged so wrappers can stack\n * without re-wrapping.\n *\n * Heuristics:\n * 1. Existing `AmbaApiError` → returned as-is.\n * 2. Object with `.code` → use that code + `.message` + `.details`.\n * 3. `Error` (e.g. WASM JsError) → infer code from message prefix.\n * 4. Anything else → stringify and tag UNKNOWN_ERROR.\n */\nexport function toAmbaApiError(err: unknown): AmbaApiError {\n if (err instanceof AmbaApiError) return err;\n if (err && typeof err === \"object\") {\n const obj = err as { code?: unknown; message?: unknown; details?: unknown };\n if (typeof obj.code === \"string\") {\n return new AmbaApiError(\n obj.code,\n typeof obj.message === \"string\" ? obj.message : \"unknown\",\n obj.details,\n );\n }\n }\n if (err instanceof Error) {\n return new AmbaApiError(codeFromMessage(err.message), err.message);\n }\n return new AmbaApiError(\"UNKNOWN_ERROR\", String(err));\n}\n\n/**\n * Wrap a thunk so any thrown value becomes an `AmbaApiError`. The\n * wrapper methods on `Amba` use this to convert WASM-emitted errors\n * uniformly at the SDK boundary.\n */\nexport async function withAmbaError<T>(thunk: () => Promise<T>): Promise<T> {\n try {\n return await thunk();\n } catch (err) {\n throw toAmbaApiError(err);\n }\n}\n","/**\n * @layers/amba-web — browser SDK for the amba platform.\n *\n * Exposes the full 25-namespace amba surface with a friendlier TypeScript\n * API than the underlying WASM core. All async operations return native\n * Promises; types are derived from the Rust core's serde definitions.\n *\n * @example\n * ```ts\n * import { Amba } from '@layers/amba-web';\n *\n * await Amba.configure({ apiKey: 'amba_pk_...' });\n *\n * const session = await Amba.auth.signInAnonymously();\n * await Amba.events.track('app_opened', { source: 'deep_link' });\n *\n * const todos = await Amba.collections.find('todos', { limit: 20 });\n * await Amba.collections.insert('todos', { title: 'Buy milk' });\n * ```\n */\n\nimport init, { AmbaCoreWasm } from \"@layers/amba-core-wasm\";\n\nexport type * from \"./types\";\nimport type {\n AmbaConfig,\n AuthResult,\n User,\n FindOptions,\n FindResponse,\n Filter,\n FilterValue,\n ConfigBundle,\n FlagAssignment,\n UserEntitlement,\n MediaAsset,\n PresignData,\n PushPlatform,\n PushToken,\n AiMessageRequest,\n AiMessageResponse,\n SocialProvider,\n Achievement,\n AchievementProgress,\n Challenge,\n ChallengeProgress,\n CurrencyBalance,\n CurrencyTransaction,\n InventoryItem,\n PurchaseRequest,\n ConsumeRequest,\n Leaderboard,\n LeaderboardEntry,\n Store,\n PurchaseOption,\n PurchaseResult,\n XpBalance,\n XpTransaction,\n Streak,\n FeedResponse,\n Friendship,\n Group,\n GroupMember,\n GroupCreate,\n GroupUpdate,\n Conversation,\n Message,\n SendMessageRequest,\n Report,\n ReportRequest,\n ReferralCode,\n ReferralClaim,\n Review,\n ReviewCreate,\n ReviewUpdate,\n Role,\n CatalogItem,\n ContentItem,\n DeepLink,\n DeepLinkCreate,\n OnboardingStatus,\n} from \"./types\";\n\nimport { LocalStoragePersistence } from \"./storage-adapter\";\nimport { encodeJson } from \"./json\";\nimport { AmbaApiError, toAmbaApiError } from \"./error\";\nimport type { Session } from \"./types\";\n\nexport { AmbaApiError } from \"./error\";\nexport type { AmbaApiErrorCode } from \"./error\";\n\n/**\n * Internal state — one instance per page. Created lazily by `Amba.configure()`.\n */\nlet coreInstance: AmbaCoreWasm | null = null;\n\nfunction requireCore(): AmbaCoreWasm {\n if (!coreInstance) {\n throw new AmbaApiError(\n \"NOT_INITIALIZED\",\n \"amba SDK not configured. Call Amba.configure({ apiKey }) at app start before any other API.\",\n );\n }\n return coreInstance;\n}\n\n/**\n * Run a single WASM-core call and rewrap any thrown value into a\n * stable `AmbaApiError`. Every method on `Amba` funnels through this\n * so callers see one error shape regardless of which layer failed\n * (FFI, network, validation, etc.). Sync `requireCore()` accessors\n * (e.g. the `anonymousId` getter) already throw the typed shape on\n * their own.\n */\nasync function coreCall<T>(fn: (c: AmbaCoreWasm) => Promise<T>): Promise<T> {\n try {\n return await fn(requireCore());\n } catch (err) {\n throw toAmbaApiError(err);\n }\n}\n\n/**\n * In-SDK auth-state pub/sub. `signIn*` / `signUp*` / `signOut` /\n * `refresh` call `notifyAuthSubscribers` after their underlying core\n * call resolves so subscribers always see a consistent `Session | null`\n * snapshot. Subscriber callbacks run synchronously inside the\n * notification path — keep them light; offload heavy work to your own\n * scheduler.\n */\ntype AuthSubscriber = (session: Session | null) => void;\nconst authSubscribers = new Set<AuthSubscriber>();\n\nfunction snapshotSession(user: User | null): Session | null {\n if (!user) return null;\n return {\n sessionToken: \"\",\n refreshToken: \"\",\n user,\n expiresAt: \"\",\n };\n}\n\nfunction notifyAuthSubscribers(session: Session | null): void {\n for (const cb of authSubscribers) {\n try {\n cb(session);\n } catch (err) {\n // Subscriber errors are isolated — one bad callback doesn't\n // block the rest. Surface in debug logs but don't rethrow into\n // the auth call path, which would mask the success result.\n if (typeof console !== \"undefined\") {\n console.error(\"[amba] onAuthStateChange callback threw\", err);\n }\n }\n }\n}\n\nasync function notifyFromAuthResult(result: AuthResult): Promise<void> {\n notifyAuthSubscribers(snapshotSession(result.user));\n}\n\n/**\n * Top-level SDK namespace.\n *\n * Stateless from the JS side — all state lives in the WASM core. Calling\n * `Amba.configure()` multiple times replaces the previous instance.\n */\nexport const Amba = {\n /**\n * Initialize the SDK. Must be called once at app start.\n *\n * Internally:\n * 1. Loads the WASM binary (one-time per page).\n * 2. Constructs an AmbaCoreWasm with a bound `fetch`.\n * 3. Seeds an `anonymous_id` from localStorage (if present) or fresh.\n */\n configure: async (config: AmbaConfig): Promise<void> => {\n if (!config.apiKey || config.apiKey.trim() === \"\") {\n throw new Error(\"Amba.configure: apiKey is required\");\n }\n // wasm-pack --target web's auto-loader does `fetch(new URL(\"./amba_core_bg.wasm\", import.meta.url))`.\n // That resolves to a `file://` URL in Node, and Node's undici doesn't\n // support the `file:` scheme — throws `fetch failed: not implemented`.\n // In Node (server-rendering, Jest/Vitest under jsdom, customer-shoes\n // smoke), read the wasm via fs and pass the bytes to init() directly.\n // In browsers, default behavior fetches the wasm from the asset URL.\n const isNode =\n typeof process !== \"undefined\" &&\n !!(process.versions && process.versions.node);\n if (isNode) {\n const [\n { readFile },\n { fileURLToPath, pathToFileURL },\n { createRequire },\n ] = await Promise.all([\n import(\"node:fs/promises\"),\n import(\"node:url\"),\n import(\"node:module\"),\n ]);\n // Resolve the wasm path through @layers/amba-core-wasm's package\n // root so we follow the same module resolution as the .js glue\n // — works whether the consumer used a bundler or a raw `node`.\n //\n // Resolution strategy, in order:\n // 1. `import.meta.resolve` (Node ≥20.6, stable in 22). Async or sync\n // depending on Node version — both return a string when awaited.\n // 2. `require.resolve` via `createRequire(import.meta.url)`. Uses\n // Node's standard module resolution which honors pnpm's\n // `.pnpm/<pkg>@<ver>/node_modules/<pkg>` layout. The previous\n // `../node_modules/...` hard-coded fallback failed on pnpm.\n // This mirrors the Node SDK fix at `packages/node/src/index.ts:124`.\n const resolveFn = (\n import.meta as unknown as {\n resolve?: (s: string) => string | Promise<string>;\n }\n ).resolve;\n let wasmJsUrl: string;\n if (resolveFn) {\n wasmJsUrl = await resolveFn(\"@layers/amba-core-wasm/wasm\");\n } else {\n const req = createRequire(import.meta.url);\n // `require.resolve` returns a filesystem path; convert to a\n // file:// URL so `fileURLToPath` below works uniformly with the\n // `import.meta.resolve` branch.\n wasmJsUrl = pathToFileURL(\n req.resolve(\"@layers/amba-core-wasm/wasm\"),\n ).href;\n }\n const bytes = await readFile(fileURLToPath(wasmJsUrl));\n await init(bytes);\n } else {\n await init();\n }\n const persistence = new LocalStoragePersistence(\n config.storagePrefix ?? \"amba\",\n );\n persistence.hydrate(); // no-op for now; reserved for future identity-cache restoration\n\n coreInstance = AmbaCoreWasm.init(\n encodeJson({\n api_key: config.apiKey,\n base_url: config.baseUrl,\n sdk_platform: \"web\",\n sdk_wrapper_version: `amba-web/${SDK_VERSION}`,\n consent_required: config.consentRequired,\n debug: config.debug,\n }),\n globalThis.fetch.bind(globalThis),\n );\n },\n\n /** Anonymous id — stable per browser. */\n get anonymousId(): string {\n return requireCore().anonymousId();\n },\n\n /** Authenticated user id, if a session is live. */\n get appUserId(): string | undefined {\n return requireCore().appUserId() ?? undefined;\n },\n\n /** Whether a session token is currently held. */\n get isAuthenticated(): boolean {\n return requireCore().isAuthenticated();\n },\n\n /** Toggle verbose logging at runtime. */\n setDebug: (enabled: boolean): void => {\n requireCore().setDebug(enabled);\n },\n\n // ── Core 9 namespaces ─────────────────────────────────────────────\n\n /** Track engagement events. */\n events: {\n track: async (\n event: string,\n properties?: Record<string, unknown>,\n ): Promise<void> => {\n await coreCall((c) => c.track(\n event,\n properties ? encodeJson(properties) : undefined,\n ));\n },\n },\n\n /** Authentication flows. */\n auth: {\n signInAnonymously: async (): Promise<AuthResult> => {\n const r = (await coreCall((c) => c.signInAnonymously())) as AuthResult;\n await notifyFromAuthResult(r);\n return r;\n },\n signInWithEmail: async (\n email: string,\n password: string,\n ): Promise<AuthResult> => {\n const r = (await coreCall((c) => c.signInWithEmail(\n email,\n password,\n ))) as AuthResult;\n await notifyFromAuthResult(r);\n return r;\n },\n signUpWithEmail: async (\n email: string,\n password: string,\n ): Promise<AuthResult> => {\n const r = (await coreCall((c) => c.signUpWithEmail(\n email,\n password,\n ))) as AuthResult;\n await notifyFromAuthResult(r);\n return r;\n },\n signInWithSocial: async (\n provider: SocialProvider,\n idToken: string,\n ): Promise<AuthResult> => {\n const r = (await coreCall((c) => c.signInWithSocial(\n provider,\n idToken,\n ))) as AuthResult;\n await notifyFromAuthResult(r);\n return r;\n },\n signOut: async (rotateAnonymousId = false): Promise<void> => {\n await coreCall((c) => c.signOut(rotateAnonymousId));\n notifyAuthSubscribers(null);\n },\n refresh: async (): Promise<AuthResult> => {\n const r = (await coreCall((c) => c.refreshSession())) as AuthResult;\n await notifyFromAuthResult(r);\n return r;\n },\n me: async (): Promise<User> => {\n return (await coreCall((c) => c.me())) as User;\n },\n\n /**\n * Snapshot the current session, or `null` if no session is live.\n * sessionToken/refreshToken/expiresAt come back as empty strings —\n * they're SDK-managed and not read-back-able from the core. Use\n * `Amba.isAuthenticated` if you only need the boolean.\n */\n getSession: async (): Promise<Session | null> => {\n const core = requireCore();\n if (!core.isAuthenticated()) return null;\n const user = (await coreCall((c) => c.me())) as User;\n return snapshotSession(user);\n },\n\n /**\n * Stable anonymous identifier (synchronous read; the WASM core\n * keeps it in memory). Sync today, async for parity with the\n * RN/native shape where the platform may need to await a\n * persistence read.\n */\n getAnonymousId: async (): Promise<string> => {\n return requireCore().anonymousId();\n },\n\n /**\n * Subscribe to session changes. Fires after every `signIn*`,\n * `signUp*`, `refresh`, and `signOut` call. Returns an\n * unsubscribe function — call it to remove the callback.\n *\n * Does NOT fire an initial snapshot when subscribed; call\n * `getSession()` once after subscribing if you need the\n * current state up front.\n */\n onAuthStateChange: (\n cb: (session: Session | null) => void,\n ): (() => void) => {\n authSubscribers.add(cb);\n return () => {\n authSubscribers.delete(cb);\n };\n },\n },\n\n /** Typed Postgres CRUD with auto-RLS. */\n collections: {\n find: async <T = unknown>(\n name: string,\n options: FindOptions = {},\n ): Promise<FindResponse<T>> => {\n return (await coreCall((c) => c.collectionsFind(\n name,\n encodeJson(options),\n ))) as FindResponse<T>;\n },\n findOne: async <T = unknown>(name: string, id: string): Promise<T> => {\n return (await coreCall((c) => c.collectionsFindOne(name, id))) as T;\n },\n insert: async <T = unknown>(\n name: string,\n row: Record<string, unknown>,\n ): Promise<T> => {\n return (await coreCall((c) => c.collectionsInsert(\n name,\n encodeJson(row),\n ))) as T;\n },\n update: async <T = unknown>(\n name: string,\n id: string,\n set: Record<string, unknown>,\n ): Promise<T> => {\n return (await coreCall((c) => c.collectionsUpdate(\n name,\n id,\n encodeJson(set),\n ))) as T;\n },\n delete: async (\n name: string,\n id: string,\n ): Promise<{ data: { deleted: boolean } }> => {\n return (await coreCall((c) => c.collectionsDelete(name, id))) as {\n data: { deleted: boolean };\n };\n },\n /** Filter DSL helpers — pass into `find({ filter: f })`. */\n where: {\n eq: (column: string, value: FilterValue): Filter => ({\n column,\n op: \"eq\",\n value,\n }),\n ne: (column: string, value: FilterValue): Filter => ({\n column,\n op: \"ne\",\n value,\n }),\n gt: (column: string, value: FilterValue): Filter => ({\n column,\n op: \"gt\",\n value,\n }),\n gte: (column: string, value: FilterValue): Filter => ({\n column,\n op: \"gte\",\n value,\n }),\n lt: (column: string, value: FilterValue): Filter => ({\n column,\n op: \"lt\",\n value,\n }),\n lte: (column: string, value: FilterValue): Filter => ({\n column,\n op: \"lte\",\n value,\n }),\n in: (column: string, values: FilterValue[]): Filter => ({\n column,\n op: \"in\",\n value: values,\n }),\n notIn: (column: string, values: FilterValue[]): Filter => ({\n column,\n op: \"not_in\",\n value: values,\n }),\n like: (column: string, pattern: string): Filter => ({\n column,\n op: \"like\",\n value: pattern,\n }),\n ilike: (column: string, pattern: string): Filter => ({\n column,\n op: \"ilike\",\n value: pattern,\n }),\n isNull: (column: string): Filter => ({ column, op: \"is_null\" }),\n isNotNull: (column: string): Filter => ({ column, op: \"is_not_null\" }),\n and: (...filters: Filter[]): Filter => ({ and: filters }),\n or: (...filters: Filter[]): Filter => ({ or: filters }),\n not: (filter: Filter): Filter => ({ not: filter }),\n },\n },\n\n /** Media uploads + CDN URL helpers. */\n storage: {\n presign: async (params: {\n bucket: string;\n filename: string;\n mimeType: string;\n sizeBytes: number;\n retentionDays?: number;\n }): Promise<PresignData> => {\n return (await coreCall((c) => c.storagePresign(\n params.bucket,\n params.filename,\n params.mimeType,\n params.sizeBytes,\n params.retentionDays ?? undefined,\n ))) as PresignData;\n },\n /**\n * Complete-flow upload: presign → PUT to R2 → commit.\n * Returns the finalized MediaAsset.\n */\n upload: async (params: {\n bucket: string;\n file: File | Blob;\n filename?: string;\n retentionDays?: number;\n }): Promise<MediaAsset> => {\n const filename =\n params.filename ??\n (\"name\" in params.file ? params.file.name : \"upload\");\n const mimeType = params.file.type || \"application/octet-stream\";\n const presign = await Amba.storage.presign({\n bucket: params.bucket,\n filename,\n mimeType,\n sizeBytes: params.file.size,\n retentionDays: params.retentionDays,\n });\n\n const uploadHeaders: Record<string, string> = {};\n for (const [k, v] of presign.upload_headers) {\n uploadHeaders[k] = v;\n }\n const putResp = await fetch(presign.upload_url, {\n method: \"PUT\",\n headers: uploadHeaders,\n body: params.file,\n });\n if (!putResp.ok) {\n throw new Error(`upload to R2 failed: status ${putResp.status}`);\n }\n\n return (await coreCall((c) => c.storageCommit(\n presign.upload_id,\n presign.asset_id,\n ))) as MediaAsset;\n },\n },\n\n /** Push notifications. */\n push: {\n register: async (\n token: string,\n platform: PushPlatform,\n bundleId?: string,\n ): Promise<PushToken> => {\n return (await coreCall((c) => c.pushRegister(\n token,\n platform,\n bundleId ?? undefined,\n ))) as PushToken;\n },\n unregister: async (token: string): Promise<void> => {\n await coreCall((c) => c.pushUnregister(token));\n },\n getTokens: async (): Promise<PushToken[]> => {\n return (await coreCall((c) => c.pushGetTokens())) as PushToken[];\n },\n subscribe: async (topic: string): Promise<void> => {\n await coreCall((c) => c.pushSubscribe(topic));\n },\n unsubscribe: async (topic: string): Promise<void> => {\n await coreCall((c) => c.pushUnsubscribe(topic));\n },\n },\n\n /** RevenueCat/App Store/Stripe entitlements. */\n entitlements: {\n list: async (): Promise<UserEntitlement[]> => {\n return (await coreCall((c) => c.entitlementsList())) as UserEntitlement[];\n },\n has: async (name: string): Promise<boolean> => {\n return (await coreCall((c) => c.entitlementsHas(name))) as boolean;\n },\n },\n\n /** LLM proxy. */\n ai: {\n anthropic: {\n messages: {\n create: async (\n request: AiMessageRequest,\n ): Promise<AiMessageResponse> => {\n return (await coreCall((c) => c.aiAnthropicMessages(\n encodeJson(request),\n ))) as AiMessageResponse;\n },\n },\n },\n },\n\n /** Remote config bundle. */\n config: {\n fetch: async (): Promise<ConfigBundle> => {\n return (await coreCall((c) => c.configFetch())) as ConfigBundle;\n },\n },\n\n /** Server-evaluated feature flags. */\n flags: {\n fetch: async (): Promise<FlagAssignment[]> => {\n return (await coreCall((c) => c.flagsFetch())) as FlagAssignment[];\n },\n },\n\n // ── Gamification ──────────────────────────────────────────────────\n\n /** Achievement definitions + per-user progress. */\n achievements: {\n getAll: async (): Promise<Achievement[]> =>\n (await coreCall((c) => c.achievementsGetAll())) as Achievement[],\n getProgress: async (): Promise<AchievementProgress[]> =>\n (await coreCall((c) => c.achievementsGetProgress())) as AchievementProgress[],\n },\n\n /** Time-bounded challenges with rewards. */\n challenges: {\n getActive: async (): Promise<Challenge[]> =>\n (await coreCall((c) => c.challengesGetActive())) as Challenge[],\n get: async (id: string): Promise<Challenge> =>\n (await coreCall((c) => c.challengesGet(id))) as Challenge,\n getProgress: async (id: string): Promise<ChallengeProgress> =>\n (await coreCall((c) => c.challengesGetProgress(id))) as ChallengeProgress,\n claim: async (id: string): Promise<ChallengeProgress> =>\n (await coreCall((c) => c.challengesClaim(id))) as ChallengeProgress,\n },\n\n /** Virtual currency balances + ledger. */\n currencies: {\n getBalance: async (): Promise<CurrencyBalance[]> =>\n (await coreCall((c) => c.currenciesGetBalance())) as CurrencyBalance[],\n getTransactions: async (\n currencyKey: string,\n ): Promise<CurrencyTransaction[]> =>\n (await coreCall((c) => c.currenciesGetTransactions(\n currencyKey,\n ))) as CurrencyTransaction[],\n },\n\n /** User inventory items + purchase/consume. */\n inventory: {\n getItems: async (): Promise<InventoryItem[]> =>\n (await coreCall((c) => c.inventoryGetItems())) as InventoryItem[],\n getItem: async (id: string): Promise<InventoryItem> =>\n (await coreCall((c) => c.inventoryGetItem(id))) as InventoryItem,\n purchase: async (request: PurchaseRequest): Promise<InventoryItem> =>\n (await coreCall((c) => c.inventoryPurchase(\n encodeJson(request),\n ))) as InventoryItem,\n consume: async (request: ConsumeRequest): Promise<InventoryItem> =>\n (await coreCall((c) => c.inventoryConsume(\n encodeJson(request),\n ))) as InventoryItem,\n },\n\n /** Score rankings. */\n leaderboards: {\n get: async (key: string): Promise<Leaderboard> =>\n (await coreCall((c) => c.leaderboardsGet(key))) as Leaderboard,\n getEntries: async (\n key: string,\n limit?: number,\n ): Promise<LeaderboardEntry[]> =>\n (await coreCall((c) => c.leaderboardsGetEntries(\n key,\n limit ?? undefined,\n ))) as LeaderboardEntry[],\n getMyRank: async (key: string): Promise<LeaderboardEntry> =>\n (await coreCall((c) => c.leaderboardsGetMyRank(key))) as LeaderboardEntry,\n },\n\n /** Purchase storefronts. */\n stores: {\n list: async (): Promise<Store[]> =>\n (await coreCall((c) => c.storesList())) as Store[],\n getPurchaseOptions: async (storeKey: string): Promise<PurchaseOption[]> =>\n (await coreCall((c) => c.storesGetPurchaseOptions(\n storeKey,\n ))) as PurchaseOption[],\n purchase: async (\n storeKey: string,\n purchaseOptionId: string,\n receipt: unknown,\n ): Promise<PurchaseResult> =>\n (await coreCall((c) => c.storesPurchase(\n storeKey,\n purchaseOptionId,\n encodeJson(receipt),\n ))) as PurchaseResult,\n },\n\n /** Experience points + level system. */\n xp: {\n getBalance: async (): Promise<XpBalance> =>\n (await coreCall((c) => c.xpGetBalance())) as XpBalance,\n getHistory: async (limit?: number): Promise<XpTransaction[]> =>\n (await coreCall((c) => c.xpGetHistory(\n limit ?? undefined,\n ))) as XpTransaction[],\n claim: async (grantKey: string): Promise<XpTransaction> =>\n (await coreCall((c) => c.xpClaim(grantKey))) as XpTransaction,\n },\n\n /** Daily-engagement streaks. */\n streaks: {\n getAll: async (): Promise<Streak[]> =>\n (await coreCall((c) => c.streaksGetAll())) as Streak[],\n qualify: async (streakKey: string): Promise<Streak> =>\n (await coreCall((c) => c.streaksQualify(streakKey))) as Streak,\n },\n\n // ── Social ─────────────────────────────────────────────────────────\n\n /** Activity feeds. */\n feeds: {\n getActivity: async (\n feed?: string,\n cursor?: string,\n ): Promise<FeedResponse> =>\n (await coreCall((c) => c.feedsGetActivity(\n feed ?? undefined,\n cursor ?? undefined,\n ))) as FeedResponse,\n },\n\n /** Friend graph + block list. */\n friends: {\n getList: async (): Promise<Friendship[]> =>\n (await coreCall((c) => c.friendsGetList())) as Friendship[],\n getFriends: async (): Promise<Friendship[]> =>\n (await coreCall((c) => c.friendsGetFriends())) as Friendship[],\n blockUser: async (userId: string): Promise<Friendship> =>\n (await coreCall((c) => c.friendsBlockUser(userId))) as Friendship,\n unblockUser: async (userId: string): Promise<void> => {\n await coreCall((c) => c.friendsUnblockUser(userId));\n },\n removeBlock: async (friendshipId: string): Promise<void> => {\n await coreCall((c) => c.friendsRemoveBlock(friendshipId));\n },\n },\n\n /** Multi-user groups. */\n groups: {\n create: async (params: GroupCreate): Promise<Group> =>\n (await coreCall((c) => c.groupsCreate(encodeJson(params)))) as Group,\n get: async (id: string): Promise<Group> =>\n (await coreCall((c) => c.groupsGet(id))) as Group,\n update: async (id: string, patch: GroupUpdate): Promise<Group> =>\n (await coreCall((c) => c.groupsUpdate(id, encodeJson(patch)))) as Group,\n delete: async (id: string): Promise<void> => {\n await coreCall((c) => c.groupsDelete(id));\n },\n getMembers: async (id: string): Promise<GroupMember[]> =>\n (await coreCall((c) => c.groupsGetMembers(id))) as GroupMember[],\n join: async (id: string): Promise<GroupMember> =>\n (await coreCall((c) => c.groupsJoin(id))) as GroupMember,\n leave: async (id: string): Promise<void> => {\n await coreCall((c) => c.groupsLeave(id));\n },\n invite: async (id: string, userId: string): Promise<GroupMember> =>\n (await coreCall((c) => c.groupsInvite(id, userId))) as GroupMember,\n },\n\n /** User-to-user direct messaging. */\n messaging: {\n getConversations: async (): Promise<Conversation[]> =>\n (await coreCall((c) => c.messagingGetConversations())) as Conversation[],\n getMessage: async (id: string): Promise<Message> =>\n (await coreCall((c) => c.messagingGetMessage(id))) as Message,\n sendMessage: async (request: SendMessageRequest): Promise<Message> =>\n (await coreCall((c) => c.messagingSendMessage(\n encodeJson(request),\n ))) as Message,\n },\n\n /** Report users / content for moderation. */\n moderation: {\n reportUser: async (request: ReportRequest): Promise<Report> =>\n (await coreCall((c) => c.moderationReportUser(\n encodeJson(request),\n ))) as Report,\n reportContent: async (request: ReportRequest): Promise<Report> =>\n (await coreCall((c) => c.moderationReportContent(\n encodeJson(request),\n ))) as Report,\n getReportStatus: async (id: string): Promise<Report> =>\n (await coreCall((c) => c.moderationGetReportStatus(id))) as Report,\n },\n\n /** User reviews of catalog items or other users. */\n reviews: {\n list: async (targetType: string, targetId: string): Promise<Review[]> =>\n (await coreCall((c) => c.reviewsList(targetType, targetId))) as Review[],\n create: async (params: ReviewCreate): Promise<Review> =>\n (await coreCall((c) => c.reviewsCreate(encodeJson(params)))) as Review,\n update: async (id: string, patch: ReviewUpdate): Promise<Review> =>\n (await coreCall((c) => c.reviewsUpdate(id, encodeJson(patch)))) as Review,\n delete: async (id: string): Promise<void> => {\n await coreCall((c) => c.reviewsDelete(id));\n },\n },\n\n /** RBAC roles + permission checks. */\n roles: {\n getMyRoles: async (): Promise<Role[]> =>\n (await coreCall((c) => c.rolesGetMyRoles())) as Role[],\n hasPermission: async (permission: string): Promise<boolean> =>\n (await coreCall((c) => c.rolesHasPermission(permission))) as boolean,\n },\n\n /** Referral codes + claim flow. */\n referrals: {\n getReferralCode: async (): Promise<ReferralCode> =>\n (await coreCall((c) => c.referralsGetReferralCode())) as ReferralCode,\n claimReferral: async (code: string): Promise<ReferralClaim> =>\n (await coreCall((c) => c.referralsClaimReferral(code))) as ReferralClaim,\n create: async (\n code?: string,\n maxUses?: number,\n ): Promise<ReferralCode> =>\n (await coreCall((c) => c.referralsCreate(\n code ?? undefined,\n maxUses ?? undefined,\n ))) as ReferralCode,\n },\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n /** Read-only product catalog. */\n catalog: {\n list: async (): Promise<CatalogItem[]> =>\n (await coreCall((c) => c.catalogList())) as CatalogItem[],\n },\n\n /** Developer-defined content items (daily quotes, lessons, etc.). */\n content: {\n /**\n * Get today's published item for `channel`. Defaults to `\"default\"`\n * so single-channel apps can call `Amba.content.getToday()` bare.\n */\n getToday: async (channel: string = \"default\"): Promise<ContentItem | null> =>\n (await coreCall((c) => c.contentGetToday(channel))) as ContentItem | null,\n /**\n * Paginated library list for `channel`. `options.limit` caps page size\n * (server default applies when omitted); `options.cursor` is the\n * opaque token returned by a prior response's `next_cursor`.\n */\n getLibrary: async (\n channel: string = \"default\",\n options?: { limit?: number; cursor?: string },\n ): Promise<ContentItem[]> =>\n (await coreCall((c) => c.contentGetLibrary(\n channel,\n options?.limit ?? undefined,\n options?.cursor ?? undefined,\n ))) as ContentItem[],\n getItem: async (id: string): Promise<ContentItem> =>\n (await coreCall((c) => c.contentGetItem(id))) as ContentItem,\n updateItem: async (id: string, state: unknown): Promise<ContentItem> =>\n (await coreCall((c) => c.contentUpdateItem(\n id,\n encodeJson(state),\n ))) as ContentItem,\n createItem: async (\n channel: string,\n item: unknown,\n ): Promise<ContentItem> =>\n (await coreCall((c) => c.contentCreateItem(\n channel,\n encodeJson(item),\n ))) as ContentItem,\n },\n\n /** Server-managed deep link records. */\n deepLinks: {\n get: async (shortCode: string): Promise<DeepLink> =>\n (await coreCall((c) => c.deepLinksGet(shortCode))) as DeepLink,\n create: async (params: DeepLinkCreate): Promise<DeepLink> =>\n (await coreCall((c) => c.deepLinksCreate(encodeJson(params)))) as DeepLink,\n },\n\n /** Step-by-step user onboarding flow. */\n onboarding: {\n getStatus: async (): Promise<OnboardingStatus> =>\n (await coreCall((c) => c.onboardingGetStatus())) as OnboardingStatus,\n nextStep: async (payload: unknown): Promise<OnboardingStatus> =>\n (await coreCall((c) => c.onboardingNextStep(\n encodeJson(payload),\n ))) as OnboardingStatus,\n skipStep: async (): Promise<OnboardingStatus> =>\n (await coreCall((c) => c.onboardingSkipStep())) as OnboardingStatus,\n complete: async (): Promise<OnboardingStatus> =>\n (await coreCall((c) => c.onboardingComplete())) as OnboardingStatus,\n },\n};\n\n/** Escape hatch — the raw WASM handle, for namespaces not yet wrapped. */\nexport function getCoreWasm(): AmbaCoreWasm {\n return requireCore();\n}\n\n/** Package version stamped at build time. */\nexport const SDK_VERSION = \"0.1.0\";\n"],"mappings":"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"}
|