@ibgib/web-gib 0.0.63 → 0.0.65

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 (133) hide show
  1. package/README.md +4 -0
  2. package/dist/AUTO-GENERATED-version.d.mts +1 -1
  3. package/dist/AUTO-GENERATED-version.mjs +1 -1
  4. package/dist/api/commands/ibgib/get-ibgibs.mjs +4 -4
  5. package/dist/api/commands/ibgib/get-ibgibs.mjs.map +1 -1
  6. package/dist/identity/device-delegate-helper.mjs +5 -5
  7. package/dist/identity/device-delegate-helper.mjs.map +1 -1
  8. package/dist/identity/keystone-sync-service.mjs +3 -3
  9. package/dist/identity/keystone-sync-service.mjs.map +1 -1
  10. package/dist/index.d.mts +4 -0
  11. package/dist/index.d.mts.map +1 -1
  12. package/dist/index.mjs +6 -0
  13. package/dist/index.mjs.map +1 -1
  14. package/dist/storage/storage-helpers.web.mjs +1 -1
  15. package/dist/storage/storage-helpers.web.mjs.map +1 -1
  16. package/dist/ui/component/identity/add-device/add-device.d.mts.map +1 -1
  17. package/dist/ui/component/identity/add-device/add-device.mjs +1 -1
  18. package/dist/ui/component/identity/add-device/add-device.mjs.map +1 -1
  19. package/dist/ui/component/identity/identity-header/identity-header.d.mts.map +1 -1
  20. package/dist/ui/component/identity/identity-header/identity-header.mjs +4 -4
  21. package/dist/ui/component/identity/identity-header/identity-header.mjs.map +1 -1
  22. package/dist/ui/component/identity/keystone-details/keystone-details.mjs +2 -2
  23. package/dist/ui/component/identity/keystone-details/keystone-details.mjs.map +1 -1
  24. package/dist/ui/component/privacy-policy/index.d.mts +11 -0
  25. package/dist/ui/component/privacy-policy/index.d.mts.map +1 -0
  26. package/dist/ui/component/privacy-policy/index.mjs +16 -0
  27. package/dist/ui/component/privacy-policy/index.mjs.map +1 -0
  28. package/dist/ui/component/privacy-policy/privacy-policy.css +263 -0
  29. package/dist/ui/component/privacy-policy/privacy-policy.d.mts +46 -0
  30. package/dist/ui/component/privacy-policy/privacy-policy.d.mts.map +1 -0
  31. package/dist/ui/component/privacy-policy/privacy-policy.html +27 -0
  32. package/dist/ui/component/privacy-policy/privacy-policy.mjs +128 -0
  33. package/dist/ui/component/privacy-policy/privacy-policy.mjs.map +1 -0
  34. package/dist/ui/ui-constants.d.mts +4 -0
  35. package/dist/ui/ui-constants.d.mts.map +1 -1
  36. package/dist/ui/ui-constants.mjs +6 -0
  37. package/dist/ui/ui-constants.mjs.map +1 -1
  38. package/dist/witness/agent/gemini/gemini-helpers.mjs +4 -4
  39. package/dist/witness/agent/gemini/gemini-helpers.mjs.map +1 -1
  40. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-constants.d.mts +7 -0
  41. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-constants.d.mts.map +1 -0
  42. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-constants.mjs +7 -0
  43. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-constants.mjs.map +1 -0
  44. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-types.d.mts +24 -0
  45. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-types.d.mts.map +1 -0
  46. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-types.mjs +23 -0
  47. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-types.mjs.map +1 -0
  48. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-v1.d.mts +85 -0
  49. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-v1.d.mts.map +1 -0
  50. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-v1.mjs +343 -0
  51. package/dist/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-v1.mjs.map +1 -0
  52. package/package.json +5 -5
  53. package/src/AUTO-GENERATED-version.mts +1 -1
  54. package/src/api/commands/ibgib/get-ibgibs.mts +4 -4
  55. package/src/helpers.mts +1 -1
  56. package/src/helpers.web.respec.mts +41 -10
  57. package/src/identity/device-delegate-helper.mts +5 -5
  58. package/src/identity/keystone-sync-service.mts +3 -3
  59. package/src/index.mts +8 -0
  60. package/src/storage/storage-helpers.web.mts +1 -1
  61. package/src/ui/component/identity/add-device/add-device.mts +5 -4
  62. package/src/ui/component/identity/identity-header/identity-header.mts +4 -3
  63. package/src/ui/component/identity/keystone-details/keystone-details.mts +2 -2
  64. package/src/ui/component/privacy-policy/index.mts +18 -0
  65. package/src/ui/component/privacy-policy/privacy-policy.css +263 -0
  66. package/src/ui/component/privacy-policy/privacy-policy.html +27 -0
  67. package/src/ui/component/privacy-policy/privacy-policy.mts +168 -0
  68. package/src/ui/ui-constants.mts +7 -0
  69. package/src/witness/agent/gemini/gemini-helpers.mts +4 -4
  70. package/src/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-constants.mts +8 -0
  71. package/src/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-types.mts +53 -0
  72. package/src/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-v1.mts +424 -0
  73. package/src/witness/space/web-in-memory-workspace-projection-space/web-in-memory-workspace-projection-space-v1.respec.mts +305 -0
  74. package/tools/auto-generated-agent-skills/skills/ibgib-create-app/SKILL.md +65 -39
  75. package/tools/auto-generated-agent-skills/skills/ibgib-create-client-app/SKILL.md +51 -0
  76. package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/SKILL.md +26 -22
  77. package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/generate-id.js +1 -1
  78. package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-witness → ibgib-create-client-app-witness}/SKILL.md +11 -7
  79. package/tools/auto-generated-agent-skills/skills/ibgib-create-client-identity/SKILL.md +78 -0
  80. package/tools/auto-generated-agent-skills/skills/ibgib-create-client-shell/SKILL.md +42 -0
  81. package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-server → ibgib-create-server-app}/SKILL.md +6 -6
  82. package/tools/auto-generated-agent-skills/skills/ibgib-create-server-app/templates/Dockerfile.template +14 -0
  83. package/tools/auto-generated-agent-skills/skills/ibgib-create-server-app/templates/docker-compose.yml.template +33 -0
  84. package/tools/auto-generated-agent-skills/skills/ibgib-create-server-app/templates/server.mts.template +97 -0
  85. package/tools/auto-generated-agent-skills/skills/ibgib-create-server-app/templates/tsconfig.server.json.template +29 -0
  86. package/tools/auto-generated-agent-skills/skills/ibgib-implementation-plan/SKILL.md +11 -5
  87. package/tsconfig.json +2 -2
  88. package/dist/api/commands/command-service.respec.d.mts +0 -7
  89. package/dist/api/commands/command-service.respec.d.mts.map +0 -1
  90. package/dist/api/commands/command-service.respec.mjs +0 -66
  91. package/dist/api/commands/command-service.respec.mjs.map +0 -1
  92. package/dist/assumptions.respec.d.mts +0 -2
  93. package/dist/assumptions.respec.d.mts.map +0 -1
  94. package/dist/assumptions.respec.mjs +0 -41
  95. package/dist/assumptions.respec.mjs.map +0 -1
  96. package/dist/helpers.web.respec.d.mts +0 -2
  97. package/dist/helpers.web.respec.d.mts.map +0 -1
  98. package/dist/helpers.web.respec.mjs +0 -12
  99. package/dist/helpers.web.respec.mjs.map +0 -1
  100. package/dist/identity/device-delegate.respec.d.mts +0 -2
  101. package/dist/identity/device-delegate.respec.d.mts.map +0 -1
  102. package/dist/identity/device-delegate.respec.mjs +0 -106
  103. package/dist/identity/device-delegate.respec.mjs.map +0 -1
  104. package/dist/identity/passkey.respec.d.mts +0 -2
  105. package/dist/identity/passkey.respec.d.mts.map +0 -1
  106. package/dist/identity/passkey.respec.mjs +0 -169
  107. package/dist/identity/passkey.respec.mjs.map +0 -1
  108. package/dist/spec-helper.node.respec.d.mts +0 -13
  109. package/dist/spec-helper.node.respec.d.mts.map +0 -1
  110. package/dist/spec-helper.node.respec.mjs +0 -50
  111. package/dist/spec-helper.node.respec.mjs.map +0 -1
  112. package/dist/util/device-helper.respec.d.mts +0 -2
  113. package/dist/util/device-helper.respec.d.mts.map +0 -1
  114. package/dist/util/device-helper.respec.mjs +0 -83
  115. package/dist/util/device-helper.respec.mjs.map +0 -1
  116. package/tools/auto-generated-agent-skills/skills/ibgib-create-shell/SKILL.md +0 -40
  117. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/generate-version-file.js +0 -0
  118. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/templates/bootstrap.mts.template +0 -0
  119. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/templates/constants.mts.template +0 -0
  120. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/templates/declarations.d.ts.template +0 -0
  121. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/templates/helpers.web.mts.template +0 -0
  122. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/templates/index.html.template +0 -0
  123. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/templates/index.mts.template +0 -0
  124. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/templates/script.mts.template +0 -0
  125. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-core → ibgib-create-client-app-core}/templates/types.mts.template +0 -0
  126. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-witness → ibgib-create-client-app-witness}/templates/api/function-infos.web.mts.template +0 -0
  127. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-witness → ibgib-create-client-app-witness}/templates/witness/app/app-v1.mts.template +0 -0
  128. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-witness → ibgib-create-client-app-witness}/templates/witness/app/constants.mts.template +0 -0
  129. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-witness → ibgib-create-client-app-witness}/templates/witness/app/helper.mts.template +0 -0
  130. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-app-witness → ibgib-create-client-app-witness}/templates/witness/app/types.mts.template +0 -0
  131. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-shell → ibgib-create-client-shell}/templates/ui/shell/shell-constants.mts.template +0 -0
  132. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-shell → ibgib-create-client-shell}/templates/ui/shell/shell-service.mts.template +0 -0
  133. /package/tools/auto-generated-agent-skills/skills/{ibgib-create-shell → ibgib-create-client-shell}/templates/ui/shell/shell-types.mts.template +0 -0
@@ -1,106 +0,0 @@
1
- import { respecfully, ifWe, iReckon } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
2
- import { getIbGibGlobalThis_IbGib } from '../helpers.mjs';
3
- import { getDeviceDelegateSecretKey, getDeviceDelegateSecret, setDeviceDelegateSecret, getOrCreateDeviceDelegateSecret, clearDeviceDelegateSecret, DEVICE_DELEGATE_SECRET_PREFIX } from './device-delegate-helper.mjs';
4
- const sir = `[${import.meta.url}]`;
5
- // Initialize global db & store names for tests
6
- const globalThisIbGib = getIbGibGlobalThis_IbGib();
7
- globalThisIbGib.dbName_hack = 'space_gib_db';
8
- globalThisIbGib.storeName_hack = 'space_gib_store';
9
- // Mock storage substrate for Node test environment
10
- const inMemoryStore = new Map();
11
- if (typeof globalThis.indexedDB === 'undefined') {
12
- globalThis.indexedDB = {
13
- open: (dbName) => {
14
- const req = {};
15
- setTimeout(() => {
16
- const db = {
17
- objectStoreNames: { contains: () => true },
18
- transaction: (storeName) => ({
19
- objectStore: (sName) => ({
20
- get: (key) => {
21
- const getReq = {};
22
- setTimeout(() => {
23
- const val = inMemoryStore.get(key);
24
- getReq.result = val !== undefined ? { value: val } : undefined;
25
- if (getReq.onsuccess)
26
- getReq.onsuccess({ target: getReq });
27
- }, 0);
28
- return getReq;
29
- },
30
- put: (datum) => {
31
- const putReq = {};
32
- setTimeout(() => {
33
- inMemoryStore.set(datum.key, datum.value);
34
- if (putReq.onsuccess)
35
- putReq.onsuccess({ target: putReq });
36
- }, 0);
37
- return putReq;
38
- },
39
- delete: (key) => {
40
- const delReq = {};
41
- setTimeout(() => {
42
- inMemoryStore.delete(key);
43
- if (delReq.onsuccess)
44
- delReq.onsuccess({ target: delReq });
45
- }, 0);
46
- return delReq;
47
- }
48
- })
49
- }),
50
- close: () => { }
51
- };
52
- req.result = db;
53
- if (req.onsuccess)
54
- req.onsuccess({ target: req });
55
- }, 0);
56
- return req;
57
- }
58
- };
59
- }
60
- await respecfully(sir, 'Device Delegate Storage & Secret Lifecycle', async () => {
61
- await ifWe(sir, 'getDeviceDelegateSecretKey constructs deterministic storage key', async () => {
62
- const primaryTjpAddr = 'keystone^alice_tjp_12345';
63
- const key = getDeviceDelegateSecretKey({ primaryTjpAddr });
64
- iReckon(sir, key).willEqual(`${DEVICE_DELEGATE_SECRET_PREFIX}${primaryTjpAddr}`);
65
- });
66
- await ifWe(sir, 'setDeviceDelegateSecret and getDeviceDelegateSecret persist and retrieve secret', async () => {
67
- const primaryTjpAddr = 'keystone^bob_tjp_999';
68
- const secret = 'super-secret-512-token-abc';
69
- await setDeviceDelegateSecret({ primaryTjpAddr, delegateSecret: secret });
70
- const retrieved = await getDeviceDelegateSecret({ primaryTjpAddr });
71
- iReckon(sir, retrieved).willEqual(secret);
72
- });
73
- await ifWe(sir, 'getOrCreateDeviceDelegateSecret generates high entropy token on first call and caches it', async () => {
74
- const primaryTjpAddr = 'keystone^charlie_tjp_888';
75
- const token1 = await getOrCreateDeviceDelegateSecret({ primaryTjpAddr, deviceTag: 'laptop' });
76
- iReckon(sir, typeof token1 === 'string' && token1.length === 128).willEqual(true);
77
- const token2 = await getOrCreateDeviceDelegateSecret({ primaryTjpAddr, deviceTag: 'laptop' });
78
- iReckon(sir, token1).willEqual(token2);
79
- });
80
- await ifWe(sir, 'clearDeviceDelegateSecret removes stored secret', async () => {
81
- const primaryTjpAddr = 'keystone^david_tjp_777';
82
- await getOrCreateDeviceDelegateSecret({ primaryTjpAddr });
83
- const beforeClear = await getDeviceDelegateSecret({ primaryTjpAddr });
84
- iReckon(sir, !!beforeClear).willEqual(true);
85
- await clearDeviceDelegateSecret({ primaryTjpAddr });
86
- const afterClear = await getDeviceDelegateSecret({ primaryTjpAddr });
87
- iReckon(sir, afterClear).willEqual(undefined);
88
- });
89
- await ifWe(sir, 'fails fast when global db or store name is uninitialized', async () => {
90
- const primaryTjpAddr = 'keystone^failfast_tjp_000';
91
- const savedDb = globalThisIbGib.dbName_hack;
92
- globalThisIbGib.dbName_hack = undefined;
93
- let threw = false;
94
- try {
95
- await getDeviceDelegateSecret({ primaryTjpAddr });
96
- }
97
- catch (error) {
98
- threw = true;
99
- }
100
- finally {
101
- globalThisIbGib.dbName_hack = savedDb;
102
- }
103
- iReckon(sir, threw).willEqual(true);
104
- });
105
- });
106
- //# sourceMappingURL=device-delegate.respec.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-delegate.respec.mjs","sourceRoot":"","sources":["../../src/identity/device-delegate.respec.mts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=passkey.respec.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"passkey.respec.d.mts","sourceRoot":"","sources":["../../src/identity/passkey.respec.mts"],"names":[],"mappings":""}
@@ -1,169 +0,0 @@
1
- import { respecfully, ifWe, iReckon } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
2
- import { getIbGibGlobalThis_IbGib } from '../helpers.mjs';
3
- import { bufferToHex, hexToUint8Array, normalizeSaltTo32Bytes, isPasskeyPrfSupported, createPasskeyDeviceSyncDelegate } from './passkey-helper.mjs';
4
- import { getDeviceDelegateSecret } from './device-delegate-helper.mjs';
5
- const sir = `[${import.meta.url}]`;
6
- // Initialize global db & store names for tests
7
- const globalThisIbGib = getIbGibGlobalThis_IbGib();
8
- globalThisIbGib.dbName_hack = 'space_gib_db';
9
- globalThisIbGib.storeName_hack = 'space_gib_store';
10
- // Mock storage substrate for Node test environment
11
- const inMemoryStore = new Map();
12
- if (typeof globalThis.indexedDB === 'undefined') {
13
- globalThis.indexedDB = {
14
- open: (dbName) => {
15
- const req = {};
16
- setTimeout(() => {
17
- const db = {
18
- objectStoreNames: { contains: () => true },
19
- transaction: (storeName) => ({
20
- objectStore: (sName) => ({
21
- get: (key) => {
22
- const getReq = {};
23
- setTimeout(() => {
24
- const val = inMemoryStore.get(key);
25
- getReq.result = val !== undefined ? { value: val } : undefined;
26
- if (getReq.onsuccess)
27
- getReq.onsuccess({ target: getReq });
28
- }, 0);
29
- return getReq;
30
- },
31
- put: (datum) => {
32
- const putReq = {};
33
- setTimeout(() => {
34
- inMemoryStore.set(datum.key, datum.value);
35
- if (putReq.onsuccess)
36
- putReq.onsuccess({ target: putReq });
37
- }, 0);
38
- return putReq;
39
- },
40
- delete: (key) => {
41
- const delReq = {};
42
- setTimeout(() => {
43
- inMemoryStore.delete(key);
44
- if (delReq.onsuccess)
45
- delReq.onsuccess({ target: delReq });
46
- }, 0);
47
- return delReq;
48
- }
49
- })
50
- }),
51
- close: () => { }
52
- };
53
- req.result = db;
54
- if (req.onsuccess)
55
- req.onsuccess({ target: req });
56
- }, 0);
57
- return req;
58
- }
59
- };
60
- }
61
- // Setup environment profile
62
- process.env.KEYSTONE_PROFILE_SOVEREIGN_SYNC = 'sync-profile.dev';
63
- class MockIbGibSpace {
64
- name;
65
- store = new Map();
66
- ib = 'witness space mock-space mock_space_id user';
67
- constructor(name = "mock_space") {
68
- this.name = name;
69
- }
70
- async put({ ibGib }) {
71
- const addr = `${ibGib.ib}^${ibGib.gib}`;
72
- this.store.set(addr, JSON.parse(JSON.stringify(ibGib)));
73
- }
74
- async get({ addr }) {
75
- const data = this.store.get(addr);
76
- return data ? JSON.parse(JSON.stringify(data)) : null;
77
- }
78
- async argy({ argData, ibGibs }) {
79
- return {
80
- ib: 'arg^gib',
81
- gib: 'arg_gib',
82
- data: argData,
83
- ibGibs,
84
- };
85
- }
86
- async witness(arg) {
87
- return { data: { success: true } };
88
- }
89
- }
90
- class MockMetaspaceService {
91
- space;
92
- constructor(space) {
93
- this.space = space;
94
- }
95
- async getLocalUserSpace({ lock } = {}) {
96
- return this.space;
97
- }
98
- async put(args) {
99
- const target = args.space || this.space;
100
- return target.put(args);
101
- }
102
- async registerNewIbGib({ ibGib }) {
103
- return this.put({ ibGib });
104
- }
105
- async get(args) {
106
- const target = args.space || this.space;
107
- if (args.addr) {
108
- const x = await target.get({ addr: args.addr });
109
- return { success: !!x, ibGibs: x ? [x] : [] };
110
- }
111
- return { success: true, ibGibs: [] };
112
- }
113
- }
114
- const mockSpace = new MockIbGibSpace();
115
- const mockMetaspace = new MockMetaspaceService(mockSpace);
116
- await respecfully(sir, 'Passkey WebAuthn PRF Helper Service', async () => {
117
- await ifWe(sir, 'bufferToHex and hexToUint8Array roundtrip correctly', async () => {
118
- const originalBytes = new Uint8Array([0xde, 0xad, 0xbe, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]);
119
- const hex = bufferToHex(originalBytes.buffer);
120
- iReckon(sir, hex).willEqual('deadbeef0123456789abcdef');
121
- const roundtripBytes = hexToUint8Array(hex);
122
- iReckon(sir, roundtripBytes.length).willEqual(originalBytes.length);
123
- for (let i = 0; i < originalBytes.length; i++) {
124
- iReckon(sir, roundtripBytes[i]).willEqual(originalBytes[i]);
125
- }
126
- });
127
- await ifWe(sir, 'normalizeSaltTo32Bytes normalizes various salt inputs to 32 bytes', async () => {
128
- // 1. Hex string of 64 chars (32 bytes)
129
- const hex64 = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef';
130
- const normHex = normalizeSaltTo32Bytes(hex64);
131
- iReckon(sir, normHex.length).willEqual(32);
132
- iReckon(sir, bufferToHex(normHex.buffer)).willEqual(hex64);
133
- // 2. Text string
134
- const textSalt = 'ibgib_passkey_salt_domain_123';
135
- const normText = normalizeSaltTo32Bytes(textSalt);
136
- iReckon(sir, normText.length).willEqual(32);
137
- // 3. Uint8Array
138
- const rawBytes = new Uint8Array(32);
139
- rawBytes.fill(0x42);
140
- const normRaw = normalizeSaltTo32Bytes(rawBytes);
141
- iReckon(sir, normRaw.length).willEqual(32);
142
- iReckon(sir, normRaw[0]).willEqual(0x42);
143
- });
144
- await ifWe(sir, 'isPasskeyPrfSupported evaluates capabilities cleanly', async () => {
145
- // In Node environment without window
146
- const supported = await isPasskeyPrfSupported();
147
- iReckon(sir, typeof supported).willEqual('boolean');
148
- });
149
- await ifWe(sir, 'createPasskeyDeviceSyncDelegate creates standard passkey sync delegate', async () => {
150
- const username = 'alice';
151
- const primaryTjpAddr = 'keystone^alice_primary_tjp.addr';
152
- const passkeySecret = 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
153
- const { delegateKeystone, deviceTag, delegateSecret } = await createPasskeyDeviceSyncDelegate({
154
- username,
155
- primaryTjpAddr,
156
- passkeySecret,
157
- transports: ['internal'],
158
- metaspace: mockMetaspace,
159
- space: mockSpace,
160
- });
161
- iReckon(sir, delegateKeystone).asTo('delegateKeystone is generated').isGonnaBeTruthy();
162
- iReckon(sir, deviceTag.startsWith('passkey-alice-')).asTo('deviceTag follows passkey naming format').isGonnaBeTrue();
163
- iReckon(sir, delegateSecret).asTo('delegateSecret is derived').isGonnaBeTruthy();
164
- // Verify stored in IndexedDB
165
- const storedSecret = await getDeviceDelegateSecret({ primaryTjpAddr });
166
- iReckon(sir, storedSecret).willEqual(delegateSecret);
167
- });
168
- });
169
- //# sourceMappingURL=passkey.respec.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"passkey.respec.mjs","sourceRoot":"","sources":["../../src/identity/passkey.respec.mts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * helper function to get the filename for use in specs.
3
- *
4
- * @param importMetaUrl import.meta.url
5
- * @returns currently executing filename sans .respec.mjs
6
- */
7
- export declare function getCurrentFilename(importMetaUrl: string): Promise<string>;
8
- export declare function specGetSpaceId(): Promise<string>;
9
- export declare function specGetSpaceName(uuid: string): string;
10
- export declare function specGetSpaceDescription(uuid: string): string;
11
- export declare function specGetBaseDir(testBaseDirRoot: string, uuid: string, logalot: boolean, lc: string): string;
12
- export declare function specGetBaseSubPath(testBaseDirRoot: string, uuid: string, logalot: boolean, lc: string): string;
13
- //# sourceMappingURL=spec-helper.node.respec.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-helper.node.respec.d.mts","sourceRoot":"","sources":["../src/spec-helper.node.respec.mts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/E;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAQtD;AACD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AACD,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAI1G;AACD,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9G"}
@@ -1,50 +0,0 @@
1
- import { default as pathUtils } from 'path';
2
- import { delay, getUUID, } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
3
- /**
4
- * helper function to get the filename for use in specs.
5
- *
6
- * @param importMetaUrl import.meta.url
7
- * @returns currently executing filename sans .respec.mjs
8
- */
9
- export async function getCurrentFilename(importMetaUrl) {
10
- const lc = `[${getCurrentFilename.name}]`;
11
- try {
12
- const pieces = importMetaUrl.split(pathUtils.sep);
13
- let filename = pieces.at(-1)?.replace(/\.respec\.mjs$/, '');
14
- if (!filename) {
15
- console.warn(`filename not able to be gotten?`);
16
- filename = (new Date()).toTimeString() + (await getUUID());
17
- }
18
- return `ibgib${pathUtils.sep}${filename}`;
19
- }
20
- catch (error) {
21
- console.error(`${lc} ${error.message}`);
22
- throw error;
23
- }
24
- }
25
- export async function specGetSpaceId() {
26
- await delay(10);
27
- let uuid = await getUUID();
28
- let now = new Date();
29
- now.getMinutes();
30
- let timeComponent = now.getMinutes().toString() + now.getSeconds().toString() + now.getMilliseconds().toString();
31
- uuid = timeComponent + uuid.substring(timeComponent.length, uuid.length);
32
- return uuid;
33
- }
34
- export function specGetSpaceName(uuid) {
35
- return uuid.substring(0, 8) + '-space';
36
- }
37
- export function specGetSpaceDescription(uuid) {
38
- return 'description for ' + uuid.substring(0, 8);
39
- }
40
- export function specGetBaseDir(testBaseDirRoot, uuid, logalot, lc) {
41
- const dir = pathUtils.join(".", testBaseDirRoot, specGetSpaceName(uuid) + "_baseDir");
42
- if (logalot) {
43
- console.log(`${lc}[${specGetBaseDir.name}] dir: ${dir} (I: 410c57b7d02ac2ddf9ca32493ad19523)`);
44
- }
45
- return dir;
46
- }
47
- export function specGetBaseSubPath(testBaseDirRoot, uuid, logalot, lc) {
48
- return "tmp";
49
- }
50
- //# sourceMappingURL=spec-helper.node.respec.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-helper.node.respec.mjs","sourceRoot":"","sources":["../src/spec-helper.node.respec.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,iDAAiD,CAAC;AAElF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,aAAqB;IAC1D,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC;IAC1C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAChD,QAAQ,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,QAAQ,SAAS,CAAC,GAAG,GAAG,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAChC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC3B,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,GAAG,CAAC,UAAU,EAAE,CAAC;IACjB,IAAI,aAAa,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAA;IAChH,IAAI,GAAG,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAChD,OAAO,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,eAAuB,EAAE,IAAY,EAAE,OAAgB,EAAE,EAAU;IAC9F,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IACtF,IAAI,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,cAAc,CAAC,IAAI,UAAU,GAAG,wCAAwC,CAAC,CAAC;IAAC,CAAC;IAChH,OAAO,GAAG,CAAC;AACf,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,eAAuB,EAAE,IAAY,EAAE,OAAgB,EAAE,EAAU;IAClG,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=device-helper.respec.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-helper.respec.d.mts","sourceRoot":"","sources":["../../src/util/device-helper.respec.mts"],"names":[],"mappings":""}
@@ -1,83 +0,0 @@
1
- import { respecfully, iReckon, ifWe // DO NOT REMOVE ifWeMight or ifWe even if no longer used. We constantly change these when focusing tests
2
- } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
3
- const maam = `[${import.meta.url}]`, sir = maam;
4
- import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
5
- import { generateDefaultDeviceTag } from './device-helper.mjs';
6
- await respecfully(sir, 'device-helper', async () => {
7
- await ifWe(sir, 'generate clean tag for Desktop Windows Chrome', async () => {
8
- const lc = `[generate clean tag for Desktop Windows Chrome]`;
9
- try {
10
- const tag = generateDefaultDeviceTag({
11
- userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
12
- userAgentData: { platform: 'Windows', mobile: false },
13
- randomSuffix: 'a1b2'
14
- });
15
- iReckon(sir, tag).asTo('tag value').isGonnaBe('chrome-win-a1b2');
16
- }
17
- catch (error) {
18
- console.error(`${lc} ${extractErrorMsg(error)}`);
19
- throw error;
20
- }
21
- });
22
- await ifWe(sir, 'generate clean tag for Mobile iOS Safari (iPhone)', async () => {
23
- const lc = `[generate clean tag for Mobile iOS Safari (iPhone)]`;
24
- try {
25
- const tag = generateDefaultDeviceTag({
26
- userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
27
- userAgentData: { platform: 'iOS', mobile: true },
28
- randomSuffix: '3c4d'
29
- });
30
- iReckon(sir, tag).asTo('tag value').isGonnaBe('mobile-safari-ios-3c4d');
31
- }
32
- catch (error) {
33
- console.error(`${lc} ${extractErrorMsg(error)}`);
34
- throw error;
35
- }
36
- });
37
- await ifWe(sir, 'generate clean tag for Android Chrome Phone', async () => {
38
- const lc = `[generate clean tag for Android Chrome Phone]`;
39
- try {
40
- const tag = generateDefaultDeviceTag({
41
- userAgent: 'Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
42
- userAgentData: { platform: 'Android', mobile: true },
43
- randomSuffix: '9e8f'
44
- });
45
- iReckon(sir, tag).asTo('tag value').isGonnaBe('mobile-chrome-android-9e8f');
46
- }
47
- catch (error) {
48
- console.error(`${lc} ${extractErrorMsg(error)}`);
49
- throw error;
50
- }
51
- });
52
- await ifWe(sir, 'generate clean tag for iPad / Tablet', async () => {
53
- const lc = `[generate clean tag for iPad / Tablet]`;
54
- try {
55
- const tag = generateDefaultDeviceTag({
56
- userAgent: 'Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
57
- maxTouchPoints: 5,
58
- screenWidth: 1024,
59
- randomSuffix: '7a8b'
60
- });
61
- iReckon(sir, tag).asTo('tag value').isGonnaBe('tablet-safari-ios-7a8b');
62
- }
63
- catch (error) {
64
- console.error(`${lc} ${extractErrorMsg(error)}`);
65
- throw error;
66
- }
67
- });
68
- await ifWe(sir, 'generate fallback tag with random 4-char suffix when no hints are present', async () => {
69
- const lc = `[generate fallback tag with random 4-char suffix]`;
70
- try {
71
- const tag = generateDefaultDeviceTag({
72
- userAgent: '',
73
- randomSuffix: '1234'
74
- });
75
- iReckon(sir, tag).asTo('tag value').isGonnaBe('device-1234');
76
- }
77
- catch (error) {
78
- console.error(`${lc} ${extractErrorMsg(error)}`);
79
- throw error;
80
- }
81
- });
82
- });
83
- //# sourceMappingURL=device-helper.respec.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-helper.respec.mjs","sourceRoot":"","sources":["../../src/util/device-helper.respec.mts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- ---
2
- name: ibgib-create-shell
3
- description: Scaffolds the foundational UI Shell for an ibgib app. Generates the shell service, constants, and types required for UI management and component registration.
4
- ---
5
-
6
- # ibgib-create-shell
7
-
8
- This skill scaffolds the UI Shell architecture for an ibgib application. The Shell Service acts as a singleton on `globalThis` that manages DOM interactions, handles shell-specific events, and registers UI components with the `ibgib-component-service`.
9
-
10
- ## Goal
11
- To provide a clean, decoupled foundation for application-level UI management, including the `onEngineReady` lifecycle hook called by the bootstrap process.
12
-
13
- ## Parameters
14
- Wait for the user to provide or confirm these tokens:
15
- - `{{APP_NAME}}`: e.g. `test-app`
16
- - `{{APP_DIR_NAME}}`: e.g. `test-app`
17
- - `{{APP_CLASSNAME_PREFIX}}`: e.g. `TestApp`
18
- - `{{APP_CLASSNAME}}`: e.g. `TestAppApp_V1`
19
- - `{{APP_HUMAN_NAME}}`: e.g. `Test App`
20
- - `{{APP_VAR_NAME}}`: e.g. `testApp` (used for singleton naming)
21
-
22
- ## Output Files
23
- The skill will generate:
24
- 1. `src/ui/shell/{{APP_DIR_NAME}}-shell-service.mts`
25
- 2. `src/ui/shell/{{APP_DIR_NAME}}-shell-constants.mts`
26
- 3. `src/ui/shell/{{APP_DIR_NAME}}-shell-types.mts`
27
- 4. `src/script.mts`
28
-
29
- ## Usage Instructions
30
- 1. Ensure the `src/ui/shell` directory exists or the tool will create it.
31
- 2. Generate the shell service, constants, and types from templates.
32
- 3. Update `src/script.mts` to import and call the shell factory:
33
- ```typescript
34
- import { get{{APP_CLASSNAME_PREFIX}}ShellSvc } from "./ui/shell/{{APP_DIR_NAME}}-shell-service.mjs";
35
- get{{APP_CLASSNAME_PREFIX}}ShellSvc();
36
- ```
37
- 4. Update `src/bootstrap.mts` to import and call `get{{APP_CLASSNAME_PREFIX}}ShellSvc().onEngineReady()` in the `execFromArgs` function.
38
-
39
- ## Integration Note
40
- The shell service provides an `onEngineReady()` hook. This is where you should put logic to "activate" the UI once the ibgib metaspace and app witness are fully initialized.