@bubblelab/bubble-core 0.1.271 → 0.1.272
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake.utils.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/snowflake/snowflake.utils.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"snowflake.utils.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/snowflake/snowflake.utils.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAsDD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAgC5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAwExE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAChC,UAAU,EAAE,MAAM,GACjB,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EACzB,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAChC,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CAIpB"}
|
|
@@ -13,6 +13,8 @@ import { decodeCredentialPayload } from '@bubblelab/shared-schemas';
|
|
|
13
13
|
* - Keys that are already correctly formatted (no-op)
|
|
14
14
|
*/
|
|
15
15
|
function normalizePemKey(key) {
|
|
16
|
+
const tag = '[Snowflake:PEM]';
|
|
17
|
+
console.log(`${tag} input: len=${key.length}, first80=${JSON.stringify(key.slice(0, 80))}, last40=${JSON.stringify(key.slice(-40))}`);
|
|
16
18
|
// Strip BOM and outer whitespace
|
|
17
19
|
let cleaned = key.replace(/^\uFEFF/, '').trim();
|
|
18
20
|
// Replace literal backslash-n sequences with real newlines
|
|
@@ -22,6 +24,7 @@ function normalizePemKey(key) {
|
|
|
22
24
|
// Extract header, body, footer — works for any PEM label
|
|
23
25
|
const match = cleaned.match(/^(-----BEGIN [A-Z0-9 ]+-----)\s*([\s\S]*?)\s*(-----END [A-Z0-9 ]+-----)$/);
|
|
24
26
|
if (!match) {
|
|
27
|
+
console.log(`${tag} NO PEM MATCH — returning as-is, first80=${JSON.stringify(cleaned.slice(0, 80))}`);
|
|
25
28
|
return cleaned; // Not recognizable PEM — return as-is, let crypto throw a clear error
|
|
26
29
|
}
|
|
27
30
|
const header = match[1];
|
|
@@ -29,7 +32,9 @@ function normalizePemKey(key) {
|
|
|
29
32
|
// Strip ALL whitespace from the base64 body then re-wrap at 64 chars
|
|
30
33
|
const body = match[2].replace(/\s+/g, '');
|
|
31
34
|
const wrapped = body.match(/.{1,64}/g)?.join('\n') ?? body;
|
|
32
|
-
|
|
35
|
+
const result = `${header}\n${wrapped}\n${footer}\n`;
|
|
36
|
+
console.log(`${tag} normalized: header=${header}, bodyLen=${body.length}, totalLen=${result.length}, lines=${result.split('\n').length}`);
|
|
37
|
+
return result;
|
|
33
38
|
}
|
|
34
39
|
/**
|
|
35
40
|
* Parse a multi-field credential value into typed Snowflake fields.
|
|
@@ -37,14 +42,19 @@ function normalizePemKey(key) {
|
|
|
37
42
|
* base64 (injection path) and raw JSON (validator path).
|
|
38
43
|
*/
|
|
39
44
|
export function parseSnowflakeCredential(value) {
|
|
45
|
+
const tag = '[Snowflake:parse]';
|
|
46
|
+
console.log(`${tag} raw value: len=${value.length}, isBase64=${!/^{/.test(value.trim())}, first40=${JSON.stringify(value.slice(0, 40))}`);
|
|
40
47
|
const parsed = decodeCredentialPayload(value);
|
|
48
|
+
console.log(`${tag} decoded: account=${parsed.account}, username=${parsed.username}, hasPrivateKey=${!!parsed.privateKey}, pkLen=${parsed.privateKey?.length ?? 0}`);
|
|
41
49
|
if (!parsed.account || !parsed.username || !parsed.privateKey) {
|
|
42
50
|
throw new Error('Snowflake credential is missing required fields: account, username, privateKey');
|
|
43
51
|
}
|
|
52
|
+
const normalizedKey = normalizePemKey(parsed.privateKey);
|
|
53
|
+
console.log(`${tag} after normalize: pkLen=${normalizedKey.length}, startsWithHeader=${normalizedKey.startsWith('-----BEGIN')}`);
|
|
44
54
|
return {
|
|
45
55
|
account: parsed.account,
|
|
46
56
|
username: parsed.username,
|
|
47
|
-
privateKey:
|
|
57
|
+
privateKey: normalizedKey,
|
|
48
58
|
privateKeyPassword: parsed.privateKeyPassword || undefined,
|
|
49
59
|
warehouse: parsed.warehouse || undefined,
|
|
50
60
|
database: parsed.database || undefined,
|
|
@@ -62,16 +72,26 @@ export function parseSnowflakeCredential(value) {
|
|
|
62
72
|
* - exp: current timestamp + 1 hour
|
|
63
73
|
*/
|
|
64
74
|
export function generateSnowflakeJWT(creds) {
|
|
75
|
+
const tag = '[Snowflake:JWT]';
|
|
65
76
|
// Snowflake JWT requires the account identifier as-is (keep hyphens)
|
|
66
77
|
const accountUpper = creds.account.toUpperCase();
|
|
67
78
|
const userUpper = creds.username.toUpperCase();
|
|
79
|
+
console.log(`${tag} generating: account=${accountUpper}, user=${userUpper}, pkLen=${creds.privateKey.length}, hasPassphrase=${!!creds.privateKeyPassword}`);
|
|
68
80
|
// Create key object from PEM private key
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
let keyObject;
|
|
82
|
+
try {
|
|
83
|
+
keyObject = crypto.createPrivateKey({
|
|
84
|
+
key: creds.privateKey,
|
|
85
|
+
...(creds.privateKeyPassword && {
|
|
86
|
+
passphrase: creds.privateKeyPassword,
|
|
87
|
+
}),
|
|
88
|
+
});
|
|
89
|
+
console.log(`${tag} createPrivateKey succeeded: type=${keyObject.asymmetricKeyType}`);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
console.error(`${tag} createPrivateKey FAILED: ${err instanceof Error ? err.message : String(err)}`, `pkFirst80=${JSON.stringify(creds.privateKey.slice(0, 80))}`, `pkLast40=${JSON.stringify(creds.privateKey.slice(-40))}`);
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
75
95
|
// Extract public key and compute SHA-256 fingerprint
|
|
76
96
|
const publicKey = crypto.createPublicKey(keyObject);
|
|
77
97
|
const publicKeyDer = publicKey.export({ type: 'spki', format: 'der' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake.utils.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/snowflake/snowflake.utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAapE;;;;;;;;;;;GAWG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,iCAAiC;IACjC,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEhD,2DAA2D;IAC3D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAExC,iCAAiC;IACjC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEzC,yDAAyD;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CACzB,0EAA0E,CAC3E,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,OAAO,CAAC,CAAC,sEAAsE;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,qEAAqE;IACrE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAE3D,
|
|
1
|
+
{"version":3,"file":"snowflake.utils.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/snowflake/snowflake.utils.ts"],"names":[],"mappings":"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"}
|
package/dist/bubbles.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bubblelab/bubble-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.272",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"puppeteer-core": "^24.10.0",
|
|
42
42
|
"resend": "^4.8.0",
|
|
43
43
|
"zod": "^3.24.1",
|
|
44
|
-
"@bubblelab/shared-schemas": "0.1.
|
|
44
|
+
"@bubblelab/shared-schemas": "0.1.272"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/node": "^20.12.12",
|