@dynamic-labs-sdk/client 0.0.1-alpha.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.
Files changed (151) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +29 -0
  3. package/index.cjs.d.ts +1 -0
  4. package/index.cjs.js +530 -0
  5. package/index.esm.d.ts +1 -0
  6. package/index.esm.js +522 -0
  7. package/package.json +20 -0
  8. package/src/client/consts.d.ts +5 -0
  9. package/src/client/consts.d.ts.map +1 -0
  10. package/src/client/createCore/createCore.d.ts +7 -0
  11. package/src/client/createCore/createCore.d.ts.map +1 -0
  12. package/src/client/createCore/index.d.ts +2 -0
  13. package/src/client/createCore/index.d.ts.map +1 -0
  14. package/src/client/createCore/types/DynamicCore.d.ts +56 -0
  15. package/src/client/createCore/types/DynamicCore.d.ts.map +1 -0
  16. package/src/client/createCore/types/DynamicCoreConfig.d.ts +6 -0
  17. package/src/client/createCore/types/DynamicCoreConfig.d.ts.map +1 -0
  18. package/src/client/createCore/types/DynamicCoreState.d.ts +30 -0
  19. package/src/client/createCore/types/DynamicCoreState.d.ts.map +1 -0
  20. package/src/client/createCore/types/index.d.ts +4 -0
  21. package/src/client/createCore/types/index.d.ts.map +1 -0
  22. package/src/client/createDynamicClient/createDynamicClient.d.ts +3 -0
  23. package/src/client/createDynamicClient/createDynamicClient.d.ts.map +1 -0
  24. package/src/client/createDynamicClient/index.d.ts +2 -0
  25. package/src/client/createDynamicClient/index.d.ts.map +1 -0
  26. package/src/client/types/DynamicClient.d.ts +25 -0
  27. package/src/client/types/DynamicClient.d.ts.map +1 -0
  28. package/src/client/types/DynamicClientConfig.d.ts +42 -0
  29. package/src/client/types/DynamicClientConfig.d.ts.map +1 -0
  30. package/src/client/types/index.d.ts +3 -0
  31. package/src/client/types/index.d.ts.map +1 -0
  32. package/src/errors/base/BaseError.d.ts +29 -0
  33. package/src/errors/base/BaseError.d.ts.map +1 -0
  34. package/src/errors/base/index.d.ts +2 -0
  35. package/src/errors/base/index.d.ts.map +1 -0
  36. package/src/index.d.ts +9 -0
  37. package/src/index.d.ts.map +1 -0
  38. package/src/modules/apiClient/createApiClient.d.ts +9 -0
  39. package/src/modules/apiClient/createApiClient.d.ts.map +1 -0
  40. package/src/modules/apiClient/index.d.ts +2 -0
  41. package/src/modules/apiClient/index.d.ts.map +1 -0
  42. package/src/modules/auth/logout/index.d.ts +3 -0
  43. package/src/modules/auth/logout/index.d.ts.map +1 -0
  44. package/src/modules/auth/logout/logout.d.ts +3 -0
  45. package/src/modules/auth/logout/logout.d.ts.map +1 -0
  46. package/src/modules/auth/logout/types.d.ts +10 -0
  47. package/src/modules/auth/logout/types.d.ts.map +1 -0
  48. package/src/modules/events/events.d.ts +19 -0
  49. package/src/modules/events/events.d.ts.map +1 -0
  50. package/src/modules/events/index.d.ts +2 -0
  51. package/src/modules/events/index.d.ts.map +1 -0
  52. package/src/modules/events/types.d.ts +12 -0
  53. package/src/modules/events/types.d.ts.map +1 -0
  54. package/src/modules/initializeClient/errors/ClientAlreadyInitializedError.d.ts +5 -0
  55. package/src/modules/initializeClient/errors/ClientAlreadyInitializedError.d.ts.map +1 -0
  56. package/src/modules/initializeClient/index.d.ts +2 -0
  57. package/src/modules/initializeClient/index.d.ts.map +1 -0
  58. package/src/modules/initializeClient/initializeClient.d.ts +7 -0
  59. package/src/modules/initializeClient/initializeClient.d.ts.map +1 -0
  60. package/src/modules/otp/sendEmailOTP/index.d.ts +2 -0
  61. package/src/modules/otp/sendEmailOTP/index.d.ts.map +1 -0
  62. package/src/modules/otp/sendEmailOTP/sendEmailOTP.d.ts +7 -0
  63. package/src/modules/otp/sendEmailOTP/sendEmailOTP.d.ts.map +1 -0
  64. package/src/modules/otp/types.d.ts +19 -0
  65. package/src/modules/otp/types.d.ts.map +1 -0
  66. package/src/modules/otp/verifyOTP/index.d.ts +2 -0
  67. package/src/modules/otp/verifyOTP/index.d.ts.map +1 -0
  68. package/src/modules/otp/verifyOTP/verifyOTP.d.ts +6 -0
  69. package/src/modules/otp/verifyOTP/verifyOTP.d.ts.map +1 -0
  70. package/src/modules/projectSettings/fetchProjectSettings.d.ts +6 -0
  71. package/src/modules/projectSettings/fetchProjectSettings.d.ts.map +1 -0
  72. package/src/modules/projectSettings/index.d.ts +2 -0
  73. package/src/modules/projectSettings/index.d.ts.map +1 -0
  74. package/src/modules/user/types.d.ts +6 -0
  75. package/src/modules/user/types.d.ts.map +1 -0
  76. package/src/services/asyncTrack/createAsyncTrack.d.ts +6 -0
  77. package/src/services/asyncTrack/createAsyncTrack.d.ts.map +1 -0
  78. package/src/services/asyncTrack/errors/CannotTrackError.d.ts +5 -0
  79. package/src/services/asyncTrack/errors/CannotTrackError.d.ts.map +1 -0
  80. package/src/services/asyncTrack/index.d.ts +3 -0
  81. package/src/services/asyncTrack/index.d.ts.map +1 -0
  82. package/src/services/asyncTrack/types.d.ts +45 -0
  83. package/src/services/asyncTrack/types.d.ts.map +1 -0
  84. package/src/services/eventEmitter/createEventEmitter.d.ts +3 -0
  85. package/src/services/eventEmitter/createEventEmitter.d.ts.map +1 -0
  86. package/src/services/eventEmitter/index.d.ts +2 -0
  87. package/src/services/eventEmitter/index.d.ts.map +1 -0
  88. package/src/services/fetch/createWebFetch.d.ts +6 -0
  89. package/src/services/fetch/createWebFetch.d.ts.map +1 -0
  90. package/src/services/fetch/index.d.ts +2 -0
  91. package/src/services/fetch/index.d.ts.map +1 -0
  92. package/src/services/fetch/types.d.ts +5 -0
  93. package/src/services/fetch/types.d.ts.map +1 -0
  94. package/src/services/logger/createLogger/createLogger.d.ts +14 -0
  95. package/src/services/logger/createLogger/createLogger.d.ts.map +1 -0
  96. package/src/services/logger/createLogger/index.d.ts +2 -0
  97. package/src/services/logger/createLogger/index.d.ts.map +1 -0
  98. package/src/services/logger/index.d.ts +2 -0
  99. package/src/services/logger/index.d.ts.map +1 -0
  100. package/src/services/logger/types.d.ts +15 -0
  101. package/src/services/logger/types.d.ts.map +1 -0
  102. package/src/services/openDeeplink/createWebDeeplinkOpener/createWebDeeplinkOpener.d.ts +6 -0
  103. package/src/services/openDeeplink/createWebDeeplinkOpener/createWebDeeplinkOpener.d.ts.map +1 -0
  104. package/src/services/openDeeplink/createWebDeeplinkOpener/index.d.ts +2 -0
  105. package/src/services/openDeeplink/createWebDeeplinkOpener/index.d.ts.map +1 -0
  106. package/src/services/openDeeplink/index.d.ts +2 -0
  107. package/src/services/openDeeplink/index.d.ts.map +1 -0
  108. package/src/services/openDeeplink/types.d.ts +5 -0
  109. package/src/services/openDeeplink/types.d.ts.map +1 -0
  110. package/src/services/storage/createWebStorage/createWebStorage.d.ts +6 -0
  111. package/src/services/storage/createWebStorage/createWebStorage.d.ts.map +1 -0
  112. package/src/services/storage/createWebStorage/formatForStorage/index.d.ts +2 -0
  113. package/src/services/storage/createWebStorage/formatForStorage/index.d.ts.map +1 -0
  114. package/src/services/storage/createWebStorage/formatForStorage/storageFormat.d.ts +3 -0
  115. package/src/services/storage/createWebStorage/formatForStorage/storageFormat.d.ts.map +1 -0
  116. package/src/services/storage/createWebStorage/index.d.ts +2 -0
  117. package/src/services/storage/createWebStorage/index.d.ts.map +1 -0
  118. package/src/services/storage/types.d.ts +24 -0
  119. package/src/services/storage/types.d.ts.map +1 -0
  120. package/src/utils/deferredPromise/createDeferredPromise.d.ts +3 -0
  121. package/src/utils/deferredPromise/createDeferredPromise.d.ts.map +1 -0
  122. package/src/utils/deferredPromise/index.d.ts +3 -0
  123. package/src/utils/deferredPromise/index.d.ts.map +1 -0
  124. package/src/utils/deferredPromise/types.d.ts +6 -0
  125. package/src/utils/deferredPromise/types.d.ts.map +1 -0
  126. package/src/utils/getClient/assignClient.d.ts +3 -0
  127. package/src/utils/getClient/assignClient.d.ts.map +1 -0
  128. package/src/utils/getClient/erros/ClientNotPresentError.d.ts +5 -0
  129. package/src/utils/getClient/erros/ClientNotPresentError.d.ts.map +1 -0
  130. package/src/utils/getClient/getClient.d.ts +2 -0
  131. package/src/utils/getClient/getClient.d.ts.map +1 -0
  132. package/src/utils/getClient/index.d.ts +3 -0
  133. package/src/utils/getClient/index.d.ts.map +1 -0
  134. package/src/utils/getCore/getCore.d.ts +4 -0
  135. package/src/utils/getCore/getCore.d.ts.map +1 -0
  136. package/src/utils/getCore/index.d.ts +2 -0
  137. package/src/utils/getCore/index.d.ts.map +1 -0
  138. package/src/utils/observable/createObservableState/createObservableState.d.ts +3 -0
  139. package/src/utils/observable/createObservableState/createObservableState.d.ts.map +1 -0
  140. package/src/utils/observable/createObservableState/index.d.ts +2 -0
  141. package/src/utils/observable/createObservableState/index.d.ts.map +1 -0
  142. package/src/utils/observable/subscribeWithSelector/index.d.ts +2 -0
  143. package/src/utils/observable/subscribeWithSelector/index.d.ts.map +1 -0
  144. package/src/utils/observable/subscribeWithSelector/isEqualShallow/index.d.ts +2 -0
  145. package/src/utils/observable/subscribeWithSelector/isEqualShallow/index.d.ts.map +1 -0
  146. package/src/utils/observable/subscribeWithSelector/isEqualShallow/isEqualShallow.d.ts +7 -0
  147. package/src/utils/observable/subscribeWithSelector/isEqualShallow/isEqualShallow.d.ts.map +1 -0
  148. package/src/utils/observable/subscribeWithSelector/subscribeWithSelector.d.ts +10 -0
  149. package/src/utils/observable/subscribeWithSelector/subscribeWithSelector.d.ts.map +1 -0
  150. package/src/utils/observable/types.d.ts +28 -0
  151. package/src/utils/observable/types.d.ts.map +1 -0
package/index.esm.js ADDED
@@ -0,0 +1,522 @@
1
+ import { SDKApi, Configuration } from '@dynamic-labs/sdk-api-core';
2
+ import EventEmitter$1, { EventEmitter } from 'eventemitter3';
3
+
4
+ const getCore = (client)=>{
5
+ // @ts-expect-error - this was hidden from the public API
6
+ return client.__core;
7
+ };
8
+
9
+ function _extends() {
10
+ _extends = Object.assign || function assign(target) {
11
+ for(var i = 1; i < arguments.length; i++){
12
+ var source = arguments[i];
13
+ for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
14
+ }
15
+ return target;
16
+ };
17
+ return _extends.apply(this, arguments);
18
+ }
19
+
20
+ var version = "0.0.1-alpha.1";
21
+ var dependencies = {
22
+ "@dynamic-labs/sdk-api-core": "0.0.630"};
23
+
24
+ /**
25
+ * Returns a new instance of the SDK API client.
26
+ *
27
+ * This is not meant for storing, as it is very light we can create it whenever needed.
28
+ */ const createApiClient = (client)=>{
29
+ const core = getCore(client);
30
+ const settings = {
31
+ basePath: core.apiBaseUrl,
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ 'x-dyn-api-version': dependencies['@dynamic-labs/sdk-api-core'],
35
+ 'x-dyn-version': core.version
36
+ }
37
+ };
38
+ if (client.token) {
39
+ settings.headers.Authorization = `Bearer ${client.token}`;
40
+ }
41
+ return new SDKApi(new Configuration(_extends({}, settings, {
42
+ fetchApi: core.fetch
43
+ })));
44
+ };
45
+
46
+ /**
47
+ * Updates the project settings in the core state to the latest values.
48
+ */ const fetchProjectSettings = async (client)=>{
49
+ const core = getCore(client);
50
+ const apiClient = createApiClient(client);
51
+ const projectSettings = await apiClient.getEnvironmentSettings({
52
+ environmentId: core.environmentId,
53
+ sdkVersion: `WalletKit/${core.version}`
54
+ }, {
55
+ credentials: 'omit'
56
+ });
57
+ core.state.set({
58
+ projectSettings
59
+ });
60
+ return projectSettings;
61
+ };
62
+
63
+ const getDetails = ({ details, cause })=>{
64
+ if (cause instanceof BaseError) {
65
+ return cause.details;
66
+ }
67
+ if (cause == null ? void 0 : cause.message) {
68
+ return cause.message;
69
+ }
70
+ return details;
71
+ };
72
+ /**
73
+ * Formats the error message with all available information
74
+ */ const formatMessage = ({ shortMessage, details, docsUrl, metaMessages })=>{
75
+ return [
76
+ shortMessage,
77
+ '',
78
+ ...metaMessages ? [
79
+ ...metaMessages,
80
+ ''
81
+ ] : [],
82
+ ...docsUrl ? [
83
+ `Docs: ${docsUrl}`
84
+ ] : [],
85
+ ...details ? [
86
+ `Details: ${details}`
87
+ ] : [],
88
+ `Version: ${version}`,
89
+ `Timestamp: ${new Date().toISOString()}`
90
+ ].join('\n');
91
+ };
92
+ /**
93
+ * Base error class that provides structured error handling with detailed information
94
+ */ class BaseError extends Error {
95
+ /**
96
+ * Walks the cause chain of the error and returns the root error
97
+ */ walk() {
98
+ const cause = this.cause;
99
+ if (cause instanceof BaseError) {
100
+ return cause.walk();
101
+ }
102
+ return cause;
103
+ }
104
+ constructor(args){
105
+ const details = getDetails(args);
106
+ super(formatMessage(_extends({}, args, {
107
+ details
108
+ })), args.cause ? {
109
+ cause: args.cause
110
+ } : undefined);
111
+ this.name = 'BaseError';
112
+ this.details = details;
113
+ var _args_name;
114
+ this.name = (_args_name = args.name) != null ? _args_name : this.name;
115
+ var _args_cause;
116
+ this.cause = (_args_cause = args.cause) != null ? _args_cause : this.cause;
117
+ }
118
+ }
119
+
120
+ class ClientAlreadyInitializedError extends BaseError {
121
+ constructor(){
122
+ super({
123
+ cause: null,
124
+ docsUrl: null,
125
+ name: 'ClientAlreadyInitializedError',
126
+ shortMessage: 'Client must not be initialized more than once'
127
+ });
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Orchestrates the initialization of all modules and services of the SDK, and keeps
133
+ * the loading flag updated.
134
+ */ const initializeClient = async (client)=>{
135
+ const core = getCore(client);
136
+ if (core.state.get().initStatus !== 'uninitialized') {
137
+ throw new ClientAlreadyInitializedError();
138
+ }
139
+ core.state.set({
140
+ initStatus: 'in-progress'
141
+ });
142
+ const projectSettingsPromise = fetchProjectSettings(client);
143
+ core.initTrack.track({
144
+ name: 'project-settings',
145
+ promise: projectSettingsPromise
146
+ });
147
+ try {
148
+ await core.initTrack.waitForAll();
149
+ core.state.set({
150
+ initStatus: 'finished'
151
+ });
152
+ } catch (error) {
153
+ core.state.set({
154
+ initStatus: 'failed'
155
+ });
156
+ throw error;
157
+ }
158
+ };
159
+
160
+ const createDeferredPromise = ()=>{
161
+ let resolve;
162
+ let reject;
163
+ const promise = new Promise((_resolve, _reject)=>{
164
+ resolve = _resolve;
165
+ reject = _reject;
166
+ });
167
+ return {
168
+ promise,
169
+ reject: (reason)=>reject == null ? void 0 : reject(reason),
170
+ resolve: (value)=>resolve == null ? void 0 : resolve(value)
171
+ };
172
+ };
173
+
174
+ class CannotTrackError extends BaseError {
175
+ constructor(){
176
+ super({
177
+ cause: null,
178
+ docsUrl: null,
179
+ name: 'CannotTrackError',
180
+ shortMessage: 'All track calls must be performed in the same node tick'
181
+ });
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Creates a tracker that associates names with promises and raises as promises resolve.
187
+ */ const createAsyncTrack = ()=>{
188
+ /**
189
+ * Whether tracking is enabled.
190
+ * All processes must be tracked on the same node tick.
191
+ *
192
+ * This ensures no process is missed (as it would throw when tracked on a different node tick).
193
+ */ let isTrackEnabled = true;
194
+ const eventEmitter = new EventEmitter();
195
+ const allSettledPromise = createDeferredPromise();
196
+ const tracker = new Map();
197
+ /**
198
+ * Checks if all processes are initialized and resolves the main promise if they are.
199
+ */ const checkIfAllSettled = ()=>{
200
+ const allSettled = Array.from(tracker.values()).every((status)=>status === 'resolved');
201
+ if (!allSettled) return;
202
+ allSettledPromise.resolve();
203
+ };
204
+ const track = ({ name, promise })=>{
205
+ if (!isTrackEnabled) {
206
+ throw new CannotTrackError();
207
+ }
208
+ // Disable tracking in the next node tick
209
+ void Promise.resolve().then(()=>isTrackEnabled = false);
210
+ tracker.set(name, 'pending');
211
+ promise.then(()=>{
212
+ tracker.set(name, 'resolved');
213
+ eventEmitter.emit('resolved', name);
214
+ checkIfAllSettled();
215
+ }).catch((error)=>{
216
+ tracker.set(name, 'failed');
217
+ eventEmitter.emit('failed', name, error);
218
+ allSettledPromise.reject(error);
219
+ });
220
+ };
221
+ const waitForAll = ()=>allSettledPromise.promise;
222
+ const getTracker = ()=>tracker;
223
+ return {
224
+ getTracker,
225
+ off: eventEmitter.off.bind(eventEmitter),
226
+ on: eventEmitter.on.bind(eventEmitter),
227
+ track,
228
+ waitForAll
229
+ };
230
+ };
231
+
232
+ const createEventEmitter = ()=>new EventEmitter$1();
233
+
234
+ /**
235
+ * Creates a fetch instance that uses the native window.fetch API.
236
+ */ // eslint-disable-next-line no-restricted-globals -- this is the abstraction for fetch
237
+ const createWebFetch = ()=>window.fetch;
238
+
239
+ /**
240
+ * Log levels and their corresponding numeric values
241
+ */ const LOG_LEVELS = {
242
+ debug: 0,
243
+ error: 3,
244
+ info: 1,
245
+ warn: 2
246
+ };
247
+ // Assign to avoid lint errors
248
+ const defaultConsole = console;
249
+ /**
250
+ * Creates a logger instance with configurable log level and event emission capabilities.
251
+ * @returns A logger instance with debug, info, warn, and error methods
252
+ */ const createLogger = (options = {})=>{
253
+ const eventEmitter = new EventEmitter();
254
+ var _options_level;
255
+ // Default to 'debug' if no level is provided
256
+ const minLevel = (_options_level = options.level) != null ? _options_level : 'warn';
257
+ // Helper to decide if we should log based on current log level
258
+ const shouldLog = (level)=>{
259
+ return LOG_LEVELS[level] >= LOG_LEVELS[minLevel];
260
+ };
261
+ // Helper to format the log message
262
+ const formatMessage = (level, message)=>{
263
+ const timestamp = new Date().toISOString();
264
+ return `[${timestamp}] ${level.toUpperCase()}: ${message}`;
265
+ };
266
+ // Unified logger function that checks the level and calls the appropriate console method
267
+ const log = (level, consoleMethod, message, ...args)=>{
268
+ eventEmitter.emit('log', level, message, ...args);
269
+ if (!shouldLog(level)) return;
270
+ consoleMethod(formatMessage(level, message), ...args);
271
+ };
272
+ return {
273
+ debug: (message, ...args)=>log('debug', defaultConsole.debug, message, ...args),
274
+ error: (message, ...args)=>log('error', defaultConsole.error, message, ...args),
275
+ info: (message, ...args)=>log('info', defaultConsole.info, message, ...args),
276
+ off: eventEmitter.off.bind(eventEmitter),
277
+ on: eventEmitter.on.bind(eventEmitter),
278
+ warn: (message, ...args)=>log('warn', defaultConsole.warn, message, ...args)
279
+ };
280
+ };
281
+
282
+ /**
283
+ * Creates a deeplink opener that uses the native window.open API.
284
+ */ const createWebDeeplinkOpener = ()=>{
285
+ return async (url)=>{
286
+ // eslint-disable-next-line no-restricted-globals -- this is the abstraction for opening a deeplink
287
+ window.open(url, '_blank');
288
+ };
289
+ };
290
+
291
+ const formatForStorage = (value)=>{
292
+ const item = {
293
+ value
294
+ };
295
+ return JSON.stringify(item);
296
+ };
297
+ const parseFromStorage = (value)=>{
298
+ const item = JSON.parse(value);
299
+ return item.value;
300
+ };
301
+
302
+ /**
303
+ * Creates a Storage instance that uses localStorage as the storage model meant for use in the browser.
304
+ */ const createWebStorage = ()=>({
305
+ getItem: async (key)=>{
306
+ const rawItem = localStorage.getItem(key);
307
+ return rawItem ? parseFromStorage(rawItem) : null;
308
+ },
309
+ removeItem: async (key)=>{
310
+ localStorage.removeItem(key);
311
+ },
312
+ setItem: async (key, value)=>{
313
+ const item = formatForStorage(value);
314
+ localStorage.setItem(key, item);
315
+ }
316
+ });
317
+
318
+ const createObservableState = (getInitialState)=>{
319
+ // ===============
320
+ // NOTIFICATIONS
321
+ // ===============
322
+ const subscribers = new Set();
323
+ const notifySubscribers = (value)=>{
324
+ subscribers.forEach((callback)=>callback(value));
325
+ };
326
+ const subscribe = (callback)=>{
327
+ subscribers.add(callback);
328
+ return ()=>unsubscribe(callback);
329
+ };
330
+ const unsubscribe = (callback)=>{
331
+ subscribers.delete(callback);
332
+ };
333
+ // ===============
334
+ // STATE
335
+ // ===============
336
+ const currentValue = getInitialState();
337
+ const get = ()=>currentValue;
338
+ const set = (partial)=>{
339
+ Object.assign(currentValue, partial);
340
+ notifySubscribers(currentValue);
341
+ };
342
+ return {
343
+ get,
344
+ getInitialState,
345
+ set,
346
+ subscribe,
347
+ unsubscribe
348
+ };
349
+ };
350
+
351
+ /**
352
+ * The default API base URL for Dynamic apps in production.
353
+ */ const DEFAULT_API_BASE_URL = 'https://app.dynamic.xyz/api/v0';
354
+
355
+ /**
356
+ * Creates a core instance that contains all the services and state of the Dynamic SDK client.
357
+ */ const createCore = (config)=>{
358
+ var _config_coreConfig, _config_coreConfig1, _config_coreConfig2, _config_coreConfig3, _config_coreConfig4;
359
+ var _config_coreConfig_apiBaseUrl;
360
+ const apiBaseUrl = (_config_coreConfig_apiBaseUrl = (_config_coreConfig = config.coreConfig) == null ? void 0 : _config_coreConfig.apiBaseUrl) != null ? _config_coreConfig_apiBaseUrl : DEFAULT_API_BASE_URL;
361
+ var _config_coreConfig_logger;
362
+ const logger = (_config_coreConfig_logger = (_config_coreConfig1 = config.coreConfig) == null ? void 0 : _config_coreConfig1.logger) != null ? _config_coreConfig_logger : createLogger();
363
+ var _config_coreConfig_storage;
364
+ const storage = (_config_coreConfig_storage = (_config_coreConfig2 = config.coreConfig) == null ? void 0 : _config_coreConfig2.storage) != null ? _config_coreConfig_storage : createWebStorage();
365
+ var _config_coreConfig_fetch;
366
+ const fetch = (_config_coreConfig_fetch = (_config_coreConfig3 = config.coreConfig) == null ? void 0 : _config_coreConfig3.fetch) != null ? _config_coreConfig_fetch : createWebFetch();
367
+ var _config_coreConfig_openDeeplink;
368
+ const openDeeplink = (_config_coreConfig_openDeeplink = (_config_coreConfig4 = config.coreConfig) == null ? void 0 : _config_coreConfig4.openDeeplink) != null ? _config_coreConfig_openDeeplink : createWebDeeplinkOpener();
369
+ const state = createObservableState(()=>({
370
+ initStatus: 'uninitialized',
371
+ loaded: false,
372
+ projectSettings: null,
373
+ token: null,
374
+ user: null
375
+ }));
376
+ const eventEmitter = createEventEmitter();
377
+ const initTrack = createAsyncTrack();
378
+ return {
379
+ apiBaseUrl,
380
+ environmentId: config.environmentId,
381
+ eventEmitter,
382
+ fetch,
383
+ initTrack,
384
+ logger,
385
+ openDeeplink,
386
+ state,
387
+ storage,
388
+ version
389
+ };
390
+ };
391
+
392
+ const createDynamicClient = (config)=>{
393
+ const core = createCore(config);
394
+ const client = {
395
+ get __core () {
396
+ return core;
397
+ },
398
+ get initStatus () {
399
+ return core.state.get().initStatus;
400
+ },
401
+ get projectSettings () {
402
+ return core.state.get().projectSettings;
403
+ },
404
+ get token () {
405
+ return core.state.get().token;
406
+ },
407
+ get user () {
408
+ return core.state.get().user;
409
+ }
410
+ };
411
+ var _config_autoInitialize;
412
+ const autoInitialize = (_config_autoInitialize = config.autoInitialize) != null ? _config_autoInitialize : true;
413
+ if (autoInitialize) {
414
+ void initializeClient(client);
415
+ }
416
+ return client;
417
+ };
418
+
419
+ const logout = async (client)=>{
420
+ const core = getCore(client);
421
+ const apiClient = createApiClient(client);
422
+ await apiClient.revokeSession({
423
+ environmentId: core.environmentId
424
+ });
425
+ core.state.set({
426
+ token: null,
427
+ user: null
428
+ });
429
+ };
430
+
431
+ /**
432
+ * Listen to an event from the client.
433
+ *
434
+ * @returns A function that can be called to remove the listener.
435
+ */ const onEvent = (client, event, listener)=>{
436
+ const { eventEmitter } = getCore(client);
437
+ eventEmitter.on(event, listener);
438
+ return ()=>{
439
+ eventEmitter.off(event, listener);
440
+ };
441
+ };
442
+ /**
443
+ * Remove a listener from an event.
444
+ */ const offEvent = (client, event, listener)=>{
445
+ const { eventEmitter } = getCore(client);
446
+ eventEmitter.off(event, listener);
447
+ };
448
+ /**
449
+ * Listen to an event that will only fire once.
450
+ *
451
+ * @returns A function that can be called to remove the listener.
452
+ */ const onceEvent = (client, event, listener)=>{
453
+ const { eventEmitter } = getCore(client);
454
+ eventEmitter.once(event, listener);
455
+ return ()=>{
456
+ eventEmitter.off(event, listener);
457
+ };
458
+ };
459
+
460
+ const assignClient = (target, client)=>{
461
+ Object.defineProperty(target, '__client', {
462
+ // hide from enumeration
463
+ configurable: true,
464
+ enumerable: false,
465
+ get: ()=>client
466
+ });
467
+ return target;
468
+ };
469
+
470
+ class ClientNotPresentError extends BaseError {
471
+ constructor(){
472
+ super({
473
+ cause: null,
474
+ docsUrl: null,
475
+ name: 'ClientNotPresentError',
476
+ shortMessage: 'The client is not present in the target object.'
477
+ });
478
+ }
479
+ }
480
+
481
+ const getClient = (target)=>{
482
+ if (!Object.prototype.hasOwnProperty.call(target, '__client')) {
483
+ throw new ClientNotPresentError();
484
+ }
485
+ // @ts-expect-error - this was hidden from the public API
486
+ return target.__client;
487
+ };
488
+
489
+ const sendEmailOTP = async (client, { email })=>{
490
+ const core = getCore(client);
491
+ const apiClient = createApiClient(client);
492
+ const { verificationUUID } = await apiClient.createEmailVerification({
493
+ emailVerificationCreateRequest: {
494
+ email
495
+ },
496
+ environmentId: core.environmentId
497
+ });
498
+ return assignClient({
499
+ email,
500
+ verificationUUID
501
+ }, client);
502
+ };
503
+
504
+ const verifyOTP = async (otpVerification, { verificationToken })=>{
505
+ const client = getClient(otpVerification);
506
+ const core = getCore(client);
507
+ const apiClient = createApiClient(client);
508
+ const { user, minifiedJwt } = await apiClient.signInWithEmailVerification({
509
+ emailVerificationVerifyRequest: {
510
+ verificationToken,
511
+ verificationUUID: otpVerification.verificationUUID
512
+ },
513
+ environmentId: core.environmentId
514
+ });
515
+ core.state.set({
516
+ token: minifiedJwt,
517
+ user
518
+ });
519
+ return user;
520
+ };
521
+
522
+ export { createDynamicClient, logout, offEvent, onEvent, onceEvent, sendEmailOTP, verifyOTP };
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@dynamic-labs-sdk/client",
3
+ "version": "0.0.1-alpha.1",
4
+ "type": "module",
5
+ "main": "./index.esm.js",
6
+ "module": "./index.esm.js",
7
+ "types": "./index.esm.d.ts",
8
+ "exports": {
9
+ "./package.json": "./package.json",
10
+ ".": {
11
+ "types": "./index.esm.d.ts",
12
+ "import": "./index.esm.js",
13
+ "default": "./index.esm.js"
14
+ }
15
+ },
16
+ "dependencies": {
17
+ "@dynamic-labs/sdk-api-core": "0.0.630",
18
+ "eventemitter3": "^5.0.1"
19
+ }
20
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * The default API base URL for Dynamic apps in production.
3
+ */
4
+ export declare const DEFAULT_API_BASE_URL = "https://app.dynamic.xyz/api/v0";
5
+ //# sourceMappingURL=consts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../../../../packages/client/src/client/consts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,oBAAoB,mCAAmC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { DynamicClientConfig } from '../types';
2
+ import type { DynamicCore } from './types';
3
+ /**
4
+ * Creates a core instance that contains all the services and state of the Dynamic SDK client.
5
+ */
6
+ export declare const createCore: (config: DynamicClientConfig) => DynamicCore;
7
+ //# sourceMappingURL=createCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCore.d.ts","sourceRoot":"","sources":["../../../../../../packages/client/src/client/createCore/createCore.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,SAAS,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,UAAU,WAAY,mBAAmB,KAAG,WAqCxD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createCore } from './createCore';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/client/src/client/createCore/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type EventEmitter from 'eventemitter3';
2
+ import type { AsyncTrack } from '../../../services/asyncTrack';
3
+ import type { Fetch } from '../../../services/fetch';
4
+ import type { Logger } from '../../../services/logger';
5
+ import type { OpenDeeplink } from '../../../services/openDeeplink';
6
+ import type { Storage } from '../../../services/storage/types';
7
+ import type { ObservableState } from '../../../utils/observable/types';
8
+ import type { DynamicCoreState } from './DynamicCoreState';
9
+ /**
10
+ * The core object needed to work with Dynamic SDK's functionality.
11
+ *
12
+ * Holds all state and services any module might need to use.
13
+ */
14
+ export type DynamicCore = {
15
+ /**
16
+ * The base URL to use for API requests to Dynamic.
17
+ */
18
+ apiBaseUrl: string;
19
+ /**
20
+ * The environment ID of the Dynamic app.
21
+ */
22
+ environmentId: string;
23
+ /**
24
+ * A generic event emitter instance for handling events.
25
+ */
26
+ eventEmitter: EventEmitter;
27
+ /**
28
+ * Instance of the fetch service, used for making any HTTP requests.
29
+ */
30
+ fetch: Fetch;
31
+ /**
32
+ * Instance of the async track service, used for tracking status of SDK initialization promises.
33
+ */
34
+ initTrack: AsyncTrack;
35
+ /**
36
+ * Instance of the logger service, used for logging messages to the console and controlling the log level.
37
+ */
38
+ logger: Logger;
39
+ /**
40
+ * Instance of the open deeplink service, used for triggering deeplinks using the appropriate device method.
41
+ */
42
+ openDeeplink: OpenDeeplink;
43
+ /**
44
+ * Reactive object with all variable state of the client.
45
+ */
46
+ state: ObservableState<DynamicCoreState>;
47
+ /**
48
+ * Instance of the storage service, used for interacting with the device's storage.
49
+ */
50
+ storage: Storage<DynamicCoreState>;
51
+ /**
52
+ * The NPM version of the Dynamic SDK client package.
53
+ */
54
+ version: string;
55
+ };
56
+ //# sourceMappingURL=DynamicCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicCore.d.ts","sourceRoot":"","sources":["../../../../../../../packages/client/src/client/createCore/types/DynamicCore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC;IAEtB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAEzC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEnC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { DynamicCore } from './DynamicCore';
2
+ /**
3
+ * Available options for internal configuration of the Dynamic SDK client.
4
+ */
5
+ export type DynamicCoreConfig = Partial<Pick<DynamicCore, 'apiBaseUrl' | 'fetch' | 'logger' | 'openDeeplink' | 'storage'>>;
6
+ //# sourceMappingURL=DynamicCoreConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicCoreConfig.d.ts","sourceRoot":"","sources":["../../../../../../../packages/client/src/client/createCore/types/DynamicCoreConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC,IAAI,CACF,WAAW,EACX,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,CAC/D,CACF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ProjectSettings } from '@dynamic-labs/sdk-api-core';
2
+ import type { User } from 'src/modules/user/types';
3
+ export type DynamicInitStatus = 'uninitialized' | 'in-progress' | 'finished' | 'failed';
4
+ /**
5
+ * Object with all variable state of the client
6
+ */
7
+ export type DynamicCoreState = {
8
+ /**
9
+ * Status of client initialization.
10
+ *
11
+ * - `uninitialized`: Initialization has not started yet.
12
+ * - `in-progress`: Initialization is in progress.
13
+ * - `finished`: Initialization has finished successfully.
14
+ * - `failed`: Initialization failed. Check console logs for more details.
15
+ */
16
+ initStatus: DynamicInitStatus;
17
+ /**
18
+ * The settings of the Dynamic project as configured in dashboard.
19
+ */
20
+ projectSettings: ProjectSettings | null;
21
+ /**
22
+ * The JWT of the current user.
23
+ */
24
+ token: string | null;
25
+ /**
26
+ * The current user of the app.
27
+ */
28
+ user: User | null;
29
+ };
30
+ //# sourceMappingURL=DynamicCoreState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicCoreState.d.ts","sourceRoot":"","sources":["../../../../../../../packages/client/src/client/createCore/types/DynamicCoreState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,aAAa,GACb,UAAU,GACV,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;;;OAOG;IACH,UAAU,EAAE,iBAAiB,CAAC;IAE9B;;OAEG;IACH,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IAExC;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB;;OAEG;IACH,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type { DynamicCore } from './DynamicCore';
2
+ export type { DynamicCoreConfig } from './DynamicCoreConfig';
3
+ export type { DynamicCoreState, DynamicInitStatus } from './DynamicCoreState';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/client/src/client/createCore/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}