@novasamatech/product-sdk 0.7.1-0 → 0.7.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.
@@ -1,4 +1,4 @@
1
- import type { AccountConnectionStatus as AccountConnectionStatusCodec, CodecType, Transport } from '@novasamatech/host-api';
1
+ import type { AccountConnectionStatus as AccountConnectionStatusCodec, CodecType, Subscription, Transport } from '@novasamatech/host-api';
2
2
  import { RingLocation } from '@novasamatech/host-api';
3
3
  import type { PolkadotSigner } from 'polkadot-api';
4
4
  export type ProductAccount = {
@@ -39,6 +39,6 @@ export declare const createAccountsProvider: (transport?: Transport) => {
39
39
  reason: string;
40
40
  }, "CreateProofErr::Unknown"> | import("packages/scale/src/err.js").CodecError<undefined, "CreateProofErr::RingNotFound">>;
41
41
  getProductAccountSigner(account: ProductAccount): PolkadotSigner;
42
- subscribeAccountConnectionStatus(callback: (status: AccountConnectionStatus) => void): import("@novasamatech/host-api").Subscription;
42
+ subscribeAccountConnectionStatus(callback: (status: AccountConnectionStatus) => void): Subscription<void>;
43
43
  getLegacyAccountSigner(account: ProductAccount): PolkadotSigner;
44
44
  };
package/dist/accounts.js CHANGED
@@ -124,11 +124,15 @@ export const createAccountsProvider = (transport = sandboxTransport) => {
124
124
  });
125
125
  },
126
126
  subscribeAccountConnectionStatus(callback) {
127
- return hostApi.accountConnectionStatusSubscribe(enumValue('v1', undefined), status => {
127
+ const subscriber = hostApi.accountConnectionStatusSubscribe(enumValue('v1', undefined), status => {
128
128
  if (status.tag === 'v1') {
129
129
  callback(status.value);
130
130
  }
131
131
  });
132
+ return {
133
+ unsubscribe: subscriber.unsubscribe,
134
+ onInterrupt: cb => subscriber.onInterrupt(v => cb(v.value)),
135
+ };
132
136
  },
133
137
  getLegacyAccountSigner(account) {
134
138
  return getPolkadotSignerFromPjs(toHex(account.publicKey), async (payload) => {
package/dist/chat.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ChatBotRegistrationStatus as ChatBotRegistrationStatusCodec, ChatMessageContent as ChatMessageContentCodec, ChatRoom as ChatRoomCodec, ChatRoomRegistrationStatus as ChatRoomRegistrationStatusCodec, CodecType, ReceivedChatAction as ReceivedChatActionCodec, Transport } from '@novasamatech/host-api';
1
+ import type { ChatBotRegistrationStatus as ChatBotRegistrationStatusCodec, ChatMessageContent as ChatMessageContentCodec, ChatRoom as ChatRoomCodec, ChatRoomRegistrationStatus as ChatRoomRegistrationStatusCodec, CodecType, ReceivedChatAction as ReceivedChatActionCodec, Subscription, Transport } from '@novasamatech/host-api';
2
2
  import { CustomRendererNode } from '@novasamatech/host-api';
3
3
  export type ChatMessageContent = CodecType<typeof ChatMessageContentCodec>;
4
4
  export type ChatReceivedAction = CodecType<typeof ReceivedChatActionCodec>;
@@ -26,8 +26,8 @@ export declare const createProductChatManager: (transport?: Transport) => {
26
26
  sendMessage(roomId: string, payload: ChatMessageContent): Promise<{
27
27
  messageId: string;
28
28
  }>;
29
- subscribeChatList(callback: (rooms: ChatRoom[]) => void): import("@novasamatech/host-api").Subscription;
30
- subscribeAction(callback: (action: ChatReceivedAction) => void): import("@novasamatech/host-api").Subscription;
29
+ subscribeChatList(callback: (rooms: ChatRoom[]) => void): Subscription<void>;
30
+ subscribeAction(callback: (action: ChatReceivedAction) => void): Subscription<void>;
31
31
  onCustomMessageRenderingRequest(callback: ChatCustomMessageRenderer): VoidFunction;
32
32
  };
33
33
  export declare function matchChatCustomRenderers(map: Record<string, ChatCustomMessageRenderer>): ChatCustomMessageRenderer;
package/dist/chat.js CHANGED
@@ -58,14 +58,18 @@ export const createProductChatManager = (transport = sandboxTransport) => {
58
58
  });
59
59
  },
60
60
  subscribeChatList(callback) {
61
- return hostApi.chatListSubscribe(enumValue('v1', undefined), action => {
61
+ const subscriber = hostApi.chatListSubscribe(enumValue('v1', undefined), action => {
62
62
  if (action.tag === 'v1') {
63
63
  callback(action.value);
64
64
  }
65
65
  });
66
+ return {
67
+ unsubscribe: subscriber.unsubscribe,
68
+ onInterrupt: cb => subscriber.onInterrupt(v => cb(v.value)),
69
+ };
66
70
  },
67
71
  subscribeAction(callback) {
68
- return hostApi.chatActionSubscribe(enumValue('v1', undefined), action => {
72
+ const subscriber = hostApi.chatActionSubscribe(enumValue('v1', undefined), action => {
69
73
  switch (action.tag) {
70
74
  case 'v1':
71
75
  callback(action.value);
@@ -74,12 +78,16 @@ export const createProductChatManager = (transport = sandboxTransport) => {
74
78
  console.error(`Unknown message version ${action.tag}`);
75
79
  }
76
80
  });
81
+ return {
82
+ unsubscribe: subscriber.unsubscribe,
83
+ onInterrupt: cb => subscriber.onInterrupt(v => cb(v.value)),
84
+ };
77
85
  },
78
86
  onCustomMessageRenderingRequest(callback) {
79
87
  return transport.handleSubscription('product_chat_custom_message_render_subscribe', (params, send, interrupt) => {
80
88
  if (params.tag !== 'v1') {
81
89
  // unsupported version
82
- interrupt();
90
+ interrupt(enumValue('v1', undefined));
83
91
  return () => {
84
92
  /* empty */
85
93
  };
package/dist/index.d.ts CHANGED
@@ -10,7 +10,7 @@ export type { ProductAccountId, SignedStatement, Statement, StatementTopicFilter
10
10
  export { createStatementStore } from './statementStore.js';
11
11
  export type { AccountConnectionStatus, ProductAccount } from './accounts.js';
12
12
  export { createAccountsProvider } from './accounts.js';
13
- export type { ThemeMode, ThemeSubscription } from './theme.js';
13
+ export type { ThemeMode } from './theme.js';
14
14
  export { createThemeProvider } from './theme.js';
15
15
  export { createLocalStorage, hostLocalStorage } from './localStorage.js';
16
16
  export { createPreimageManager, preimageManager } from './preimage.js';
@@ -1,4 +1,4 @@
1
- import type { Subscription, Transport } from '@novasamatech/host-api';
1
+ import type { CodecType, PaymentBalanceErr, Subscription, Transport } from '@novasamatech/host-api';
2
2
  export type PaymentBalance = {
3
3
  available: bigint;
4
4
  };
@@ -19,7 +19,7 @@ export type TopUpSource = {
19
19
  key: Uint8Array;
20
20
  };
21
21
  export declare const createPaymentManager: (transport?: Transport) => {
22
- subscribeBalance(callback: (balance: PaymentBalance) => void): Subscription;
22
+ subscribeBalance(callback: (balance: PaymentBalance) => void): Subscription<CodecType<typeof PaymentBalanceErr>>;
23
23
  topUp(amount: bigint, source: TopUpSource): Promise<void>;
24
24
  requestPayment(amount: bigint, destination: Uint8Array): Promise<{
25
25
  id: string;
@@ -27,7 +27,7 @@ export declare const createPaymentManager: (transport?: Transport) => {
27
27
  subscribePaymentStatus(id: string, callback: (status: PaymentStatus) => void): Subscription;
28
28
  };
29
29
  export declare const paymentManager: {
30
- subscribeBalance(callback: (balance: PaymentBalance) => void): Subscription;
30
+ subscribeBalance(callback: (balance: PaymentBalance) => void): Subscription<CodecType<typeof PaymentBalanceErr>>;
31
31
  topUp(amount: bigint, source: TopUpSource): Promise<void>;
32
32
  requestPayment(amount: bigint, destination: Uint8Array): Promise<{
33
33
  id: string;
package/dist/payments.js CHANGED
@@ -6,11 +6,15 @@ export const createPaymentManager = (transport = sandboxTransport) => {
6
6
  const version = 'v1';
7
7
  return {
8
8
  subscribeBalance(callback) {
9
- return hostApi.paymentBalanceSubscribe(enumValue(version, undefined), payload => {
9
+ const subscriber = hostApi.paymentBalanceSubscribe(enumValue(version, undefined), payload => {
10
10
  if (payload.tag === version) {
11
11
  callback(payload.value);
12
12
  }
13
13
  });
14
+ return {
15
+ unsubscribe: subscriber.unsubscribe,
16
+ onInterrupt: cb => subscriber.onInterrupt(v => cb(v.value)),
17
+ };
14
18
  },
15
19
  topUp(amount, source) {
16
20
  const sourceCodec = source.type === 'productAccount'
@@ -13,12 +13,12 @@ export declare function requestDevicePermission(permission: DevicePermissionKind
13
13
  reason: string;
14
14
  }, "GenericError">>;
15
15
  /**
16
- * Request one or more remote permissions from the host in a single batch.
16
+ * Request remote permission from the host.
17
17
  * Returns ResultAsync<boolean, GenericError>:
18
- * - ok(true) — all permissions granted
19
- * - ok(false) — at least one permission denied
18
+ * - ok(true) — permission granted
19
+ * - ok(false) — permission denied by the user
20
20
  * - err(...) — transport or encoding error
21
21
  */
22
- export declare function requestPermission(permissions: RemotePermissionItem[]): import("neverthrow").ResultAsync<boolean, import("packages/scale/src/err.js").CodecError<{
22
+ export declare function requestPermission(permission: RemotePermissionItem): import("neverthrow").ResultAsync<boolean, import("packages/scale/src/err.js").CodecError<{
23
23
  reason: string;
24
24
  }, "GenericError">>;
@@ -14,15 +14,15 @@ export function requestDevicePermission(permission) {
14
14
  .mapErr(e => e.value);
15
15
  }
16
16
  /**
17
- * Request one or more remote permissions from the host in a single batch.
17
+ * Request remote permission from the host.
18
18
  * Returns ResultAsync<boolean, GenericError>:
19
- * - ok(true) — all permissions granted
20
- * - ok(false) — at least one permission denied
19
+ * - ok(true) — permission granted
20
+ * - ok(false) — permission denied by the user
21
21
  * - err(...) — transport or encoding error
22
22
  */
23
- export function requestPermission(permissions) {
23
+ export function requestPermission(permission) {
24
24
  return hostApi
25
- .permission(enumValue('v1', permissions))
25
+ .permission(enumValue('v1', permission))
26
26
  .map(r => r.value)
27
27
  .mapErr(e => e.value);
28
28
  }
@@ -1,9 +1,9 @@
1
- import type { HexString } from '@novasamatech/host-api';
1
+ import type { HexString, Subscription } from '@novasamatech/host-api';
2
2
  export declare const createPreimageManager: (transport?: import("@novasamatech/host-api").Transport) => {
3
- lookup(key: HexString, callback: (preimage: Uint8Array | null) => void): import("@novasamatech/host-api").Subscription;
3
+ lookup(key: HexString, callback: (preimage: Uint8Array | null) => void): Subscription<void>;
4
4
  submit(value: Uint8Array): Promise<`0x${string}`>;
5
5
  };
6
6
  export declare const preimageManager: {
7
- lookup(key: HexString, callback: (preimage: Uint8Array | null) => void): import("@novasamatech/host-api").Subscription;
7
+ lookup(key: HexString, callback: (preimage: Uint8Array | null) => void): Subscription<void>;
8
8
  submit(value: Uint8Array): Promise<`0x${string}`>;
9
9
  };
package/dist/preimage.js CHANGED
@@ -6,11 +6,15 @@ export const createPreimageManager = (transport = sandboxTransport) => {
6
6
  const hostApi = createHostApi(transport);
7
7
  return {
8
8
  lookup(key, callback) {
9
- return hostApi.preimageLookupSubscribe(enumValue(supportedVersion, key), payload => {
9
+ const subscriber = hostApi.preimageLookupSubscribe(enumValue(supportedVersion, key), payload => {
10
10
  if (payload.tag === supportedVersion) {
11
11
  callback(payload.value);
12
12
  }
13
13
  });
14
+ return {
15
+ unsubscribe: subscriber.unsubscribe,
16
+ onInterrupt: cb => subscriber.onInterrupt(v => cb(v.value)),
17
+ };
14
18
  },
15
19
  submit(value) {
16
20
  return resultToPromise(unwrapVersionedResult(supportedVersion, hostApi.preimageSubmit(enumValue(supportedVersion, value))));
@@ -1,4 +1,4 @@
1
- import type { CodecType, ProductAccountId as ProductAccountIdCodec, SignedStatement as SignedStatementCodec, Statement as StatementCodec, Topic as TopicCodec, Transport } from '@novasamatech/host-api';
1
+ import type { CodecType, ProductAccountId as ProductAccountIdCodec, SignedStatement as SignedStatementCodec, Statement as StatementCodec, Subscription, Topic as TopicCodec, Transport } from '@novasamatech/host-api';
2
2
  export type Statement = CodecType<typeof StatementCodec>;
3
3
  export type SignedStatement = CodecType<typeof SignedStatementCodec>;
4
4
  export type Topic = CodecType<typeof TopicCodec>;
@@ -13,7 +13,7 @@ export type StatementsPage = {
13
13
  isComplete: boolean;
14
14
  };
15
15
  export declare const createStatementStore: (transport?: Transport) => {
16
- subscribe(filter: StatementTopicFilter, callback: (page: StatementsPage) => void): import("@novasamatech/host-api").Subscription;
16
+ subscribe(filter: StatementTopicFilter, callback: (page: StatementsPage) => void): Subscription<void>;
17
17
  createProof(accountId: ProductAccountId, statement: Statement): Promise<{
18
18
  tag: "Sr25519";
19
19
  value: {
@@ -5,11 +5,15 @@ export const createStatementStore = (transport = sandboxTransport) => {
5
5
  return {
6
6
  subscribe(filter, callback) {
7
7
  const scaleFilter = 'matchAll' in filter ? enumValue('MatchAll', filter.matchAll) : enumValue('MatchAny', filter.matchAny);
8
- return hostApi.statementStoreSubscribe(enumValue('v1', scaleFilter), payload => {
8
+ const subscriber = hostApi.statementStoreSubscribe(enumValue('v1', scaleFilter), payload => {
9
9
  if (payload.tag === 'v1') {
10
10
  callback(payload.value);
11
11
  }
12
12
  });
13
+ return {
14
+ unsubscribe: subscriber.unsubscribe,
15
+ onInterrupt: cb => subscriber.onInterrupt(v => cb(v.value)),
16
+ };
13
17
  },
14
18
  async createProof(accountId, statement) {
15
19
  const result = await hostApi.statementStoreCreateProof(enumValue('v1', [accountId, statement]));
package/dist/theme.d.ts CHANGED
@@ -1,9 +1,6 @@
1
- import type { CodecType, Transport } from '@novasamatech/host-api';
1
+ import type { CodecType, Subscription, Transport } from '@novasamatech/host-api';
2
2
  import { Theme } from '@novasamatech/host-api';
3
3
  export type ThemeMode = CodecType<typeof Theme>;
4
- export type ThemeSubscription = {
5
- unsubscribe: VoidFunction;
6
- };
7
4
  export declare function createThemeProvider(transport?: Transport): {
8
- subscribeTheme(callback: (theme: ThemeMode) => void): ThemeSubscription;
5
+ subscribeTheme(callback: (theme: ThemeMode) => void): Subscription<void>;
9
6
  };
package/dist/theme.js CHANGED
@@ -4,13 +4,14 @@ export function createThemeProvider(transport = sandboxTransport) {
4
4
  const hostApi = createHostApi(transport);
5
5
  return {
6
6
  subscribeTheme(callback) {
7
- const subscription = hostApi.themeSubscribe(enumValue('v1', undefined), value => {
7
+ const subscriber = hostApi.themeSubscribe(enumValue('v1', undefined), value => {
8
8
  if (value.tag === 'v1') {
9
9
  callback(value.value);
10
10
  }
11
11
  });
12
12
  return {
13
- unsubscribe: subscription.unsubscribe,
13
+ unsubscribe: subscriber.unsubscribe,
14
+ onInterrupt: cb => subscriber.onInterrupt(v => cb(v.value)),
14
15
  };
15
16
  },
16
17
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@novasamatech/product-sdk",
3
3
  "type": "module",
4
- "version": "0.7.1-0",
4
+ "version": "0.7.1",
5
5
  "description": "Polkadot product SDK: integrate and run your product inside Polkadot browser.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "dependencies": {
28
28
  "@polkadot/extension-inject": "^0.63.1",
29
29
  "@polkadot-api/json-rpc-provider-proxy": "^0.4.0",
30
- "@novasamatech/host-api": "0.7.1-0",
30
+ "@novasamatech/host-api": "0.7.1",
31
31
  "polkadot-api": ">=2",
32
32
  "neverthrow": "^8.2.0"
33
33
  },