joopjs 2.0.6 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/.claude/skills/observables.md +28 -0
  2. package/.claude/skills/setup.md +14 -3
  3. package/.cursor/rules/joopjs.mdc +4 -5
  4. package/.github/copilot-instructions.md +3 -1
  5. package/.windsurf/rules/joopjs.md +4 -0
  6. package/CHANGELOG.md +31 -2
  7. package/README.md +19 -7
  8. package/ai-rules/AGENTS.md +21 -0
  9. package/ai-rules/GEMINI.md +17 -3
  10. package/dist/ai/index.js +15 -3
  11. package/dist/ai/index.js.map +1 -1
  12. package/dist/ai/index.mjs +15 -3
  13. package/dist/ai/index.mjs.map +1 -1
  14. package/dist/analytics/index.js +10 -2
  15. package/dist/analytics/index.js.map +1 -1
  16. package/dist/analytics/index.mjs +10 -2
  17. package/dist/analytics/index.mjs.map +1 -1
  18. package/dist/angular/index.d.mts +98 -27
  19. package/dist/angular/index.d.ts +98 -27
  20. package/dist/angular/index.js +44 -0
  21. package/dist/angular/index.js.map +1 -1
  22. package/dist/angular/index.mjs +39 -1
  23. package/dist/angular/index.mjs.map +1 -1
  24. package/dist/api/index.js +15 -3
  25. package/dist/api/index.js.map +1 -1
  26. package/dist/api/index.mjs +15 -3
  27. package/dist/api/index.mjs.map +1 -1
  28. package/dist/auth/index.js +15 -3
  29. package/dist/auth/index.js.map +1 -1
  30. package/dist/auth/index.mjs +15 -3
  31. package/dist/auth/index.mjs.map +1 -1
  32. package/dist/banking/index.js +15 -3
  33. package/dist/banking/index.js.map +1 -1
  34. package/dist/banking/index.mjs +15 -3
  35. package/dist/banking/index.mjs.map +1 -1
  36. package/dist/cache/index.js +15 -3
  37. package/dist/cache/index.js.map +1 -1
  38. package/dist/cache/index.mjs +15 -3
  39. package/dist/cache/index.mjs.map +1 -1
  40. package/dist/{index-DFqEoX_l.d.ts → consent.service-CIHNtx9h.d.ts} +1 -2
  41. package/dist/{index-B_ksKpS1.d.mts → consent.service-DQ-JAEJx.d.mts} +1 -2
  42. package/dist/core/index.d.mts +34 -1
  43. package/dist/core/index.d.ts +34 -1
  44. package/dist/core/index.js +56 -5
  45. package/dist/core/index.js.map +1 -1
  46. package/dist/core/index.mjs +54 -6
  47. package/dist/core/index.mjs.map +1 -1
  48. package/dist/deeplink/index.js +15 -3
  49. package/dist/deeplink/index.js.map +1 -1
  50. package/dist/deeplink/index.mjs +15 -3
  51. package/dist/deeplink/index.mjs.map +1 -1
  52. package/dist/device/index.js +15 -3
  53. package/dist/device/index.js.map +1 -1
  54. package/dist/device/index.mjs +15 -3
  55. package/dist/device/index.mjs.map +1 -1
  56. package/dist/forms/index.js +15 -3
  57. package/dist/forms/index.js.map +1 -1
  58. package/dist/forms/index.mjs +15 -3
  59. package/dist/forms/index.mjs.map +1 -1
  60. package/dist/i18n/index.js +15 -3
  61. package/dist/i18n/index.js.map +1 -1
  62. package/dist/i18n/index.mjs +15 -3
  63. package/dist/i18n/index.mjs.map +1 -1
  64. package/dist/index.d.mts +2 -2
  65. package/dist/index.d.ts +2 -2
  66. package/dist/index.js +50 -8
  67. package/dist/index.js.map +1 -1
  68. package/dist/index.mjs +50 -8
  69. package/dist/index.mjs.map +1 -1
  70. package/dist/{joop-CA3DMeOO.d.ts → joop-Dim2yEKG.d.ts} +1 -1
  71. package/dist/{joop-Bx7Iwj5p.d.mts → joop-GkQw13f9.d.mts} +1 -1
  72. package/dist/native-bridge/index.js +10 -2
  73. package/dist/native-bridge/index.js.map +1 -1
  74. package/dist/native-bridge/index.mjs +10 -2
  75. package/dist/native-bridge/index.mjs.map +1 -1
  76. package/dist/network/index.js +15 -3
  77. package/dist/network/index.js.map +1 -1
  78. package/dist/network/index.mjs +15 -3
  79. package/dist/network/index.mjs.map +1 -1
  80. package/dist/observability/index.js +15 -3
  81. package/dist/observability/index.js.map +1 -1
  82. package/dist/observability/index.mjs +15 -3
  83. package/dist/observability/index.mjs.map +1 -1
  84. package/dist/pwa/index.js +15 -3
  85. package/dist/pwa/index.js.map +1 -1
  86. package/dist/pwa/index.mjs +15 -3
  87. package/dist/pwa/index.mjs.map +1 -1
  88. package/dist/react/index.d.mts +2 -2
  89. package/dist/react/index.d.ts +2 -2
  90. package/dist/react/index.js +15 -3
  91. package/dist/react/index.js.map +1 -1
  92. package/dist/react/index.mjs +15 -3
  93. package/dist/react/index.mjs.map +1 -1
  94. package/dist/router/index.js +15 -3
  95. package/dist/router/index.js.map +1 -1
  96. package/dist/router/index.mjs +15 -3
  97. package/dist/router/index.mjs.map +1 -1
  98. package/dist/security/index.js +15 -3
  99. package/dist/security/index.js.map +1 -1
  100. package/dist/security/index.mjs +15 -3
  101. package/dist/security/index.mjs.map +1 -1
  102. package/dist/session/index.js +15 -3
  103. package/dist/session/index.js.map +1 -1
  104. package/dist/session/index.mjs +15 -3
  105. package/dist/session/index.mjs.map +1 -1
  106. package/dist/state/index.js +15 -3
  107. package/dist/state/index.js.map +1 -1
  108. package/dist/state/index.mjs +15 -3
  109. package/dist/state/index.mjs.map +1 -1
  110. package/dist/storage/index.js +15 -3
  111. package/dist/storage/index.js.map +1 -1
  112. package/dist/storage/index.mjs +15 -3
  113. package/dist/storage/index.mjs.map +1 -1
  114. package/dist/sync/index.js +15 -3
  115. package/dist/sync/index.js.map +1 -1
  116. package/dist/sync/index.mjs +15 -3
  117. package/dist/sync/index.mjs.map +1 -1
  118. package/dist/theme/index.js +15 -3
  119. package/dist/theme/index.js.map +1 -1
  120. package/dist/theme/index.mjs +15 -3
  121. package/dist/theme/index.mjs.map +1 -1
  122. package/dist/ui/index.js +15 -3
  123. package/dist/ui/index.js.map +1 -1
  124. package/dist/ui/index.mjs +15 -3
  125. package/dist/ui/index.mjs.map +1 -1
  126. package/dist/utilities/index.js +46 -4
  127. package/dist/utilities/index.js.map +1 -1
  128. package/dist/utilities/index.mjs +46 -4
  129. package/dist/utilities/index.mjs.map +1 -1
  130. package/dist/vue/index.d.mts +2 -2
  131. package/dist/vue/index.d.ts +2 -2
  132. package/dist/vue/index.js +15 -3
  133. package/dist/vue/index.js.map +1 -1
  134. package/dist/vue/index.mjs +15 -3
  135. package/dist/vue/index.mjs.map +1 -1
  136. package/dist/workflow/index.js +15 -3
  137. package/dist/workflow/index.js.map +1 -1
  138. package/dist/workflow/index.mjs +15 -3
  139. package/dist/workflow/index.mjs.map +1 -1
  140. package/package.json +16 -2
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- export { J as JoopInstance, c as createJoop } from './joop-Bx7Iwj5p.mjs';
1
+ export { J as JoopInstance, c as createJoop } from './joop-GkQw13f9.mjs';
2
2
  export { JoopCapabilities, JoopPlatform, JoopPlatformConfig, JoopPlatformType } from './platform/index.mjs';
3
3
  export { J as JoopAppState, f as JoopBiometricAdapter, k as JoopCompressionAdapter, l as JoopCompressionFormat, m as JoopCryptoAdapter, c as JoopEffectiveType, e as JoopKeyVaultAdapter, i as JoopLifecycleAdapter, j as JoopNetworkAdapter, a as JoopNetworkState, b as JoopNetworkType, n as JoopPlatformAdapterConfig, g as JoopPushAdapter, h as JoopPushPayload, d as JoopStorageAdapter, o as JoopWorkerAdapter } from './adapters-B6slG6hQ.mjs';
4
4
  import { J as JoopObservable, a as JoopBehaviorSubject, b as JoopSubject } from './index-Dz0gOur2.mjs';
@@ -6,7 +6,7 @@ export { L as Listener, U as Unsubscribe } from './index-Dz0gOur2.mjs';
6
6
  export { a as JoopApp, J as JoopConfig, f as JoopLanguage, d as JoopLocalization, e as JoopLoggerConfig, g as JoopLoggerTypeConfig, h as JoopOpenBankingConfig, i as JoopPaymentGatewayConfig, c as JoopSession, b as JoopTimeout } from './config.models-Cqg04fAQ.mjs';
7
7
  export { b as JoopAesService, J as JoopGcmService, d as JoopHttpOptions, c as JoopRequestOptions, a as JoopRsaService } from './aes.service-CkoupAww.mjs';
8
8
  export { b as JoopCircuitBreaker, k as JoopCircuitBreakerConfig, l as JoopCircuitBreakerOpenError, m as JoopCircuitBreakerRegistry, n as JoopCircuitBreakerState, o as JoopCircuitBreakerStats, p as JoopCircuitState, q as JoopCsvOptions, r as JoopDownloadOptions, s as JoopEncryptionError, t as JoopError, u as JoopErrorButton, v as JoopErrorInterceptor, w as JoopErrorType, h as JoopExportService, x as JoopFetchOptions, f as JoopFileSaverService, J as JoopHttpClient, y as JoopHttpError, z as JoopIdempotencyConfig, j as JoopIdempotencyService, a as JoopInterceptorPipeline, A as JoopLoadingState, B as JoopMappedComponent, C as JoopMappedResponse, c as JoopOfflineQueue, D as JoopPollConfig, d as JoopPollingService, E as JoopRawResponse, F as JoopRawResponse6, G as JoopRequest, H as JoopRequestInterceptor, e as JoopRequestService, I as JoopResponse, K as JoopResponseInterceptor, g as JoopResponseMapper, L as JoopWebhookOptions, M as JoopWebhookProvider, i as JoopWebhookVerifier, N as isHttpError } from './idempotency.service-_6LqhivP.mjs';
9
- export { g as JoopConsentCategory, f as JoopConsentService, h as JoopConsentState, i as JoopEnvironmentName, j as JoopEnvironmentProfile, b as JoopEnvironmentService, d as JoopFeatureFlagService, k as JoopFlagContext, l as JoopFlagDefinition, m as JoopHealthCheck, n as JoopHealthCheckResult, c as JoopHealthService, o as JoopLogEntry, J as JoopLogger, p as JoopLoggerOptions, q as JoopPlugin, a as JoopPluginService, e as JoopRateLimiter, r as JoopTokenBucket, s as JoopTokenBucketConfig, t as logger } from './index-B_ksKpS1.mjs';
9
+ export { J as JoopConsentCategory, a as JoopConsentService, b as JoopConsentState, c as JoopEnvironmentName, d as JoopEnvironmentProfile, e as JoopEnvironmentService, f as JoopFeatureFlagService, g as JoopFlagContext, h as JoopFlagDefinition, i as JoopHealthCheck, j as JoopHealthCheckResult, k as JoopHealthService, s as JoopLogEntry, l as JoopLogger, t as JoopLoggerOptions, m as JoopPlugin, n as JoopPluginService, o as JoopRateLimiter, p as JoopTokenBucket, q as JoopTokenBucketConfig, r as logger } from './consent.service-DQ-JAEJx.mjs';
10
10
  export { a as JoopHttpMethod, b as JoopLogLevel, J as JoopScopeType } from './index-CqDKWTUP.mjs';
11
11
  export { J as JoopConfigService, c as configService } from './config.service-Cz4QQLlf.mjs';
12
12
  export { J as JoopDataStorage, a as JoopScopeMapService } from './data-storage.service-LvhGRCmw.mjs';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { J as JoopInstance, c as createJoop } from './joop-CA3DMeOO.js';
1
+ export { J as JoopInstance, c as createJoop } from './joop-Dim2yEKG.js';
2
2
  export { JoopCapabilities, JoopPlatform, JoopPlatformConfig, JoopPlatformType } from './platform/index.js';
3
3
  export { J as JoopAppState, f as JoopBiometricAdapter, k as JoopCompressionAdapter, l as JoopCompressionFormat, m as JoopCryptoAdapter, c as JoopEffectiveType, e as JoopKeyVaultAdapter, i as JoopLifecycleAdapter, j as JoopNetworkAdapter, a as JoopNetworkState, b as JoopNetworkType, n as JoopPlatformAdapterConfig, g as JoopPushAdapter, h as JoopPushPayload, d as JoopStorageAdapter, o as JoopWorkerAdapter } from './adapters-B6slG6hQ.js';
4
4
  import { J as JoopObservable, a as JoopBehaviorSubject, b as JoopSubject } from './index-Dz0gOur2.js';
@@ -6,7 +6,7 @@ export { L as Listener, U as Unsubscribe } from './index-Dz0gOur2.js';
6
6
  export { a as JoopApp, J as JoopConfig, f as JoopLanguage, d as JoopLocalization, e as JoopLoggerConfig, g as JoopLoggerTypeConfig, h as JoopOpenBankingConfig, i as JoopPaymentGatewayConfig, c as JoopSession, b as JoopTimeout } from './config.models-Cqg04fAQ.js';
7
7
  export { b as JoopAesService, J as JoopGcmService, d as JoopHttpOptions, c as JoopRequestOptions, a as JoopRsaService } from './aes.service-CkoupAww.js';
8
8
  export { b as JoopCircuitBreaker, k as JoopCircuitBreakerConfig, l as JoopCircuitBreakerOpenError, m as JoopCircuitBreakerRegistry, n as JoopCircuitBreakerState, o as JoopCircuitBreakerStats, p as JoopCircuitState, q as JoopCsvOptions, r as JoopDownloadOptions, s as JoopEncryptionError, t as JoopError, u as JoopErrorButton, v as JoopErrorInterceptor, w as JoopErrorType, h as JoopExportService, x as JoopFetchOptions, f as JoopFileSaverService, J as JoopHttpClient, y as JoopHttpError, z as JoopIdempotencyConfig, j as JoopIdempotencyService, a as JoopInterceptorPipeline, A as JoopLoadingState, B as JoopMappedComponent, C as JoopMappedResponse, c as JoopOfflineQueue, D as JoopPollConfig, d as JoopPollingService, E as JoopRawResponse, F as JoopRawResponse6, G as JoopRequest, H as JoopRequestInterceptor, e as JoopRequestService, I as JoopResponse, K as JoopResponseInterceptor, g as JoopResponseMapper, L as JoopWebhookOptions, M as JoopWebhookProvider, i as JoopWebhookVerifier, N as isHttpError } from './idempotency.service-eOKoISRD.js';
9
- export { g as JoopConsentCategory, f as JoopConsentService, h as JoopConsentState, i as JoopEnvironmentName, j as JoopEnvironmentProfile, b as JoopEnvironmentService, d as JoopFeatureFlagService, k as JoopFlagContext, l as JoopFlagDefinition, m as JoopHealthCheck, n as JoopHealthCheckResult, c as JoopHealthService, o as JoopLogEntry, J as JoopLogger, p as JoopLoggerOptions, q as JoopPlugin, a as JoopPluginService, e as JoopRateLimiter, r as JoopTokenBucket, s as JoopTokenBucketConfig, t as logger } from './index-DFqEoX_l.js';
9
+ export { J as JoopConsentCategory, a as JoopConsentService, b as JoopConsentState, c as JoopEnvironmentName, d as JoopEnvironmentProfile, e as JoopEnvironmentService, f as JoopFeatureFlagService, g as JoopFlagContext, h as JoopFlagDefinition, i as JoopHealthCheck, j as JoopHealthCheckResult, k as JoopHealthService, s as JoopLogEntry, l as JoopLogger, t as JoopLoggerOptions, m as JoopPlugin, n as JoopPluginService, o as JoopRateLimiter, p as JoopTokenBucket, q as JoopTokenBucketConfig, r as logger } from './consent.service-CIHNtx9h.js';
10
10
  export { a as JoopHttpMethod, b as JoopLogLevel, J as JoopScopeType } from './index-CqDKWTUP.js';
11
11
  export { J as JoopConfigService, c as configService } from './config.service-CrCvI-JS.js';
12
12
  export { J as JoopDataStorage, a as JoopScopeMapService } from './data-storage.service-DT6xaTxE.js';
package/dist/index.js CHANGED
@@ -55,6 +55,36 @@ function flattenObject(obj, prefix = "") {
55
55
  return result;
56
56
  }
57
57
 
58
+ // src/core/global-singleton.ts
59
+ var MAJOR = "2";
60
+ var REGISTRY_KEY = /* @__PURE__ */ Symbol.for(`joopjs.singletons.v${MAJOR}`);
61
+ function getRegistry() {
62
+ const g = globalThis;
63
+ let reg = g[REGISTRY_KEY];
64
+ if (!reg) {
65
+ reg = { major: MAJOR, instances: /* @__PURE__ */ new Map(), copies: 0, warned: false, warningsSilenced: false };
66
+ g[REGISTRY_KEY] = reg;
67
+ }
68
+ return reg;
69
+ }
70
+ (() => {
71
+ const reg = getRegistry();
72
+ reg.copies += 1;
73
+ if (reg.copies > 1 && !reg.warned && !reg.warningsSilenced) {
74
+ reg.warned = true;
75
+ console.warn(
76
+ `[joopjs] ${reg.copies} copies of joopjs detected in one runtime. Singletons (logger, config, event bus, \u2026) are being de-duplicated via globalThis so state stays shared, but you are shipping duplicate bytes. Share joopjs as a federation singleton: shared: { joopjs: { singleton: true, requiredVersion: '^2.0.0' } }. Call silenceDuplicateCopyWarning() to suppress this.`
77
+ );
78
+ }
79
+ })();
80
+ function globalSingleton(key, factory) {
81
+ const reg = getRegistry();
82
+ if (!reg.instances.has(key)) {
83
+ reg.instances.set(key, factory());
84
+ }
85
+ return reg.instances.get(key);
86
+ }
87
+
58
88
  // src/core/config/config.service.ts
59
89
  var JoopConfigService = class {
60
90
  _config = null;
@@ -124,9 +154,12 @@ var JoopConfigService = class {
124
154
  return this._config;
125
155
  }
126
156
  };
127
- var configService = new JoopConfigService();
157
+ var configService = globalSingleton("config", () => new JoopConfigService());
128
158
 
129
159
  // src/events/index.ts
160
+ var _onListenerError = (error) => {
161
+ console.error("[joopjs] a subject subscriber threw during emission:", error);
162
+ };
130
163
  var JoopSubject = class {
131
164
  _listeners = [];
132
165
  subscribe(listener) {
@@ -136,8 +169,13 @@ var JoopSubject = class {
136
169
  };
137
170
  }
138
171
  next(value) {
139
- for (const listener of this._listeners) {
140
- listener(value);
172
+ const listeners = this._listeners.slice();
173
+ for (const listener of listeners) {
174
+ try {
175
+ listener(value);
176
+ } catch (error) {
177
+ _onListenerError(error);
178
+ }
141
179
  }
142
180
  }
143
181
  asObservable() {
@@ -158,7 +196,11 @@ var JoopBehaviorSubject = class extends JoopSubject {
158
196
  super.next(value);
159
197
  }
160
198
  subscribe(listener) {
161
- listener(this._value);
199
+ try {
200
+ listener(this._value);
201
+ } catch (error) {
202
+ _onListenerError(error);
203
+ }
162
204
  return super.subscribe(listener);
163
205
  }
164
206
  asObservable() {
@@ -245,7 +287,7 @@ var JoopLogger = class {
245
287
  }
246
288
  }
247
289
  };
248
- var logger = new JoopLogger();
290
+ var logger = globalSingleton("logger", () => new JoopLogger());
249
291
 
250
292
  // src/core/plugin.service.ts
251
293
  var JoopPluginService = class {
@@ -880,7 +922,7 @@ var JoopClientProfile = class {
880
922
  this.extra = {};
881
923
  }
882
924
  };
883
- var clientProfile = new JoopClientProfile();
925
+ var clientProfile = globalSingleton("clientProfile", () => new JoopClientProfile());
884
926
 
885
927
  // src/api/http/http-client.ts
886
928
  var JoopHttpClient = class {
@@ -4064,7 +4106,7 @@ var JoopClipboardService = class {
4064
4106
  }
4065
4107
  }
4066
4108
  };
4067
- var clipboard = new JoopClipboardService();
4109
+ var clipboard = globalSingleton("clipboard", () => new JoopClipboardService());
4068
4110
 
4069
4111
  // src/utilities/image.utility.ts
4070
4112
  var JoopImageService = class {
@@ -18471,7 +18513,7 @@ var JoopEventBus = class {
18471
18513
  }
18472
18514
  }
18473
18515
  };
18474
- var joopEventBus = new JoopEventBus();
18516
+ var joopEventBus = globalSingleton("eventBus", () => new JoopEventBus());
18475
18517
 
18476
18518
  // src/kyc/kyc-state-machine.ts
18477
18519
  var TRANSITIONS = {