@fatagnus/dink-convex 2.6.0 → 2.8.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.
package/dist/index.d.ts CHANGED
@@ -66,6 +66,7 @@ export { syncTriggers, registerSyncedTable, isSyncedTable, getSyncConfig, create
66
66
  export { callEdge, scatterCall, discoverEdges, getEdgeRpcConfig, buildCallEdgeUrl, buildScatterCallUrl, buildDiscoverEdgesUrl, buildCallEdgePayload, buildScatterCallPayload, parseCallEdgeResponse, parseScatterCallResponse, parseDiscoverEdgesResponse, EdgeRpcError, EDGE_RPC_ERROR_CODES, type CallEdgeOptions, type ScatterCallOptions, type DiscoverEdgesOptions, type CallEdgeResult, type ScatterCallResult, type ScatterCallResultItem, type EdgeInfo, type EdgeRpcConfig, } from "./edgeRpc.js";
67
67
  export { registerReplicateComponent, hasReplicateComponent, getReplicateComponent, clearReplicateComponent, forwardToReplicate, type ReplicateComponent, type DeltaData, type ForwardContext, } from "./replicateBridge.js";
68
68
  export { describeEdgeServices, getLLMContext, getIntrospectConfig, buildDescribeUrl, buildLLMContextUrl, parseDescribeResponse, parseLLMContextResponse, IntrospectError, INTROSPECT_ERROR_CODES, type ServiceDescriptor, type MethodDescriptor, type ServiceAIContext, type MethodAIContext, type IntrospectConfig, } from "./introspect.js";
69
+ export { createEdgeKey, listEdgeKeys, revokeEdgeKey, type KeyType, type KeyStatus, type KeyMetadata, type CreateEdgeKeyOptions, type CreateKeyResult, } from "./keys.js";
69
70
  export declare const VERSION = "2.4.0";
70
71
  export type { SyncedTableConfig } from "./schema.js";
71
72
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAGH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,6BAA6B,EAC7B,sCAAsC,EACtC,2BAA2B,EAC3B,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mCAAmC,EACnC,kBAAkB,EAClB,8BAA8B,EAC9B,cAAc,EACd,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,EACb,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAGH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,6BAA6B,EAC7B,sCAAsC,EACtC,2BAA2B,EAC3B,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mCAAmC,EACnC,kBAAkB,EAClB,8BAA8B,EAC9B,cAAc,EACd,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,EACb,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC;AAGnB,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -74,6 +74,8 @@ export { callEdge, scatterCall, discoverEdges, getEdgeRpcConfig, buildCallEdgeUr
74
74
  export { registerReplicateComponent, hasReplicateComponent, getReplicateComponent, clearReplicateComponent, forwardToReplicate, } from "./replicateBridge.js";
75
75
  // Introspection helpers
76
76
  export { describeEdgeServices, getLLMContext, getIntrospectConfig, buildDescribeUrl, buildLLMContextUrl, parseDescribeResponse, parseLLMContextResponse, IntrospectError, INTROSPECT_ERROR_CODES, } from "./introspect.js";
77
+ // Key management helpers
78
+ export { createEdgeKey, listEdgeKeys, revokeEdgeKey, } from "./keys.js";
77
79
  // Component version
78
80
  export const VERSION = "2.4.0";
79
81
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,iBAAiB;AACjB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAErB,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,WAAW,CAAC;AAEnB,gFAAgF;AAChF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,GAOhB,MAAM,oBAAoB,CAAC;AAE5B,sEAAsE;AACtE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,gBAAgB,CAAC;AAE1E,+CAA+C;AAC/C,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,6BAA6B,EAC7B,sCAAsC,EACtC,2BAA2B,EAC3B,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mCAAmC,EACnC,kBAAkB,EAClB,8BAA8B,EAC9B,cAAc,GAEf,MAAM,eAAe,CAAC;AAEvB,2BAA2B;AAC3B,OAAO,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,GASrB,MAAM,cAAc,CAAC;AAEtB,2BAA2B;AAC3B,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,GAInB,MAAM,sBAAsB,CAAC;AAE9B,wBAAwB;AACxB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,GAMvB,MAAM,iBAAiB,CAAC;AAEzB,oBAAoB;AACpB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,iBAAiB;AACjB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAErB,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,WAAW,CAAC;AAEnB,gFAAgF;AAChF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,GAOhB,MAAM,oBAAoB,CAAC;AAE5B,sEAAsE;AACtE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,gBAAgB,CAAC;AAE1E,+CAA+C;AAC/C,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,6BAA6B,EAC7B,sCAAsC,EACtC,2BAA2B,EAC3B,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mCAAmC,EACnC,kBAAkB,EAClB,8BAA8B,EAC9B,cAAc,GAEf,MAAM,eAAe,CAAC;AAEvB,2BAA2B;AAC3B,OAAO,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,GASrB,MAAM,cAAc,CAAC;AAEtB,2BAA2B;AAC3B,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,GAInB,MAAM,sBAAsB,CAAC;AAE9B,wBAAwB;AACxB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,GAMvB,MAAM,iBAAiB,CAAC;AAEzB,yBAAyB;AACzB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,GAMd,MAAM,WAAW,CAAC;AAEnB,oBAAoB;AACpB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
package/dist/keys.d.ts ADDED
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Key Management Helpers for Convex
3
+ *
4
+ * These helpers allow Convex actions to manage API keys via dinkd.
5
+ * They follow the same pattern as edgeRpc.ts for authenticated HTTP calls.
6
+ *
7
+ * @module keys
8
+ */
9
+ /**
10
+ * Action context type (minimal interface for fetch operations).
11
+ */
12
+ interface ActionCtx {
13
+ }
14
+ /**
15
+ * Type of API key
16
+ */
17
+ export type KeyType = 'edge' | 'center' | 'client' | 'admin' | 'app_master' | 'sync_key';
18
+ /**
19
+ * Status of an API key
20
+ */
21
+ export type KeyStatus = 'active' | 'expired' | 'revoked' | 'disabled';
22
+ /**
23
+ * Metadata about an API key
24
+ */
25
+ export interface KeyMetadata {
26
+ /** Unique key identifier */
27
+ id: string;
28
+ /** App ID this key belongs to */
29
+ appId: string;
30
+ /** Display name of the key */
31
+ name: string;
32
+ /** Type of the key */
33
+ type: KeyType;
34
+ /** Edge ID (for edge keys) */
35
+ edgeId?: string;
36
+ /** Scopes granted to this key */
37
+ scopes: string[];
38
+ /** Labels attached to the key */
39
+ labels?: Record<string, string>;
40
+ /** Current status of the key */
41
+ status: KeyStatus;
42
+ /** When the key was created (ISO string) */
43
+ createdAt: string;
44
+ /** When the key expires (ISO string, if set) */
45
+ expiresAt?: string;
46
+ /** When the key was last used (ISO string) */
47
+ lastUsedAt?: string;
48
+ /** When the key was revoked (ISO string, if revoked) */
49
+ revokedAt?: string;
50
+ /** Reason for revocation (if revoked) */
51
+ revokeReason?: string;
52
+ }
53
+ /**
54
+ * Options for creating an edge key
55
+ */
56
+ export interface CreateEdgeKeyOptions {
57
+ /** Display name for the key */
58
+ name: string;
59
+ /** Edge ID (optional, auto-generated if not provided) */
60
+ edgeId?: string;
61
+ /** Labels to attach to the key */
62
+ labels?: Record<string, string>;
63
+ }
64
+ /**
65
+ * Result from creating an API key
66
+ */
67
+ export interface CreateKeyResult {
68
+ /** Key metadata */
69
+ key: KeyMetadata;
70
+ /** The actual API key (only shown once!) */
71
+ apiKey: string;
72
+ }
73
+ /**
74
+ * Create a new edge key.
75
+ *
76
+ * @param _ctx - Convex action context
77
+ * @param options - Edge key creation options
78
+ * @returns Created key metadata and API key string
79
+ * @throws EdgeRpcError if configuration is missing or request fails
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * const result = await createEdgeKey(ctx, {
84
+ * name: 'my-edge-agent',
85
+ * });
86
+ * // IMPORTANT: Save the API key - it won't be shown again!
87
+ * console.log('API Key:', result.apiKey);
88
+ * console.log('Edge ID:', result.key.edgeId);
89
+ * ```
90
+ */
91
+ export declare function createEdgeKey(_ctx: ActionCtx, options: CreateEdgeKeyOptions): Promise<CreateKeyResult>;
92
+ /**
93
+ * List edge keys.
94
+ *
95
+ * @param _ctx - Convex action context
96
+ * @returns Array of edge key metadata
97
+ * @throws EdgeRpcError if configuration is missing or request fails
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const keys = await listEdgeKeys(ctx);
102
+ * for (const key of keys) {
103
+ * console.log(`${key.name}: ${key.status}`);
104
+ * }
105
+ * ```
106
+ */
107
+ export declare function listEdgeKeys(_ctx: ActionCtx): Promise<KeyMetadata[]>;
108
+ /**
109
+ * Revoke an edge key.
110
+ *
111
+ * @param _ctx - Convex action context
112
+ * @param keyId - The key ID to revoke
113
+ * @param reason - Optional reason for revocation
114
+ * @throws EdgeRpcError if configuration is missing or request fails
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * await revokeEdgeKey(ctx, 'key-123', 'Agent decommissioned');
119
+ * ```
120
+ */
121
+ export declare function revokeEdgeKey(_ctx: ActionCtx, keyId: string, reason?: string): Promise<void>;
122
+ export {};
123
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;GAEG;AACH,UAAU,SAAS;CAElB;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,CAAC;AAEzF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gCAAgC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,GAAG,EAAE,WAAW,CAAC;IACjB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;CAChB;AAgED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAuD1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,EAAE,CAAC,CAyCxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAoDf"}
package/dist/keys.js ADDED
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Key Management Helpers for Convex
3
+ *
4
+ * These helpers allow Convex actions to manage API keys via dinkd.
5
+ * They follow the same pattern as edgeRpc.ts for authenticated HTTP calls.
6
+ *
7
+ * @module keys
8
+ */
9
+ import { getEdgeRpcConfig, EdgeRpcError, EDGE_RPC_ERROR_CODES } from "./edgeRpc.js";
10
+ // ============================================================================
11
+ // URL builders
12
+ // ============================================================================
13
+ function buildKeysUrl(baseUrl, endpoint) {
14
+ const url = new URL(`/api/keys/${endpoint}`, baseUrl);
15
+ return url.toString();
16
+ }
17
+ // ============================================================================
18
+ // Configuration validation
19
+ // ============================================================================
20
+ function validateConfig() {
21
+ const config = getEdgeRpcConfig();
22
+ if (!config.dinkUrl) {
23
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.MISSING_CONFIG, "DINK_URL environment variable is not configured");
24
+ }
25
+ if (!config.appSyncKey) {
26
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.MISSING_CONFIG, "DINK_APP_SYNC_KEY environment variable is not configured");
27
+ }
28
+ return {
29
+ dinkUrl: config.dinkUrl,
30
+ appSyncKey: config.appSyncKey,
31
+ };
32
+ }
33
+ // ============================================================================
34
+ // Response parsing
35
+ // ============================================================================
36
+ function parseKeyMetadata(raw) {
37
+ return {
38
+ id: raw.id,
39
+ appId: raw.app_id || '',
40
+ name: raw.name,
41
+ type: raw.type,
42
+ edgeId: raw.edge_id,
43
+ scopes: raw.scopes || [],
44
+ labels: raw.labels,
45
+ status: raw.status,
46
+ createdAt: raw.created_at,
47
+ expiresAt: raw.expires_at,
48
+ lastUsedAt: raw.last_used_at,
49
+ revokedAt: raw.revoked_at,
50
+ revokeReason: raw.revoke_reason,
51
+ };
52
+ }
53
+ // ============================================================================
54
+ // Main helper functions
55
+ // ============================================================================
56
+ /**
57
+ * Create a new edge key.
58
+ *
59
+ * @param _ctx - Convex action context
60
+ * @param options - Edge key creation options
61
+ * @returns Created key metadata and API key string
62
+ * @throws EdgeRpcError if configuration is missing or request fails
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const result = await createEdgeKey(ctx, {
67
+ * name: 'my-edge-agent',
68
+ * });
69
+ * // IMPORTANT: Save the API key - it won't be shown again!
70
+ * console.log('API Key:', result.apiKey);
71
+ * console.log('Edge ID:', result.key.edgeId);
72
+ * ```
73
+ */
74
+ export async function createEdgeKey(_ctx, options) {
75
+ const config = validateConfig();
76
+ const payload = {
77
+ name: options.name,
78
+ type: 'edge',
79
+ edge_id: options.edgeId || '',
80
+ scopes: ['edge:connect', 'services:register', 'services:expose'],
81
+ scope_bundle: 'bundle:edge',
82
+ labels: options.labels || {},
83
+ };
84
+ const url = buildKeysUrl(config.dinkUrl, 'create');
85
+ const response = await fetch(url, {
86
+ method: "POST",
87
+ headers: {
88
+ "Content-Type": "application/json",
89
+ Authorization: `Bearer ${config.appSyncKey}`,
90
+ },
91
+ body: JSON.stringify(payload),
92
+ });
93
+ if (response.status === 401) {
94
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.UNAUTHORIZED, "Invalid authorization token - ensure DINK_APP_SYNC_KEY has keys:manage scope");
95
+ }
96
+ if (!response.ok) {
97
+ const errorText = await response.text().catch(() => "");
98
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.SERVER_ERROR, `Failed to create key: ${response.status} ${response.statusText} - ${errorText}`);
99
+ }
100
+ const json = await response.json();
101
+ if (!json.success || !json.data) {
102
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.SERVER_ERROR, json.error || "Failed to create key");
103
+ }
104
+ return {
105
+ key: parseKeyMetadata(json.data.key),
106
+ apiKey: json.data.api_key,
107
+ };
108
+ }
109
+ /**
110
+ * List edge keys.
111
+ *
112
+ * @param _ctx - Convex action context
113
+ * @returns Array of edge key metadata
114
+ * @throws EdgeRpcError if configuration is missing or request fails
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * const keys = await listEdgeKeys(ctx);
119
+ * for (const key of keys) {
120
+ * console.log(`${key.name}: ${key.status}`);
121
+ * }
122
+ * ```
123
+ */
124
+ export async function listEdgeKeys(_ctx) {
125
+ const config = validateConfig();
126
+ const url = buildKeysUrl(config.dinkUrl, 'list') + '?type=edge';
127
+ const response = await fetch(url, {
128
+ method: "GET",
129
+ headers: {
130
+ Authorization: `Bearer ${config.appSyncKey}`,
131
+ },
132
+ });
133
+ if (response.status === 401) {
134
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.UNAUTHORIZED, "Invalid authorization token");
135
+ }
136
+ if (!response.ok) {
137
+ const errorText = await response.text().catch(() => "");
138
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.SERVER_ERROR, `Failed to list keys: ${response.status} ${response.statusText} - ${errorText}`);
139
+ }
140
+ const json = await response.json();
141
+ if (!json.success || !json.data) {
142
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.SERVER_ERROR, json.error || "Failed to list keys");
143
+ }
144
+ return (json.data.keys || []).map(parseKeyMetadata);
145
+ }
146
+ /**
147
+ * Revoke an edge key.
148
+ *
149
+ * @param _ctx - Convex action context
150
+ * @param keyId - The key ID to revoke
151
+ * @param reason - Optional reason for revocation
152
+ * @throws EdgeRpcError if configuration is missing or request fails
153
+ *
154
+ * @example
155
+ * ```typescript
156
+ * await revokeEdgeKey(ctx, 'key-123', 'Agent decommissioned');
157
+ * ```
158
+ */
159
+ export async function revokeEdgeKey(_ctx, keyId, reason) {
160
+ const config = validateConfig();
161
+ const payload = {
162
+ key_id: keyId,
163
+ reason: reason || '',
164
+ };
165
+ const url = buildKeysUrl(config.dinkUrl, 'revoke');
166
+ const response = await fetch(url, {
167
+ method: "POST",
168
+ headers: {
169
+ "Content-Type": "application/json",
170
+ Authorization: `Bearer ${config.appSyncKey}`,
171
+ },
172
+ body: JSON.stringify(payload),
173
+ });
174
+ if (response.status === 401) {
175
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.UNAUTHORIZED, "Invalid authorization token");
176
+ }
177
+ if (response.status === 404) {
178
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.EDGE_NOT_FOUND, `Key not found: ${keyId}`);
179
+ }
180
+ if (!response.ok) {
181
+ const errorText = await response.text().catch(() => "");
182
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.SERVER_ERROR, `Failed to revoke key: ${response.status} ${response.statusText} - ${errorText}`);
183
+ }
184
+ const json = await response.json();
185
+ if (!json.success) {
186
+ throw new EdgeRpcError(EDGE_RPC_ERROR_CODES.SERVER_ERROR, json.error || "Failed to revoke key");
187
+ }
188
+ }
189
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fatagnus/dink-convex",
3
- "version": "2.6.0",
3
+ "version": "2.8.0",
4
4
  "description": "Dink Convex sync component - bidirectional sync between Convex and edge devices",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -90,11 +90,7 @@
90
90
  "convex": "^1.17.0",
91
91
  "convex-helpers": "^0.1.0"
92
92
  },
93
- "peerDependenciesMeta": {
94
- "convex-helpers": {
95
- "optional": true
96
- }
97
- },
93
+
98
94
  "engines": {
99
95
  "node": ">=18.0.0"
100
96
  },