@agentunion/fastaun-browser 0.2.13

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 (82) hide show
  1. package/README.md +604 -0
  2. package/dist/auth.d.ts +150 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +1388 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/certs/root.d.ts +2 -0
  7. package/dist/certs/root.d.ts.map +1 -0
  8. package/dist/certs/root.js +16 -0
  9. package/dist/certs/root.js.map +1 -0
  10. package/dist/client.d.ts +341 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +4061 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/config.d.ts +37 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +85 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/crypto.d.ts +41 -0
  19. package/dist/crypto.d.ts.map +1 -0
  20. package/dist/crypto.js +132 -0
  21. package/dist/crypto.js.map +1 -0
  22. package/dist/discovery.d.ts +20 -0
  23. package/dist/discovery.d.ts.map +1 -0
  24. package/dist/discovery.js +75 -0
  25. package/dist/discovery.js.map +1 -0
  26. package/dist/e2ee-group.d.ts +221 -0
  27. package/dist/e2ee-group.d.ts.map +1 -0
  28. package/dist/e2ee-group.js +1174 -0
  29. package/dist/e2ee-group.js.map +1 -0
  30. package/dist/e2ee.d.ts +187 -0
  31. package/dist/e2ee.d.ts.map +1 -0
  32. package/dist/e2ee.js +1067 -0
  33. package/dist/e2ee.js.map +1 -0
  34. package/dist/errors.d.ts +118 -0
  35. package/dist/errors.d.ts.map +1 -0
  36. package/dist/errors.js +250 -0
  37. package/dist/errors.js.map +1 -0
  38. package/dist/events.d.ts +33 -0
  39. package/dist/events.d.ts.map +1 -0
  40. package/dist/events.js +68 -0
  41. package/dist/events.js.map +1 -0
  42. package/dist/index.d.ts +22 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +32 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/keystore/index.d.ts +88 -0
  47. package/dist/keystore/index.d.ts.map +1 -0
  48. package/dist/keystore/index.js +3 -0
  49. package/dist/keystore/index.js.map +1 -0
  50. package/dist/keystore/indexeddb.d.ts +94 -0
  51. package/dist/keystore/indexeddb.d.ts.map +1 -0
  52. package/dist/keystore/indexeddb.js +1434 -0
  53. package/dist/keystore/indexeddb.js.map +1 -0
  54. package/dist/namespaces/auth.d.ts +52 -0
  55. package/dist/namespaces/auth.d.ts.map +1 -0
  56. package/dist/namespaces/auth.js +237 -0
  57. package/dist/namespaces/auth.js.map +1 -0
  58. package/dist/namespaces/custody.d.ts +48 -0
  59. package/dist/namespaces/custody.d.ts.map +1 -0
  60. package/dist/namespaces/custody.js +230 -0
  61. package/dist/namespaces/custody.js.map +1 -0
  62. package/dist/secret-store/index.d.ts +20 -0
  63. package/dist/secret-store/index.d.ts.map +1 -0
  64. package/dist/secret-store/index.js +12 -0
  65. package/dist/secret-store/index.js.map +1 -0
  66. package/dist/secret-store/indexeddb-store.d.ts +22 -0
  67. package/dist/secret-store/indexeddb-store.d.ts.map +1 -0
  68. package/dist/secret-store/indexeddb-store.js +133 -0
  69. package/dist/secret-store/indexeddb-store.js.map +1 -0
  70. package/dist/seq-tracker.d.ts +30 -0
  71. package/dist/seq-tracker.d.ts.map +1 -0
  72. package/dist/seq-tracker.js +219 -0
  73. package/dist/seq-tracker.js.map +1 -0
  74. package/dist/transport.d.ts +45 -0
  75. package/dist/transport.d.ts.map +1 -0
  76. package/dist/transport.js +251 -0
  77. package/dist/transport.js.map +1 -0
  78. package/dist/types.d.ts +171 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +10 -0
  81. package/dist/types.js.map +1 -0
  82. package/package.json +37 -0
@@ -0,0 +1,171 @@
1
+ /** JSON 原子值 */
2
+ export type JsonPrimitive = string | number | boolean | null;
3
+ /** JSON 对象 */
4
+ export interface JsonObject {
5
+ [key: string]: JsonValue | undefined;
6
+ }
7
+ /** JSON 数组 */
8
+ export interface JsonArray extends Array<JsonValue> {
9
+ }
10
+ /** JSON 值类型 */
11
+ export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
12
+ /** 连接状态 */
13
+ export type ConnectionState = 'idle' | 'connecting' | 'authenticating' | 'connected' | 'disconnected' | 'reconnecting' | 'terminal_failed' | 'closed';
14
+ /** 判断值是否为普通 JSON 对象 */
15
+ export declare function isJsonObject(value: JsonValue | object | null | undefined): value is JsonObject;
16
+ /** RPC 参数 */
17
+ export interface RpcParams extends JsonObject {
18
+ }
19
+ /** RPC 返回值 */
20
+ export type RpcResult = JsonValue;
21
+ /** RPC 错误对象 */
22
+ export interface RpcErrorObject extends JsonObject {
23
+ code?: number;
24
+ message?: string;
25
+ data?: JsonValue;
26
+ }
27
+ /** RPC 消息 */
28
+ export interface RpcMessage extends JsonObject {
29
+ jsonrpc?: string;
30
+ id?: string | number | null;
31
+ method?: string;
32
+ params?: JsonObject;
33
+ result?: RpcResult;
34
+ error?: RpcErrorObject;
35
+ }
36
+ /** Gateway 条目 */
37
+ export interface GatewayEntry extends JsonObject {
38
+ url?: string;
39
+ priority?: number;
40
+ }
41
+ /** Gateway 发现文档 */
42
+ export interface GatewayDiscoveryDocument extends JsonObject {
43
+ gateways?: GatewayEntry[];
44
+ }
45
+ /** 身份密钥对记录 */
46
+ export interface KeyPairRecord extends JsonObject {
47
+ private_key_pem?: string;
48
+ public_key_der_b64?: string;
49
+ curve?: string;
50
+ }
51
+ /** E2EE prekey 记录 */
52
+ export interface PrekeyRecord extends JsonObject {
53
+ prekey_id?: string;
54
+ public_key?: string;
55
+ signature?: string;
56
+ private_key_pem?: string;
57
+ created_at?: number;
58
+ updated_at?: number;
59
+ expires_at?: number;
60
+ }
61
+ /** prekey 映射 */
62
+ export type PrekeyMap = Record<string, PrekeyRecord>;
63
+ /** 群组旧 epoch 记录 */
64
+ export interface GroupOldEpochRecord extends JsonObject {
65
+ epoch?: number;
66
+ secret?: string;
67
+ commitment?: string;
68
+ member_aids?: string[];
69
+ epoch_chain?: string;
70
+ epoch_chain_unverified?: boolean;
71
+ epoch_chain_unverified_reason?: string;
72
+ pending_rotation_id?: string;
73
+ pending_created_at?: number;
74
+ secret_protection?: JsonObject;
75
+ created_at?: number;
76
+ updated_at?: number;
77
+ expires_at?: number;
78
+ }
79
+ /** 群组密钥状态 */
80
+ export interface GroupSecretRecord extends JsonObject {
81
+ group_id?: string;
82
+ epoch?: number;
83
+ secret?: string;
84
+ commitment?: string;
85
+ member_aids?: string[];
86
+ epoch_chain?: string;
87
+ epoch_chain_unverified?: boolean;
88
+ epoch_chain_unverified_reason?: string;
89
+ pending_rotation_id?: string;
90
+ pending_created_at?: number;
91
+ updated_at?: number;
92
+ secret_protection?: JsonObject;
93
+ old_epochs?: GroupOldEpochRecord[];
94
+ }
95
+ /** metadata 记录 */
96
+ export interface MetadataRecord extends JsonObject {
97
+ access_token?: string;
98
+ refresh_token?: string;
99
+ kite_token?: string;
100
+ e2ee_prekeys?: PrekeyMap;
101
+ e2ee_sessions?: JsonObject[];
102
+ }
103
+ /** 身份记录 */
104
+ export interface IdentityRecord extends MetadataRecord, KeyPairRecord {
105
+ aid?: string;
106
+ cert?: string;
107
+ cert_pem?: string;
108
+ token?: string;
109
+ token_exp?: number;
110
+ expires_at?: number;
111
+ }
112
+ /** E2EE session 记录 */
113
+ export interface SessionRecord extends JsonObject {
114
+ session_id?: string;
115
+ key?: string;
116
+ key_protection?: JsonObject;
117
+ peer_aid?: string;
118
+ created_at?: number;
119
+ updated_at?: number;
120
+ expires_at?: number;
121
+ }
122
+ /** SecretStore 加密记录 */
123
+ export interface SecretRecord extends JsonObject {
124
+ scheme?: string;
125
+ name?: string;
126
+ persisted?: boolean;
127
+ nonce?: string;
128
+ ciphertext?: string;
129
+ tag?: string;
130
+ iv?: string;
131
+ }
132
+ /** 投递模式 */
133
+ export type DeliveryMode = 'fanout' | 'queue';
134
+ /** 消息类型 */
135
+ export interface Message extends JsonObject {
136
+ message_id?: string;
137
+ seq?: number;
138
+ to?: string;
139
+ from?: string;
140
+ /** 群组消息的群组 ID */
141
+ group_id?: string;
142
+ /** 群组消息的发送方 AID(服务端注入) */
143
+ sender_aid?: string;
144
+ type?: string;
145
+ payload?: JsonValue;
146
+ encrypted?: boolean;
147
+ delivery_mode?: DeliveryMode;
148
+ timestamp?: number;
149
+ e2ee?: JsonObject;
150
+ }
151
+ /** 发送结果 */
152
+ export interface SendResult extends JsonObject {
153
+ ok?: boolean;
154
+ message_id?: string;
155
+ seq?: number;
156
+ timestamp?: number;
157
+ status?: 'sent' | 'delivered' | 'duplicate';
158
+ delivery_mode?: DeliveryMode;
159
+ }
160
+ /** ACK 结果 */
161
+ export interface AckResult extends JsonObject {
162
+ success?: boolean;
163
+ ack_seq?: number;
164
+ }
165
+ /** 拉取结果 */
166
+ export interface PullResult extends JsonObject {
167
+ messages?: Message[];
168
+ count?: number;
169
+ latest_seq?: number;
170
+ }
171
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,10 @@
1
+ // ── AUN 协议类型定义 ──────────────────────────────────────
2
+ /** 判断值是否为普通 JSON 对象 */
3
+ export function isJsonObject(value) {
4
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
5
+ return false;
6
+ }
7
+ const proto = Object.getPrototypeOf(value);
8
+ return proto === Object.prototype || proto === null;
9
+ }
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,uDAAuD;AA2BvD,uBAAuB;AACvB,MAAM,UAAU,YAAY,CAAC,KAA4C;IACvE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@agentunion/fastaun-browser",
3
+ "version": "0.2.13",
4
+ "description": "AUN Protocol Core SDK for Browser",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "browser": "dist/index.js",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "license": "Apache-2.0",
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "test": "vitest run --environment jsdom",
24
+ "test:unit": "vitest run --environment jsdom tests/unit",
25
+ "test:integration": "vitest run --environment jsdom tests/integration",
26
+ "test:e2e": "npm run build && playwright test --config=playwright.agentid-local.config.ts tests/e2e-browser/e2ee.spec.ts --reporter=line",
27
+ "test:e2e:smoke": "npm run build && playwright test --config=playwright.agentid-local.config.ts tests/e2e-browser/e2ee.spec.ts --grep \"SDK 创建 AID\" --reporter=line"
28
+ },
29
+ "devDependencies": {
30
+ "@playwright/test": "^1.59.1",
31
+ "esbuild": "^0.24.0",
32
+ "fake-indexeddb": "^6.2.5",
33
+ "jsdom": "^25.0.0",
34
+ "typescript": "^5.6.0",
35
+ "vitest": "^2.0.0"
36
+ }
37
+ }