-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmod.ts
68 lines (55 loc) · 1.77 KB
/
mod.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
export * as ISO7816 from './iso7816/iso7816.ts';
export { CommandAPDU, ResponseAPDU, SmartCardException, HEX, BerTLV } from './iso7816/iso7816.ts';
export * as PCSC from './pcsc/pcsc.ts';
export type { Context, Reader, Card } from './pcsc/pcsc.ts';
export * as OMAPI from './omapi/omapi.ts';
export { SECommand, SEResponse, SEService } from './omapi/se-service.ts';
export * as FFI from './deno-pcsc-ffi/deno-pcsc-ffi.ts';
import { Context, Scope } from './pcsc/pcsc.ts';
import { FFIContext } from './deno-pcsc-ffi/context.ts';
export interface ContextProvider {
establishContext: (scope?: Scope) => Context;
readonly name: string;
}
let contextProvider: ContextProvider | undefined;
/**
* Singleton to instantiate a ContextProvider
*
* Detects running environment and auto-registers a ContextProvider for Deno `FFIContext`
* if a provider has not already bee registered.
*/
function getContextProvider() {
if (!contextProvider) {
// Auto-registration
// Deno 'FFI' provider
if (typeof Deno != "undefined") {
if (typeof Deno.UnsafePointer != "undefined") {
// Need Deno and --unsafe
contextProvider = {
establishContext: FFIContext.establishContext,
name: "Deno FFI"
}
}
else {
throw new Error("Must supply --unstable and --allow-ffi flags to Deno");
}
}
}
if (contextProvider)
return contextProvider;
throw new Error("No PCSC ContextProvider registered");
}
/**
* ContextProvider
*/
export const ContextProvider = {
registerProvider(provider: ContextProvider) {
contextProvider = provider;
},
get provider(): ContextProvider {
return getContextProvider();
},
establishContext(scope?: Scope): Context {
return getContextProvider().establishContext(scope);
},
}