@cratis/arc 20.1.1 → 20.1.4

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 (154) hide show
  1. package/Globals.ts +7 -0
  2. package/dist/cjs/Globals.d.ts +2 -0
  3. package/dist/cjs/Globals.d.ts.map +1 -1
  4. package/dist/cjs/Globals.js +1 -0
  5. package/dist/cjs/Globals.js.map +1 -1
  6. package/dist/cjs/identity/IdentityProvider.d.ts +2 -1
  7. package/dist/cjs/identity/IdentityProvider.d.ts.map +1 -1
  8. package/dist/cjs/identity/IdentityProvider.js +16 -2
  9. package/dist/cjs/identity/IdentityProvider.js.map +1 -1
  10. package/dist/cjs/identity/for_IdentityProvider/when_refreshing/with_unauthorized_response.d.ts +2 -0
  11. package/dist/cjs/identity/for_IdentityProvider/when_refreshing/with_unauthorized_response.d.ts.map +1 -0
  12. package/dist/cjs/queries/QueryInstanceCache.d.ts +8 -0
  13. package/dist/cjs/queries/QueryInstanceCache.d.ts.map +1 -1
  14. package/dist/cjs/queries/QueryInstanceCache.js +70 -9
  15. package/dist/cjs/queries/QueryInstanceCache.js.map +1 -1
  16. package/dist/cjs/queries/QueryResult.d.ts +1 -0
  17. package/dist/cjs/queries/QueryResult.d.ts.map +1 -1
  18. package/dist/cjs/queries/QueryResult.js +18 -0
  19. package/dist/cjs/queries/QueryResult.js.map +1 -1
  20. package/dist/cjs/queries/ServerSentEventHubConnection.d.ts +1 -0
  21. package/dist/cjs/queries/ServerSentEventHubConnection.d.ts.map +1 -1
  22. package/dist/cjs/queries/ServerSentEventHubConnection.js +16 -2
  23. package/dist/cjs/queries/ServerSentEventHubConnection.js.map +1 -1
  24. package/dist/cjs/queries/WebSocketHubConnection.d.ts +1 -0
  25. package/dist/cjs/queries/WebSocketHubConnection.d.ts.map +1 -1
  26. package/dist/cjs/queries/WebSocketHubConnection.js +11 -0
  27. package/dist/cjs/queries/WebSocketHubConnection.js.map +1 -1
  28. package/dist/cjs/queries/for_QueryInstanceCache/when_acquiring/after_release_in_development_mode.d.ts +2 -0
  29. package/dist/cjs/queries/for_QueryInstanceCache/when_acquiring/after_release_in_development_mode.d.ts.map +1 -0
  30. package/dist/cjs/queries/for_QueryInstanceCache/when_deferring_dispose/with_cancellation_before_timeout.d.ts +2 -0
  31. package/dist/cjs/queries/for_QueryInstanceCache/when_deferring_dispose/with_cancellation_before_timeout.d.ts.map +1 -0
  32. package/dist/cjs/queries/for_QueryInstanceCache/when_deferring_dispose/without_cancellation.d.ts +2 -0
  33. package/dist/cjs/queries/for_QueryInstanceCache/when_deferring_dispose/without_cancellation.d.ts.map +1 -0
  34. package/dist/cjs/queries/for_QueryInstanceCache/when_disposing/an_empty_cache.d.ts +2 -0
  35. package/dist/cjs/queries/for_QueryInstanceCache/when_disposing/an_empty_cache.d.ts.map +1 -0
  36. package/dist/cjs/queries/for_QueryInstanceCache/when_disposing/with_active_subscriptions.d.ts +2 -0
  37. package/dist/cjs/queries/for_QueryInstanceCache/when_disposing/with_active_subscriptions.d.ts.map +1 -0
  38. package/dist/cjs/queries/for_QueryInstanceCache/when_disposing/with_pending_deferred_cleanup.d.ts +2 -0
  39. package/dist/cjs/queries/for_QueryInstanceCache/when_disposing/with_pending_deferred_cleanup.d.ts.map +1 -0
  40. package/dist/cjs/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_in_development_mode.d.ts +2 -0
  41. package/dist/cjs/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_in_development_mode.d.ts.map +1 -0
  42. package/dist/cjs/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_outside_development_mode.d.ts +2 -0
  43. package/dist/cjs/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_outside_development_mode.d.ts.map +1 -0
  44. package/dist/cjs/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_active_subscriptions.d.ts +2 -0
  45. package/dist/cjs/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_active_subscriptions.d.ts.map +1 -0
  46. package/dist/cjs/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_no_subscriptions.d.ts +2 -0
  47. package/dist/cjs/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_no_subscriptions.d.ts.map +1 -0
  48. package/dist/cjs/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_pending_deferred_cleanup.d.ts +2 -0
  49. package/dist/cjs/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_pending_deferred_cleanup.d.ts.map +1 -0
  50. package/dist/cjs/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.d.ts +2 -0
  51. package/dist/cjs/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.d.ts.map +1 -0
  52. package/dist/cjs/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.d.ts +2 -0
  53. package/dist/cjs/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.d.ts.map +1 -0
  54. package/dist/esm/Globals.d.ts +2 -0
  55. package/dist/esm/Globals.d.ts.map +1 -1
  56. package/dist/esm/Globals.js +1 -0
  57. package/dist/esm/Globals.js.map +1 -1
  58. package/dist/esm/identity/IdentityProvider.d.ts +2 -1
  59. package/dist/esm/identity/IdentityProvider.d.ts.map +1 -1
  60. package/dist/esm/identity/IdentityProvider.js +16 -2
  61. package/dist/esm/identity/IdentityProvider.js.map +1 -1
  62. package/dist/esm/identity/for_IdentityProvider/when_refreshing/with_unauthorized_response.d.ts +2 -0
  63. package/dist/esm/identity/for_IdentityProvider/when_refreshing/with_unauthorized_response.d.ts.map +1 -0
  64. package/dist/esm/identity/for_IdentityProvider/when_refreshing/with_unauthorized_response.js +19 -0
  65. package/dist/esm/identity/for_IdentityProvider/when_refreshing/with_unauthorized_response.js.map +1 -0
  66. package/dist/esm/queries/QueryInstanceCache.d.ts +8 -0
  67. package/dist/esm/queries/QueryInstanceCache.d.ts.map +1 -1
  68. package/dist/esm/queries/QueryInstanceCache.js +70 -9
  69. package/dist/esm/queries/QueryInstanceCache.js.map +1 -1
  70. package/dist/esm/queries/QueryResult.d.ts +1 -0
  71. package/dist/esm/queries/QueryResult.d.ts.map +1 -1
  72. package/dist/esm/queries/QueryResult.js +18 -0
  73. package/dist/esm/queries/QueryResult.js.map +1 -1
  74. package/dist/esm/queries/ServerSentEventHubConnection.d.ts +1 -0
  75. package/dist/esm/queries/ServerSentEventHubConnection.d.ts.map +1 -1
  76. package/dist/esm/queries/ServerSentEventHubConnection.js +16 -2
  77. package/dist/esm/queries/ServerSentEventHubConnection.js.map +1 -1
  78. package/dist/esm/queries/WebSocketHubConnection.d.ts +1 -0
  79. package/dist/esm/queries/WebSocketHubConnection.d.ts.map +1 -1
  80. package/dist/esm/queries/WebSocketHubConnection.js +11 -0
  81. package/dist/esm/queries/WebSocketHubConnection.js.map +1 -1
  82. package/dist/esm/queries/for_QueryInstanceCache/when_acquiring/after_release_in_development_mode.d.ts +2 -0
  83. package/dist/esm/queries/for_QueryInstanceCache/when_acquiring/after_release_in_development_mode.d.ts.map +1 -0
  84. package/dist/esm/queries/for_QueryInstanceCache/when_acquiring/after_release_in_development_mode.js +23 -0
  85. package/dist/esm/queries/for_QueryInstanceCache/when_acquiring/after_release_in_development_mode.js.map +1 -0
  86. package/dist/esm/queries/for_QueryInstanceCache/when_deferring_dispose/with_cancellation_before_timeout.d.ts +2 -0
  87. package/dist/esm/queries/for_QueryInstanceCache/when_deferring_dispose/with_cancellation_before_timeout.d.ts.map +1 -0
  88. package/dist/esm/queries/for_QueryInstanceCache/when_deferring_dispose/with_cancellation_before_timeout.js +23 -0
  89. package/dist/esm/queries/for_QueryInstanceCache/when_deferring_dispose/with_cancellation_before_timeout.js.map +1 -0
  90. package/dist/esm/queries/for_QueryInstanceCache/when_deferring_dispose/without_cancellation.d.ts +2 -0
  91. package/dist/esm/queries/for_QueryInstanceCache/when_deferring_dispose/without_cancellation.d.ts.map +1 -0
  92. package/dist/esm/queries/for_QueryInstanceCache/when_deferring_dispose/without_cancellation.js +21 -0
  93. package/dist/esm/queries/for_QueryInstanceCache/when_deferring_dispose/without_cancellation.js.map +1 -0
  94. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/an_empty_cache.d.ts +2 -0
  95. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/an_empty_cache.d.ts.map +1 -0
  96. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/an_empty_cache.js +17 -0
  97. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/an_empty_cache.js.map +1 -0
  98. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/with_active_subscriptions.d.ts +2 -0
  99. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/with_active_subscriptions.d.ts.map +1 -0
  100. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/with_active_subscriptions.js +23 -0
  101. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/with_active_subscriptions.js.map +1 -0
  102. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/with_pending_deferred_cleanup.d.ts +2 -0
  103. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/with_pending_deferred_cleanup.d.ts.map +1 -0
  104. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/with_pending_deferred_cleanup.js +22 -0
  105. package/dist/esm/queries/for_QueryInstanceCache/when_disposing/with_pending_deferred_cleanup.js.map +1 -0
  106. package/dist/esm/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_in_development_mode.d.ts +2 -0
  107. package/dist/esm/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_in_development_mode.d.ts.map +1 -0
  108. package/dist/esm/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_in_development_mode.js +28 -0
  109. package/dist/esm/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_in_development_mode.js.map +1 -0
  110. package/dist/esm/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_outside_development_mode.d.ts +2 -0
  111. package/dist/esm/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_outside_development_mode.d.ts.map +1 -0
  112. package/dist/esm/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_outside_development_mode.js +25 -0
  113. package/dist/esm/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_outside_development_mode.js.map +1 -0
  114. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_active_subscriptions.d.ts +2 -0
  115. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_active_subscriptions.d.ts.map +1 -0
  116. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_active_subscriptions.js +25 -0
  117. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_active_subscriptions.js.map +1 -0
  118. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_no_subscriptions.d.ts +2 -0
  119. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_no_subscriptions.d.ts.map +1 -0
  120. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_no_subscriptions.js +12 -0
  121. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_no_subscriptions.js.map +1 -0
  122. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_pending_deferred_cleanup.d.ts +2 -0
  123. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_pending_deferred_cleanup.d.ts.map +1 -0
  124. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_pending_deferred_cleanup.js +23 -0
  125. package/dist/esm/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_pending_deferred_cleanup.js.map +1 -0
  126. package/dist/esm/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.d.ts +2 -0
  127. package/dist/esm/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.d.ts.map +1 -0
  128. package/dist/esm/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.js +35 -0
  129. package/dist/esm/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.js.map +1 -0
  130. package/dist/esm/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.d.ts +2 -0
  131. package/dist/esm/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.d.ts.map +1 -0
  132. package/dist/esm/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.js +33 -0
  133. package/dist/esm/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.js.map +1 -0
  134. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  135. package/identity/IdentityProvider.ts +23 -2
  136. package/identity/for_IdentityProvider/when_refreshing/with_unauthorized_response.ts +26 -0
  137. package/package.json +1 -1
  138. package/queries/QueryInstanceCache.ts +133 -12
  139. package/queries/QueryResult.ts +19 -0
  140. package/queries/ServerSentEventHubConnection.ts +18 -2
  141. package/queries/WebSocketHubConnection.ts +11 -0
  142. package/queries/for_QueryInstanceCache/when_acquiring/after_release_in_development_mode.ts +31 -0
  143. package/queries/for_QueryInstanceCache/when_deferring_dispose/with_cancellation_before_timeout.ts +31 -0
  144. package/queries/for_QueryInstanceCache/when_deferring_dispose/without_cancellation.ts +28 -0
  145. package/queries/for_QueryInstanceCache/when_disposing/an_empty_cache.ts +21 -0
  146. package/queries/for_QueryInstanceCache/when_disposing/with_active_subscriptions.ts +30 -0
  147. package/queries/for_QueryInstanceCache/when_disposing/with_pending_deferred_cleanup.ts +31 -0
  148. package/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_in_development_mode.ts +36 -0
  149. package/queries/for_QueryInstanceCache/when_releasing/the_only_subscriber_outside_development_mode.ts +33 -0
  150. package/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_active_subscriptions.ts +32 -0
  151. package/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_no_subscriptions.ts +18 -0
  152. package/queries/for_QueryInstanceCache/when_tearing_down_all_subscriptions/with_pending_deferred_cleanup.ts +33 -0
  153. package/queries/for_ServerSentEventHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.ts +51 -0
  154. package/queries/for_WebSocketHubConnection/when_receiving_unauthorized/notifies_subscriber_and_removes_subscription.ts +47 -0
@@ -0,0 +1,18 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import { QueryInstanceCache } from '../../QueryInstanceCache';
5
+
6
+ describe('when tearing down all subscriptions with no subscriptions', () => {
7
+ let cache: QueryInstanceCache;
8
+
9
+ beforeEach(() => {
10
+ cache = new QueryInstanceCache();
11
+ cache.getOrCreate('MyQuery::', () => ({}));
12
+
13
+ cache.teardownAllSubscriptions();
14
+ });
15
+
16
+ it('should keep the entry', () => cache.has('MyQuery::').should.be.true);
17
+ it('should still report as not subscribed', () => cache.isSubscribed('MyQuery::').should.be.false);
18
+ });
@@ -0,0 +1,33 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import { QueryInstanceCache } from '../../QueryInstanceCache';
5
+
6
+ describe('when tearing down all subscriptions with pending deferred cleanup', () => {
7
+ let cache: QueryInstanceCache;
8
+ let teardownCalled: boolean;
9
+
10
+ beforeEach(() => {
11
+ vi.useFakeTimers();
12
+ teardownCalled = false;
13
+ cache = new QueryInstanceCache(true);
14
+ cache.getOrCreate('MyQuery::', () => ({}));
15
+ cache.acquire('MyQuery::');
16
+ cache.setTeardown('MyQuery::', () => { teardownCalled = true; });
17
+
18
+ // Release the only subscriber — in dev mode this defers cleanup.
19
+ cache.release('MyQuery::');
20
+
21
+ // Tear down all before the deferred timer fires.
22
+ cache.teardownAllSubscriptions();
23
+ vi.advanceTimersByTime(0);
24
+ });
25
+
26
+ afterEach(() => {
27
+ vi.useRealTimers();
28
+ });
29
+
30
+ it('should call teardown', () => teardownCalled.should.be.true);
31
+ it('should keep the entry', () => cache.has('MyQuery::').should.be.true);
32
+ it('should mark the entry as not subscribed', () => cache.isSubscribed('MyQuery::').should.be.false);
33
+ });
@@ -0,0 +1,51 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import sinon from 'sinon';
5
+ import { a_server_sent_event_hub_connection } from '../given/a_server_sent_event_hub_connection';
6
+ import { given } from '../../../given';
7
+ import { HubMessageType } from '../../WebSocketHubConnection';
8
+ import { QueryResult } from '../../QueryResult';
9
+
10
+ describe('when receiving unauthorized for a subscribed query', given(a_server_sent_event_hub_connection, context => {
11
+ let callback: sinon.SinonStub;
12
+ let receivedResult: QueryResult<unknown> | undefined;
13
+ const queryId = 'q-auth-1';
14
+ const connectionId = 'conn-123';
15
+
16
+ beforeEach(() => {
17
+ context.setup();
18
+ callback = sinon.stub();
19
+
20
+ context.connection.subscribe(queryId, { queryName: 'SecureQuery' }, callback);
21
+ context.simulateOpen();
22
+
23
+ // Server sends Connected message with the connection ID.
24
+ context.simulateMessage({ type: HubMessageType.Connected, payload: connectionId });
25
+
26
+ // Server replies with Unauthorized for this subscription.
27
+ context.simulateMessage({ type: HubMessageType.Unauthorized, queryId });
28
+
29
+ receivedResult = callback.firstCall?.args[0] as QueryResult<unknown> | undefined;
30
+ });
31
+
32
+ afterEach(() => {
33
+ sinon.restore();
34
+ });
35
+
36
+ it('should invoke the subscriber callback', () => {
37
+ callback.calledOnce.should.be.true;
38
+ });
39
+
40
+ it('should report isAuthorized as false', () => {
41
+ receivedResult!.isAuthorized.should.be.false;
42
+ });
43
+
44
+ it('should report isSuccess as false', () => {
45
+ receivedResult!.isSuccess.should.be.false;
46
+ });
47
+
48
+ it('should remove the subscription', () => {
49
+ context.connection.queryCount.should.equal(0);
50
+ });
51
+ }));
@@ -0,0 +1,47 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import sinon from 'sinon';
5
+ import { a_web_socket_hub_connection } from '../given/a_web_socket_hub_connection';
6
+ import { given } from '../../../given';
7
+ import { HubMessageType } from '../../WebSocketHubConnection';
8
+ import { QueryResult } from '../../QueryResult';
9
+
10
+ describe('when receiving unauthorized for a subscribed query', given(a_web_socket_hub_connection, context => {
11
+ let callback: sinon.SinonStub;
12
+ let receivedResult: QueryResult<unknown> | undefined;
13
+ const queryId = 'q-auth-1';
14
+
15
+ beforeEach(() => {
16
+ context.setup();
17
+ callback = sinon.stub();
18
+
19
+ context.connection.subscribe(queryId, { queryName: 'SecureQuery' }, callback);
20
+ context.simulateOpen();
21
+
22
+ // Server replies with Unauthorized for this subscription.
23
+ context.simulateMessage({ type: HubMessageType.Unauthorized, queryId });
24
+
25
+ receivedResult = callback.firstCall?.args[0] as QueryResult<unknown> | undefined;
26
+ });
27
+
28
+ afterEach(() => {
29
+ sinon.restore();
30
+ });
31
+
32
+ it('should invoke the subscriber callback', () => {
33
+ callback.calledOnce.should.be.true;
34
+ });
35
+
36
+ it('should report isAuthorized as false', () => {
37
+ receivedResult!.isAuthorized.should.be.false;
38
+ });
39
+
40
+ it('should report isSuccess as false', () => {
41
+ receivedResult!.isSuccess.should.be.false;
42
+ });
43
+
44
+ it('should remove the subscription', () => {
45
+ context.connection.queryCount.should.equal(0);
46
+ });
47
+ }));